1.编码优化:
- 不要将所有的数据都放在data中,data中的数据都会增加getter和setter,会收集对应的watcher (vue 2.x 响应式原理Object.defineProperty)
- vue 在 v-for 时给每项元素绑定事件需要用事件代理 (多个子元素绑定事件的场景下,可以把事件帮给父元素(wrapper层),通过e.target事件冒泡抓住事件原来写逻辑)
- SPA页面采用keep-alive缓存组件 (SPA即单页面应用,通过js切换元素显示与隐藏,不会刷新页面重新加载数据)
- 拆分组件( 提高复用性、增加代码的可维护性,减少不必要的渲染 )
- v-if 当值为false时内部指令不会执行,具有阻断功能,很多情况下使用v-if替代v-show(反之经常切换显示隐藏的元素应当使用v-show)
- key保证唯一性 ( 默认vue会采用就地复用策略 )
- Object.freeze 冻结数据
- 合理使用路由懒加载、异步组件 (路由配置 component:()=>import('xxx.vue'))
- 尽量采用runtime运行时版本 (上线版本的vue.runtime.min.js,不包含编译器,不提示错误,体积小)
- 数据持久化的问题 (防抖、节流,(事件频繁触发的控制方案 相关链接) )
2.Vue
加载性能优化:
- 第三方模块按需导入 (babel-plugin-component)
- 滚动到可视区域动态加载 ( vue-virtual-scroll-list )
- 图片懒加载 (相关链接)
3.用户体验:
- app-skeleton 骨架屏
- app-shell app壳
- pwa
4.SEO优化:
- 预渲染插件 prerender-spa-plugin
- 服务端渲染 ssr
5.打包优化:
- 使用cdn的方式加载第三方模块
- 多线程打包 happypack
- splitChunks 抽离公共文件
- sourceMap生成 (利于debug上线版本)
6.缓存,压缩
- 客户端缓存、服务端缓存
- 服务端gzip压缩