记录一次打包优化
栏目: JavaScript · 发布时间: 6年前
内容简介:webpack本地开发时,经常会出现开发着然后打包速度很慢的情况。酒店现在有大约59个页面,这些页面都进行了惰性加载,但是现在每个chunk打包出来的包很大 下面进行优化:可以看见每个chunk都很大 有些快达到了1M。使用
webpack本地开发时,经常会出现开发着然后打包速度很慢的情况。酒店现在有大约59个页面,这些页面都进行了惰性加载,但是现在每个chunk打包出来的包很大 下面进行优化:
优化前先分析打包后的文件
可以看见每个chunk都很大 有些快达到了1M。
使用 webpack-bundle-analyzer
分析输出文件,如下图:
可以看出lodash被打包了很多次,导致加载lodash的 chunk
很大。
下面编辑其中某一个chunk,并且保存,如下图
重新打包时间达到了2.592s,其中起始文件 index.0a8ac.js
达到了 841kb
,下面先优化各个 lodash
被加载很多次的问题。
lodash等公共包优化
加入webpack 异步公共打包配置
new webpack.optimize.CommonsChunkPlugin({ name: 'index', // the name or list of names must match the name or names // of the entry points that create the async chunks children: true, // (use all children of the chunk) async: true, // (create an async commons chunk) minChunks: 3, // 必须至少3个chunk里面包含该文件才进行公共打包 (3 children must share the module before it's separated) }), 复制代码
下面再来看:
打包后的文件目录大小
可以看见减少了很多,此时编辑重新打包发现大概只有1094ms,已经少了很多,但是每次打包
出来的 index.hash.js
还是很大,体积并没有减少。先看看结构
可以看见moments占用了很大体积,但是明明moment已经被抽离为了公共包进行打包,如下:
window.__REACT_LIB={ React:React, ReactDOM:ReactDOM, ReactRouter:ReactRouter, antd:antd, moment:moment, backbone }; 复制代码
为什么还会打包?该index文件是由入口文件包含路由 reducers等以router进行分块之前的代码,故现在从app.js去查找,发现如下代码:
import moment from 'moment'; import 'moment/locale/zh-cn'; moment.locale('zh-cn'); 虽然webpack打包配置里面有下面的 externals:{ 'react':'window.__REACT_LIB.React', 'react-dom':'window.__REACT_LIB.ReactDOM', 'react-router':'window.__REACT_LIB.ReactRouter', 'antd':'window.__REACT_LIB.antd', 'backbone':'window.__REACT_LIB.backbone', 'moment':'window.__REACT_LIB.moment', }, 复制代码
但是因为 import 'moment/locale/zh-cn';
这行,moment又被重新打包了,现在去掉这行后。 现在看打包进度。
index文件直接从814降到了276kb。优化完成 看打包文件:
编辑单个chunk后的重载
现在chunk里面还包含有jquery.js,这是因为minChunk:3设为3的缘故,业务里面因为使用到了一个jqeury.fancyTree.js,该模块会去加载jquery.js
所以会这样.现在去优化,加入,这样载入时便会之前去查找window.$变量。
'jquery':'window.$',
, 现在,整个优化完成。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Flutter 混合开发实战问题记录(三)打包并上传flutter aar 到maven
- 【前端打包部署】谈一谈我在SPA项目打包=>部署的处理
- Maven多模块项目打包前的一些注意事项(打包失败)
- tar打包如何不打包某一个文件夹(排除某些文件夹)
- iOS新手用swift写一个macos打包工具 一键打包到指定位置
- Android应用签名打包
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
HTTP/2基础教程
Stephen Ludin、Javier Garza / 罗正龙、郑维智 / 人民邮电出版社 / 2018-1 / 49.00元
让网站和应用更快速、更简洁、更稳健,从而有效提升用户体验,这无疑是众多开发者梦寐以求的。然而互联网发展日新月异,HTTP/1.1协议已经难以满足现今的需求。在众多Web性能提升方案中,HTTP/2值得尝试。 本书是HTTP/2实用指南,介绍了HTTP/2的设计初衷和新特性,以及如何才能充分利用这些特性来打造高性能网站及应用。作者用定量分析方法,对比了不同网络环境下及不同浏览器上HTTP/1.......一起来看看 《HTTP/2基础教程》 这本书的介绍吧!