Webpack性能优化

Babel-loader :转换ES六、ES7JS新特性语法css

Css-loader:支持.css文件的加载和解析转换成commonjs对象html

Style-loader:将样式经过<style>标签插入到head前端

Less-loader :less文件转换成cssreact

Ts-loader:TS转换成JSwebpack

File-loader:进行图片文字等的打包富媒体文件字体web

url-loader:处理图片和字体数组

Raw-loader:将文件以字符串的形式导入浏览器

Thread-loader:多进程打包JSCSS性能优化

CleanWebpackPlugin:清理构建目录服务器

ExtractTextWebpackPlugin:CSSbundle文件里提取成独立的CSS文件

HtmlWebpackPlugin:建立html文件去承载输出的bundle

UglifyWebpackPlugin:压缩JS

PostCSS + autoprefixer: ⾃动补⻬ CSS3 前缀

px2rem-loader:移动端 CSS px ⾃动转换成 rem。 ⻚⾯渲染时计算根元素的 font-size 可使⽤⼿淘的lib-flexible库换成 rem

热更新

HotModuleReplacementPlugin

原理:分为第一次打包和第二次打包,第一次打包将js代码打包成bundle.js传给Bundle Server而后让客户端能够以loacalhost8080这种服务器访问的方式访问。第二次,当我修改了代码以后,webpack会打补丁同样,将修改的部分打包,而后给到HMR server,这个服务器就会以字符串的形式,告诉HMR runtime,哪些地方被修改了,哪些地方须要更新。

文件指纹:用来作版本的管理,好比某个文件修改了,并不须要把全部的文件都

发布,只要发布修改了的那部分就好了。

文件指纹

Hash:和整个项⽬的构建相关,只要项⽬⽂件有修改,整个项⽬构建的 hash 值就会更改

Chunkhash:和 webpack 打包的 chunk 有关,不一样的 entry 会⽣成不一样的 chunkhash 值

Contenthash:根据⽂件内容来定义 hash ,⽂件内容不变,则 contenthash 不变。

性能优化

l JS压缩内置了 uglifyjs-webpack-pluginwebpack4若是mode设置成production那么将会自动的进行压缩。

l CSS⽂件的压缩使⽤ optimize-css-assets-webpack-plugin。同时使⽤ cssnano。

l HTML⽂件的压缩:html-webpack-plugin。

基础库分离:html-webpackexternals-plugin。思路:将 reactreact-dom 基础包经过 cdn ⼊,不打⼊ bundle

公共脚本分离:SplitChunksPlugin,分离⻚⾯公共⽂件。

l tree shaking(摇树优化):个模块可能有多个⽅法,只要其中的某个⽅法使⽤到了,则整个⽂件都会被打到bundle ⾥⾯去, tree shaking 就是只把⽤到的⽅法打⼊ bundle , 没⽤到的⽅法会在uglify 阶段被擦除掉。

l scope hoisting

现象构建后的bundle.js代码存在量闭包代码. ⾏代码时建立的函数做⽤域变多,内存开销变⼤,⼤量做⽤域包裹代码,致使体积增⼤(模块越多越明显)

结论:webpack 转换后的模块会带上层包裹。import 会被转换成 __webpack_require

分析

· 打包出来的是个匿名闭包

· modules 个数组,每项是个模块初始化函数

· 经过 WEBPACK_REQUIRE_METHOD(0) 启动程序

原理 将全部模块的代码按照引⽤顺序放在⼀个函数做⽤域⾥,而后适当的重命名一些变量以防⽌变量名冲突。

经过 scope hoisting 能够减小函数声明代码和内存开销

代码分割

对于⼤的 Web ⽤来说,将全部的代码都放在⼀个⽂件中显然是不够有效的,特别是当你的某些代码块是在某些特殊的时候才会被使⽤到。 webpack ⼀个功能就是将你的代码库分割成chunks(语块),当代码运⾏到须要它们的时候再进⾏加载。

懒加载:plugin-syntax-dynamic-import

服务端渲染:HTML + CSS + JS + Data -> 渲染后的 HTML

全部模板等资源都存储在服务端机器拉取数据更快,⼀ HTML 返回全部数据

客户端渲染:多个请求(HTML,数据),HTML和数据串行加载、前端渲染。

服务端渲染 一个请求,返回HTML和数据。核心是减小请求。

服务端渲染优点减小屏时间对于 SEO 友好。客户端渲染刚开始拉下来的HTML实际上是一个空的模板,而服务端渲染拉下来的时候页面就有数据比较丰富,有利于爬虫抓取数据。

思路使⽤ react-dom/server renderToString 法将React 组件渲染成字符串,再把这个string丢到HTML模板里面去,服务端路由返回对应的模板

作法使打包出来的浏览器端 html 为模板在模板中设置占位符,动态插组件,就能够解决样式不显示的问题。经过设置占位符,服务端获取数据而后替换占位符。

多页应用:⻚⾯跳转的时候,后台服务器都会给返回个新的 html ⽂档,这种类型的站也就是多⻚⽹站,也叫作多glob.sync。 

相关文章
相关标签/搜索