博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我是如何使用ES6重写电商网站官网的?
阅读量:4648 次
发布时间:2019-06-09

本文共 3033 字,大约阅读时间需要 10 分钟。

缘由

前段时间公司决定重构电商业务系统,主要原因是希望把后端语言 .Net 重构成 Java 以方便招聘,同时重新设计了 UI。而我被临时调到MRO架构业务组重写电商官网前端界面。在完成了 电商主页 - 商品列表页 - 商品详情页后 又被原项目组老大调回去,写了项目组内部使用的微前端框架 ,先把链接放出来,等万事具备了开源之后就可以直接访问了(鸡贼。。。)。

调查

但是,既然要重写电商官网,就一定要秀。不秀,怎么对得起重写和KPI,对吗?于是,我开始思考怎么重写?在写之前,我看了下目前国内主流电商官网和它们的前端技术解决方案。那就在这里做个小小的概览吧:

PS: 能力有限,如果错误,烦请指证。

技术栈

  • Ali 系技术栈是: +
  • JD 系技术栈是: + (讲实话我并不清楚那里用了,没有仔细翻代码)+ (掏出神器)

优化技术

  • Server 仅渲染首屏 必要 DOM节点,后续渲染交由客户端按需渲染,优化 的时间。
  • lazy rendering DOM elements + lazy loading Images
  • template syntax
  • 懒加载侧边栏菜单类似
  • .webp 图片格式
  • 分比例图片(默认加载缩略图,放大后加载高清图)
  • CDN
  • HTTP2.0
  • Cache-Control
  • DNS-Prefetch
  • LINK PreFetch/PreLoad
  • - 仅淘宝使用了这项技术,而天猫没有??~

思路

由于最近两年一直使用 React\Vue 这样的前端框架,对于写 JS 代码的语法已经习惯了 ES6/7,爱上了 Component 和 Webpack,不想再回到刀耕火种的年代。

而电商又比较在意SEO,而架构团队又并不太愿意使用 node-SSR,因此使用 next(React)/nuxt(Vue) 的建议被闲置(未被否也未被采用)。尽管后来还是上了 VueJS,但是使用的方式却是浏览器原生的方式,没有任何构建工具。对后端工程师而言,真是挺苦逼的。最终问过当时团队 leader 对于前端技术栈的选择方面的要求时,他的答复是:十个前端九个能上手。于是最后将技术栈改成了 webpack + jQuery + pug(模版引擎)。

  • Webpack - 快速高效的开发,热加载、自刷新、代码分块,都是前端工程的痛点。
  • jQuery - 则是应 Leader 的要求,因为项目后端会 参与维护,以及需要大部人都能理解和修改。
  • pug - 则是 nodeJS 的模版语言,类似 python 的空格语法非常简单干练。
  • sass - CSS预处理器

这一套就达到了愉快的开发体验。

开始

用了一天的时间编写 webpack 的配置和调试构建工具。

  • webpack plugins
    • webpack-dev-server
    • babel
    • eslint
    • scss
    • postcss
      • autoprefixer
  • support multiple entries
  • support css preprocessor
  • support
  • support

项目结构变成了这样:

/build # 构件脚本内容  /rollup  /webpack/public # 静态依赖  - favicon.ico  - index.html/src  /assets # 项目中用到的资源    /images    /style      /components      /lib      /mixin      - pageA.scss      - pageB.scss  /includes # 项目中各种能复用的模版/js    / components # 纯组件      /FooterSiteNav        - index.pug      /HeaderHomeNav        - index.pug      ...    /mixins # JS组件      /Tab        - index.js        - index.pug      ...    -layout.pug # 基础布局模版  /pages # 页面相关内容    /index # 最终会被打包成 index.html      - index.js      - index.pug      - index.scss    /detail      - index.js      - index.pug      - index.scss  /plugins # 项目中使用到的 jQuery 插件    - jquery.inview.js  /template # 被懒渲染的各种模版文件    - AdBanner.js # 广告横幅    - Floor.js # 每个楼层区块    - HomeTab.js # 主页特定的 tab  /utils # 工具方法    /api      - common.js      - index,js    - LazyloadModule.js    - DataUtil.js    - Observer.js    - ScrollObserver.js    - Template.js  common.js  theme.scss# 各种配置文件.editorconfig.eslintignore.eslintrc.prettierrc.stylelintrc.jsonbabel.config.js

PS: 需要构件系统代码?我觉得照着 CRA 或者 VUE-CLI 源码中的 webpack 配置根据自己需求做下微调即可。

组件

因为用 jQuery 历史悠久,社区有许多沉淀。但是还是有很多特定业务的组件,也自己实现了一把:

  • JS实现的自定义 Checkbox。
  • 电商购物车加减按钮,功能丰富。支持 最大最小浮点数步长等。
  • 电商首页透明切换等banner,类 首页 banner 效果。
  • 电商 商品详情页,动态切换预览图。
  • 电商 懒加载 种类菜单列表,优化首屏渲染很有效果,支持服务端数据和本地数据。
  • 电商切换区域的级联选择器
  • * 电商客户端渲染,根据用户交互懒加载特定的 DOM 节点。jquery.inview + AUI template engine

PS: * 开头表示还未上传最终代码。而且在后续的需求中,根据业务调用及其他组使用的细节也更改了一些部分,无法做到实时更新。

结果

在调研和编码完成后,在前端上新的按需加载电商官网当然比原先加载所有DOM的官网使用性能和流畅度好得多。无论是跑分、性能、应用大小、Code Coverage 都是非常巨大的提升。具体数据和什么网站?因为现在还在内测中。而且我在写完主要三个界面后被原组长调回,有机会在后续贴图。

思考

对于后端工程师而言,用 HTML template 的方式写着 Vue 的确慢且痛苦。而且各种特效各种库梭哈的做法,也的确无法保证 用户体验开发体验。而后续维护和代码质量,以及公司是否在意又另当别论了。

echo 'So, Do u have freestyle?'

REFERENCES

转载于:https://www.cnblogs.com/givingwu/p/10436735.html

你可能感兴趣的文章
/*携程面试*/四个数组,都已经排好序,找出四个数组的交集
查看>>
数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)...
查看>>
查找searching
查看>>
【Linux开发】linux设备驱动归纳总结(四):2.进程调度的相关概念
查看>>
矩阵快速幂 斐波那契数列
查看>>
java重写equals和hashCode方法
查看>>
索引的概述与创建
查看>>
矩阵相乘
查看>>
分页查询的SQL语句
查看>>
Sublime Text 3 注册码
查看>>
jsp内置对象浅谈
查看>>
CentOS搭建SVN服务器
查看>>
WMS与MES集成
查看>>
设置SQLServer数据库内存
查看>>
Java随机3-斐波拉切函数
查看>>
Linux下undefined reference to ‘pthread_create’问题解决 zz
查看>>
P1638 逛画展(直尺法)
查看>>
常用正则表达式
查看>>
github.com/oschwald/maxminddb-golang 安装报错
查看>>
算法复杂度的快慢
查看>>