内容出自前端性能优化原理与实践,我作为笔记简单记录下。
01引言.一个老生常谈的面试问题
看不懂下面的,看上面的连接
优化如果从dns以及tcp连接下手,前端表示无能为力,(摊手脸),能做的有限,前端在网络层面优化的话最主要从http连接下手。
那么如何优化呢?有两个方向:
1:减少请求次数
2:减少单次请求所花费的时间
如何才能减少次数以及所花费时间?对资源进行压缩与合并。构建工具 webpack能帮我们完成
构建工具 webpack是如何帮我们完成资源的压缩与合并从而减少请求以及时间?
从构建的角度出发:
以babel-loader为例:
1.对loader进行 exclude
2:开启缓存将转译结果缓存至文件系统,至少可以将 babel-loader 的工作效率提升两倍。只需要为 loader 增加相应的参数设定:loader:'babel-loader?cacheDirectory=true'
第三方库很庞大,以 node_modules 为代表,必须依赖但又太过庞大
用Externals处理第三方库在一些情况下会引发重复打包的问题; CommonsChunkPlugin 每次构建时都会重新构建一次 vendor;
推荐DllPlugin,基于 Windows 动态链接库(dll)的思想被创作出来的。它第三方库单独打包到一个文件中。这个依赖库不会跟着你的业务代码一起被重新打包,只有当依赖自身发生版本变化时才会重新打包。
不是很明白DllPlugin看下面的引用
在用 Webpack 打包的时候,对于一些不经常更新的第三方库,比如 react,lodash,vue 我们希望能和自己的代码分离开,Webpack 社区有两种方案CommonsChunkPlugin和DLLPlugin
对于 CommonsChunkPlugin,webpack 每次打包实际还是需要去处理这些第三方库,只是打包完之后,能把第三方库和我们自己的代码分开。而 DLLPlugin 则是能把第三方代码完全分离开,即每次只打包项目自身的代码。Dll这个概念是借鉴了Windows系统的dll,一个dll包,就是一个纯纯的依赖库,它本身不能运行,是用来给你的app引用的。
DllPlugin和DllReferencePlugin提供分离包的方式可以大大提高构建时间性能。主要思想在于,将一些不做修改的依赖文件,提前打包,这样我们开发代码发布的时候就不需要再对这部分代码进行打包。从而节省了打包时间。
DllPlugin用法自行百度
Happypack——将 loader 由单进程转为多进程
webpack 是单线程的,Happypack 会充分释放 CPU 在多核并发方面的优势,帮我们把任务分解给多个子进程去并发执行,大大提升打包效率。
Gzip 压缩原理
Gzip就是对http内容进行重新编码, Gzip 是高效的,压缩后通常能帮我们减少响应 70% 左右的大小。 只需要在 request headers加上一句:accept-encoding:gzip