文章插图
图片
结果:热更新时间降低到4秒左右,降低50% 。
构建包大小优化CDN资源替代项目依赖包利用Webpack模块可视化工具,项目中的依赖是这样的:
文章插图
图片
文章插图
图片
从上图可以看到:在开发环境整个构建包体积达到了19.44MB,echarts、antv、moment这些包,体积都比较大,达到了MB量级 , 并且在项目中前两者使用频率很低,只有引用过一次,对于这种情况,考虑将依赖包转换为CDN引入的方式,原因如下:
- 减少打包产物大?。?/li>
- 减少白屏时间;
- 版本固定 , 使用频率低,通过CDN单独引入还会有浏览器强缓存的效益;
{ // ..."externals": {"echarts": "echarts","moment": "moment"},}
externals这里的key、value值分别对应npm中的包名和CDN引入后在window下的全局变量名,找包的CDN路径很简单,但是如何知道全局变量名是什么呢?可以打开CDN链接,格式化代码 , 大概是这个样子的:
function(e, t) {"object" == typeof exports && "object" == typeof module ? //判断环境是否支持commonjs模块规范module.exports = t(require("vue")) :"function" == typeof define && define.amd ? //判断环境是否支持AMD模块规范define("ELEMENT", ["vue"], t) :"object" == typeof exports ? //判断环境是否支持CMD模块规范exports.ELEMENT = t(require("vue")) :e.ELEMENT = t(e.Vue)} ("undefined" != typeof self ? self: this,function(e){//省略...});
从这个JS文件可以看到,这个全局变量是ELEMENT咯~这块更详细的教程可以看一下这篇文章 , 这位博主总结的很全:Webpack系列』—— externals用法详解
代码分割这里利用Webpack现有的能力 , 对使用频繁的第三方库和模块进行统一抽离 , 这一部分可以写在上面提到的Ice中间件里去:
module.exports = ({ onGetWebpackConfig }) => {onGetWebpackConfig((config) => {config.optimization.splitChunks({cacheGroups: {vendor: {priority: 1,test: /node_modules/,chunks: 'initial',minChunks: 1,minSize: 0,name: 'vendor',filename: 'vendor.js',},common: {chunks: 'initial',name: 'common',minSize: 100,minChunks: 3,filename: 'common.js',},},});});};
抽离出来的模块如图:文章插图
图片
结果:优化后的构建包体积为9.1MB,降低了50%以上大小 。
【前端性能优化应该怎么做?】
推荐阅读
- 强化学习算法在资源调度与优化中的应用
- JVM 理解Java虚拟机:优化代码执行效率的内部机制
- 如何解决Linux 服务器性能问题?
- MongoDB索引优化指南:提升查询性能的关键
- 为什么云数据库性能总是很差?
- 云原生数据库 GaiaDB 架构设计解析:高性能、多级高可用
- 分析SEO优化网站有哪些特点
- 从网站优化和关键词选择看网站排名的四大秘密
- 数据库优化:提升网站SEO数据分析能力的关键
- 优化网站获取更多流量的5个方法