如何通过性能优化,将包的体积压缩了 62.7%(附代码)
数据派THU
共 5611字,需浏览 12分钟
· 2022-12-17
来源:大前端技术之路 本文约3300字,建议阅读9分钟 本文手把手教你如何压缩包体积。
作者:小北与乔 https://juejin.cn/post/7136453274948861983
- 打包阶段
- 第一步:安装speed-measure-webpack-plugin
- 第二步:安装cache-loader
- 第三步:安装happypack
- 第四步:安装webpack-parallel-uglify-plugin
- 打包总结
- 上线优化阶段
- 第一步:基础优化
- 第二步:路由懒加载和按需引入
- 第三步:优化代码和合并相同的包
- 第四步:在服务器上的优化
- 上线优化总结
- 最后优化总结
打包阶段
第一步:安装speed-measure-webpack-plugin
安装包版本:"speed-measure-webpack-plugin": "^1.5.0"
该安装包的作用:在打包的过程中,能够精确的帮你分析出每一个步骤耗费的时间,然后我们可以针对时间比较长的部分专门做优化。
const SpeedMeasurePlugin = require("speed-measure-webpack-plugin");
const smp = new SpeedMeasurePlugin();
const webpackConfig = smp.wrap(merge(baseWebpackConfig, {
...
})
)
第二步:安装cache-loader
安装包版本:"cache-loader": "^4.1.0"
对sass-loader、postcss-loader、vue-loader做打包缓存,缩短打包的时间。
const cacheLoader = {
loader: 'cache-loader'
}
rules: [
{
test: /\.vue$/,
use: [
cacheLoader,
{
loader: 'vue-loader',
options: vueLoaderConfig
}
]
},
......
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
use: [
cacheLoader,
{
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
}
]
}
const loaders = options.usePostCSS ? [cacheLoader, cssLoader, postcssLoader] : [cacheLoader, cssLoader]
第三步:安装happypack(当前项目太小,没有起到效果,当时后端管理项目有优化效果)
安装包版本:"happypack": "^5.0.1"
可以在打包的时候开启多线程打包。使用链接如下:www.npmjs.com/package/happypack
第四步:安装webpack-parallel-uglify-plugin
安装包版本:"webpack-parallel-uglify-plugin": "1.1.0"
用上图中可以看到UglifyJsPlugin这个包的打包时间太长,我想到可以使用webpack-parallel-uglify-plugin这个包,开启多核同步压缩增加压缩的效率。
const ParallelUglifyPlugin = require('webpack-parallel-uglify-plugin');
new ParallelUglifyPlugin({
uglifyJS: {
output: {
beautify: false, // 是否保留空格和制表符,设置为不保留
comments: false, // 是否保留代码中的注释,设置为不保留
},
compress: {
drop_console: true, // 是否删除代码中的console语句,设置为删除
collapse_vars: false, // 是否内嵌虽然已经定义了,但是只用到一次的变量,设置为不使用
reduce_vars: false, // 是否提取出现了多次但是没有定义成变量去引用的静态值,设置为不转换
},
warnings: false // 是否在删除没有用到的代码时输出警告信息,设置为不警告
},
}),
打包总结
上线优化阶段
安装webpack-bundle-analyzer
打开分析有2种方式: 方式1:在plugins中做默认配置new BundleAnalyzerPlugin(),然后执行npm run dev的时候,会自动弹出一个页面,然后再页面中查看每个包的大小 方式2:在plugins中做进行配置,会生成一个stats.json文件,执行webpack --profile --json > stats.json命令生成分析文件,执行webpack-bundle-analyzer --port 8888 ./dist/stats.json展示各个包的体积页面。
// webpack.config.js
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
plugins: [
new BundleAnalyzerPlugin({
analyzerMode: 'disabled', // 不启动展示打包报告的http服务器
generateStatsFile: true, // 是否生成stats.json文件
})
]
// package.json
"generateAnalyzFile": "webpack --config build/webpack.dev.conf.js --profile --json > stats.json", // 生成分析文件
"analyz": "webpack-bundle-analyzer --port 8888 ./stats.json" // 启动展示打包报告的http服务器
第一步:基础优化
尽量减少HTTP请求数 减少DNS查找 避免重定向 让Ajax可缓存
第二步:路由懒加载和按需引入
1、路由懒加载
{
path: '/',
name: 'TopicList',
component: import('@/components/TopicList')
}
2、组件的按需引入
import {
Header,
Button
} from 'mint-ui'
Vue.use(Header)
Vue.use(Button)
第三步:优化代码和合并相同的包
1. 对这些包进行分析并优化
//解决moment打包的时候把所有的语言都打包进去的问题
new webpack.ContextReplacementPlugin(/moment[\\\/]locale$/, /^\.\/(zh-cn)$/)
// 这部分引入了,但是没使用,要删除
import moment from 'moment'
2.然后是对moment.js包配置,让其只打包一次。
// main.js
import moment from 'moment'
Vue.prototype.$moment = moment
// TopicList.vue
const date1 = this.$moment(date).fromNow(true)
第四步:在服务器上的优化
1. 图片和其他文件进行无损压缩,并上传到cdn上
2. nginx配置开通gzip,从线上拉取的代码能压缩2/3
上线优化总结
最后优化总结
在打包阶段,打包时间整个打包过程从9.95秒,减少到6.52秒,打包优化效率提高了35% 。 在上线前的优化阶段,从最初的体积是3.14MB,减少到1.17MB,优化效率在62.7% ,挺不错的结果。
评论
真高!比亚迪员工爆料比亚迪在越南的薪资水平:基本工资480万,全勤奖35万,交通补助20万,餐补110万,每周6天,每天10小时
上一篇:某大公司为逼迫员工离职,竟然把他的工位安排到厕所旁,没想到他直接开始记录领导的如厕时间,还发到公司大群...对此,你怎么看?--完--PS:欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,欢迎转发分享给更多人。全文完,感谢你的耐心阅读。如果你还想看到我的文章,请一定给本
开发者全社区
0
某大公司为逼迫员工离职,竟然把他的工位安排到厕所旁,没想到他直接开始记录领导的如厕时间,还发到公司大群...
上一篇:字节的跳动职级与薪资(2024年)我们与公司间的合作,宛如两艘船只在茫茫大海上相互依靠,共同抵御风浪,携手驶向成功的彼岸。然而,当航向开始产生分歧,或是波涛汹涌的风浪改变了我们的初衷,我们或许应当冷静地选择和平分手,而非在风雨中硬撑。最近,一位网友的遭遇引起了广大职场人的关注和热议。这位网友
开发者全社区
0
金融研究 | 使用Python测量关键审计事项的「信息含量」
Tips: 公众号推送后内容只能更改一次,且只能改20字符。如果内容出问题,或者想更新内容, 只能重复推送。为了更好的阅读体验,建议阅读本文博客版, 链接地址https://textdata.cn/blog/2023-01-13-information-content-of-critical-aud
大邓和他的Python
0
我看阿里的年终奖总算发了!
到4月底了,这两天看朋友圈,发现阿里的年终奖终于发了,问了问老同学,也从网上检索了不少信息,基本搞清楚了阿里今年的年终奖情况。近来来阿里一些集团对绩效等级做了较大的调整,以前的旧绩效系统中,绩效分为3.25、3.5、3.75、4和5五个等级,其中4和5是较高绩效等级,较少见。而且之前3.5绩效内部划
公子龙
0
CVPR 2024|大视觉模型的开山之作!无需任何语言数据即可打造大视觉模型
↑ 点击蓝字 关注极市平台作者丨科技猛兽编辑丨极市平台极市导读 本文提出一种序列建模 (sequential modeling) 的方法,不使用任何语言数据,训练大视觉模型。>>加入极市CV技术交流群,走在计算机视觉的最前沿本文目录1 序列建模打造大视觉模型(来自 U
极市平台
1
金融研究(更新) | 使用Python构建关键审计事项的「信息含量」
Tips: 公众号推送后内容只能更改一次,且只能改20字符。如果内容出问题,或者想更新内容, 只能重复推送。为了更好的阅读体验,建议阅读本文博客版, 链接地址https://textdata.cn/blog/2023-01-13-information-content-of-critical-aud
大邓和他的Python
0
字节的跳动职级与薪资(2024年)
上一篇:阿里公布年终奖,P7, 3.5+,22W年终奖,还有35W长期现金激励,真香字节跳动自2012年3月成立以来,已经迅速成长为一个全球性的科技公司。其产品和服务已经遍布全球150多个国家与地区,并且支持超过75种不同的语言。在字节跳动的官方网站上,列出了一系列引人注目的产品和服务,包括但不限于
开发者全社区
0
偷偷告诉你如何一台电脑开多个微信!
大家好,我是轩辕。前几天在粉丝群里,有人问我是怎么在一台电脑上同时登录两个微信的?正好之前写过一篇文章,分析过原理,分享给没看过的小伙伴学习一下。手机端多开微信估计很多人都知道,像华为、小米等手机系统都对此做了支持,不过在运行Windows系统的电脑上怎么启动两个微信呢?其实很简单,你只需要写一个批
编程技术宇宙
0