webpack根据性能分析图优化打包

一、 webpack生成性能分析图

1. vue2.x中检查webpack.prod.conf.js中是否有以下代码,如果有以下代码,则直接走第四步,如果没有以下代码,则继续往下阅读。如果你是vue3.x,也同样往下阅读。
if (config.build.bundleAnalyzerReport) {
  const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
  webpackConfig.plugins.push(new BundleAnalyzerPlugin())
}
2.执行npm install webpack-bundle-analyzer --save安装webpack-bundle-analyzer模块,并在webpack.prod.conf.js文件中加以下代码
if (config.build.bundleAnalyzerReport) {
    const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
    webpackConfig.plugins.push(new BundleAnalyzerPlugin())
}
3. 在config文件夹下打开index.js文件,加上以下代码
build: {
        //  ... 省略已经存在的代码,加上下面的配置项
        bundleAnalyzerReport: !!process.env.npm_config_report
}
4. 在package.json的scripts这个key中加上以下命令
"scripts": {
        "analyz": "npm_config_report=true npm run build"
},

以上注意点
(1)以上代码配置好了之后,在终端输入npm run analyz命令,浏览就会自动打开127.0.0.0:8888页面,出现打包的性能分析图
(2)如果,执行了npm run analyz命令,浏览器并没有出现打包的性能分析图,那么就要看在执行命令npm run analyz的时候有没有走进if (config.build.bundleAnalyzerReport) {}这个条件中,如果没有走进去的话,那浏览器端是不可能出现性能图的。可以试着将webpack.prod.conf.js文件中的if条件判断写死,if (true) {},那么打包的时候就肯定会走进这个条件判断中,那么性能图就会出现在浏览器中
(3)流程梳理:看下面的指向图

流程梳理图

二、分析性能图

1. 项目生成的性能分析图如下(感觉好杂乱,慢慢梳理)
性能分析图

这些红色橙色,说明打包后的js文件比较大,重点分析这些红色,橙色的js文件。这些红色橙色的文件中,都有一个叫moment的模块,占据了超过二分之一的体积。还有一些重复加载的模块...

2. 打包后的js文件大小,重点看一下上百kb大小的文件
上百kb的文件

一个页面三位数大小的文件,对于一个页面来说可能是大了点(捂脸哭),看看这些性能分析图吧。有些模块加载了两三次甚至更多次、有些模块本身就很大、有些页面引入组件太过累赘。我们主要做的目的是减小这些打包后的js文件大小。

三、根据分析性能图,做出优化

1. 检查有重复引入组件的嫌疑
重复引入的组件例

此模块在全局中就引入这个组件,但是在每个单独的页面,依然还是引入这个微信的sdk文件,这个就可以优化了。不仅仅是这一个组件重复引入了。依次检查是否有重复引入的文件,依次排查,干掉它们。

2. 将引用超过两次的模块,单独剥离开

就着重看一下这个最大的4.xxx.js,438kb这个文件吧。分析这个文件来看看如何优化打包后的js文件
(1)4.xxx.js文件性能分析图

4.xxx.js文件性能分析图

分析图分为两个部分,左边是模块打包,右边是文件代码的打包。一眼看过去,就是左边的模块是不是占据太大了。而且我整体看了一下,这些打包比较大的文件都是模块node_modules占据很大的空间,需要优化了。
看到网上都说可以配置:超过两次引用的文件可以收集起来,只打包一次,那我们就来试试看吧。
(2)在webpack.prod.conf.js文件中plugins中加入下面的代码,然后重新执行npm run analyz命令

new webpack.optimize.CommonsChunkPlugin({
    async: 'used-twice',
    minChunks: (module, count) => (
      count >= 2
    )
})
重新打包的分析图

打包的文件确实小了很多,但是0.xxx.js文件1.38M冒出来了,而且这个1.38M的文件每个页面都会加载这个js,我看了一下这个1.38M的打包的文件都是用了两次以上的包的集合。额...但是每个页面都要加载这个js的文件,不能接受。可不可以使用缓存机制,但是我们线上设置了前端不缓存这个bug。
(3)继续分析,看了一下之前的性能分析图,那些红色橙色的文件都包含了moment这个模块,去项目中看看这个moment模块,不看不知道,一看吓一跳,这个模块居然是用来格式化时间的,一万个为什么,为什么要引入时间格式化的模块,时间格式化的js,网上一说一大把,不知道之前的开发人员是怎么想的。
如何优化,那就是让相关引用moment模块的开发人员,自己抽出一个公用方法,将这个moment模块给去掉,不能使用这个模块。坚决不可以使用这个模块。干掉moment模块。


moment模块带来的灾难
3. 路由懒加载

按需加载路由组件,按照以下的代码进行修改
路由文件旧文件

import ShowBlogs from '@/components/ShowBlogs'
routes:[ path: 'Blogs', name: 'ShowBlogs', component: ShowBlogs ]

改成下面的形式,按需加载

routes:[ path: 'Blogs',name: 'ShowBlogs',component: () => import('./components/ShowBlogs.vue')

小提示:我按照这种形式,打包后的文件,确实减了很多体积,但是main.js文件为什么还变大了,有待我分析其中的疑点。

以上是我对性能分析图的分析,有啥不对的地方,欢迎指正

参照文章
Webpack 大法之 Code Splitting
前端开发

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,783评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,396评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,834评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,036评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,035评论 5 362
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,242评论 1 278
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,727评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,376评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,508评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,415评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,463评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,140评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,734评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,809评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,028评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,521评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,119评论 2 341

推荐阅读更多精彩内容

  • 写在开头 先说说为什么要写这篇文章, 最初的原因是组里的小朋友们看了webpack文档后, 表情都是这样的: (摘...
    Lefter阅读 5,266评论 4 31
  • 目录第1章 webpack简介 11.1 webpack是什么? 11.2 官网地址 21.3 为什么使用 web...
    lemonzoey阅读 1,731评论 0 1
  • 原文首发于:Webpack 3,从入门到放弃 Update (2017.8.27) : 关于 output.pub...
    昵称都被用完了衰阅读 1,879评论 4 19
  • 还是忆起了江南,梦中的江南霏霏春雨,立春二月,江南草长,碧绿如茵。在如画的船中倾听细雨,撑着油纸伞在...
    南国小溪阅读 253评论 0 0
  • 文│奇点 [ 原创] 我是认知体系架构师——奇点,如果你目前是一个中层管理者或者想晋升为中层管理者,请关注或阅读我...
    奇点极简管理阅读 313评论 0 8