zoukankan      html  css  js  c++  java
  • Webpack性能优化

    Babel-loader :转换ES6、ES7JS新特性语法

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

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

    Less-loader :less文件转换成css

    Ts-loader:TS转换成JS

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

    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。 

  • 相关阅读:
    在ant编译java文件时产生debug信息
    Ant里面神奇的fork
    在ant中将依赖jar包一并打包的方法
    Java通过class文件得到所在jar包
    Bat脚本:通过端口号查找进程号
    使用emma时遇到的一些问题
    python之路-day18-反射
    python之路-day17-类与类之间的关系
    python之路-day16-类的成员
    python之路-day15-初识面向对象
  • 原文地址:https://www.cnblogs.com/QianDingwei/p/11358902.html
Copyright © 2011-2022 走看看