记录一次打包优化

栏目: JavaScript · 发布时间: 7年前

内容简介: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.$', , 现在,整个优化完成。

记录一次打包优化

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

复杂性思考

复杂性思考

Allen B. Downey / 张龙 / 机械工业出版社 / 2013-5 / 49.00元

本书的灵感来源于无聊与迷恋的感觉:对常规的数据结构与算法介绍的无聊,对复杂系统的迷恋。数据结构的问题在于教师在教授这门课程的时候通常不会调动起学生的积极性;复杂性科学的问题在于学校通常不会教授这门课程。 2005年,我在欧林学院讲授了一门新课程,学生要阅读关于复杂性的主题,使用Python进行实验,并学习算法与数据结构。当我在2008年再次讲授这门课程时,我写了本书的初稿。 在2011......一起来看看 《复杂性思考》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具