专栏名称: 前端JavaScript
分享 | 学习 | 交流 | 原创 分享是学习的开始;学习不必要从头开始,是从现在开始;交流能沟通你我,提高你的学识;期待你的加入!!! web前端技术交流,JavaScript,HTML5,CSS3……
目录
相关文章推荐
51好读  ›  专栏  ›  前端JavaScript

[S3-E369]React + webpack 之性能优化

前端JavaScript  · 公众号  · Javascript  · 2017-06-22 08:18

正文

请到「今天看啥」查看全文



new webpack.optimize.CommonsChunkPlugin({

names: ['vendor'],

filename: '[name].js',

minChunks: Infinity

})

3.Defineplugin

这个插件用来定义全局变量,在webpack打包的时候会对这些变量做替换。这里替换成了production,react代码中有很多的NODE_ENV变量判断


new webpack.DefinePlugin({ //

'process.env': {

NODE_ENV: JSON.stringify('production')

}

})

2. 从代码层面入手


1.首先你应该要知道code splitting这个东西,这个是代码层面优化的根基。


code splitting,就是代码分割,简而言之就是代码分割成一个个小块,每次页面加载时,我只需要加载那些我需要的部分(加载包的体积变小了),这样可以让页面加载的更快。


那么如何实现呢?


  • route层面入手

    route2-3中有一个叫做getComponent的方法,可以配置按需加载route,即原来A,B,C三个界面生成一个bundle.js的包,使用了按需加载之后,会变为一个bundle.js包加上3个chunk包,这个时候bundle.js包加上三个chunk包的总大小会比原来的bundle.js包稍微大一点,但是我想进入A界面,我只需要加载bundle.js包和A的chunk包,那么我的A页面加载速度便会变得快许多。

    可以参考另一篇文章React-router 4 按需加载的实现方式及原理(Code Splitting)

  • 实际代码入手1.先学会分析代码,分析代码结构,分析你的包中到底是什么东西如此之大。

    借助工具:

    npm install webpack-visualizer-plugin webpack-stats-plugin --save-dev

    配置:

import:

const StatsWriterPlugin = require('webpack-stats-plugin').StatsWriterPlugin;

const Visualizer = require('webpack-visualizer-plugin');

plugin:

new StatsWriterPlugin({

fields: null,

stats: { chunkModules: true }

}),

new Visualizer({

filename: './statistics.html'

})

正常的webpack run 之后,会在你的output的地方出现statistics.html这个文件,直接用网页打开就可以了



这样就可以分析出你到底是什么导致你bundle.js报如此之大了,但有一些包我们是无法缩减的,例如react-dom,react,但是绝大部分的包都是可以进行缩减的.


那么如何缩减呢?


加入你这个界面中用到了一个三方的图形控件,例如你用了Echart,那么这个包总是很大的,即使是最小的也有300k左右,其实你其他的代码可能都不到100k,那么这300k将会非常影响你这个界面的加载速度,所以需要给这个控件做一个按需加载,这样可以先展示其余的这100k所展示的界面,等待其余的300k下载好了再把Echart给补上。







请到「今天看啥」查看全文