一、tree shaking (摇树优化)

tree shaking概念:

  • 1个模块可能有多个方法,只要其中某个方法使用了,整个文件会被打到bundle中
  • tree shaking 只将用到的方法打到bundle中,没用的在uglify阶段被擦除
  • webpack默认支持,在.babelrc文件中设置 modules: false即可
  • production mode 下默认开启 tree shaking
  • 必须是ES6语法

tree shaking原理:依赖于ES6 moudel特性

  1. 只能作为模块顶层的语句出现
  2. import的模块名只能是字符串常量
  3. import binding 是immutablede
tree shaking副作用
  • 虽然生产模式下默认开启,但是由于经过 babel 编译全部模块被封装成 IIFE(立即执行函数)
  • IIFE 存在副作用无法被 tree-shaking 掉
  • 需要配置 { module: false }和 sideEffects: false
  • rollup 和 webpack 的 shaking 程度不同,以一个 Class 为例子

1、擦除无用的js

  • 没有设置前,只引入不调用,mode: 'none’时

  • 只调用a,打包只打包对应的方法,mode: ‘production’

2、擦除无用的css

  • npm i purgecss-webpack-plugin -D
  • 需要和 MiniCssExtractPlugin配合使用,将css提取为单独的文件

webpack.prod.js文件

  const PATH = {src: path.join(__dirname, './src')}new PurgecssPlugin({paths: glob.sync(`${PATH.src}/**/*`, {nodir: true})}),

二、scope Hoisting (作用域提升)

production mode默认开启 scope Hoisting
new webpack.optimize.ModuleConcatenationPlugin()插件

  • 构建后的代码存在大量闭包代码
  • 导致打包bundle体积变大,内存开销变大

原理:

  1. 将所有的模块的代码按照引用顺序放在一个函数作用域里,然后适当的重命名一些变量以防止变量名冲突
  2. 可以减少函数声明代码和内存开销

webpack构建中tree shaking、scope Hoisting(面试题)相关推荐

  1. vue3中tree shaking特性

    Treeshaking是一种通过清除多余代码方式来优化项目打包体积的技术 专业术语叫 Dead code elimination 简单来讲,就是在保持代码运行结果不变的前提下,去除无用的代码 如何做到 ...

  2. webpack之Scope Hoisting

    我们先来简单分析一下:(没有开启Scope Hoisting ) 现象:构建后的代码存在大量的闭包代码 [(function (module, __webpack_exports__, __webpa ...

  3. Tree Shaking

    文章目录 前言 一.Tree shaking 是什么? 二.webpack中 Tree shaking 的相关使用 1.添加一个通用模块 2.将文件标记为无副作用(side-effect-free) ...

  4. demo10 关于JS Tree Shaking

    1.什么是 tree shaking 借助于 es6 (es2015) 模块系统 (import 和 export) 的静态解析,webpack 能够利用 Tree Shaking 进行按需加载,移除 ...

  5. Webpack之Tree Shaking与Scope Hoisting

    Webpack之Tree Shaking与Scope Hoisting 一.Tree Shaking 二.webpack中使用Tree-shanking 三.Scope Hoisting 一.Tree ...

  6. webpack中的tree shaking(树摇)-----移除未使用的代码

    本篇大致概括一下tree shaking的作用以及与webpack相结合使用 什么是tree shaking 引用webpack官网的原文来说: tree shaking 是一个术语,通常用于描述移除 ...

  7. 46 webpack优化- Scope Hoisting

    Scope Hoisting Webpack构建出来的文件源码,比如演练是实战中的build.js里面的内容里面包含了大量的函数声明语句,其原因是项目中引用了许多模块,每一个模块都有自己的作用域,导致 ...

  8. webpack学习(四) -- css tree shaking

    css tree shaking 我们和webpack(三)一样,用案例说话 安装css需要的两个loader,css-loader 和style-loader npm install css-loa ...

  9. webpack 的 scope hoisting 是什么?

    原文链接:https://ssshooter.com/2019-02... scope hoisting 是 webpack3 的新功能,直译过来就是「作用域提升」.熟悉 JavaScript 都应该 ...

最新文章

  1. Linux服务器生产环境中的文件删除与替换
  2. Unity Shader基本例子
  3. pycharm 如何搜索?Ctrl+N 搜索py文件 Ctrl+shift+N 搜索所有类型的文件 ctrl+shift+f 全局字符串搜索 ctrl+shift+a 配置项搜索 双shift全局
  4. 程序基础:数据结构(郝斌讲解)(一)
  5. zookeeper做分布式锁
  6. rimraf --A deep deletion module for node (like `rm -rf`)
  7. matlab怎么整合成一个模块,Matlab如何将m文件制定成模块
  8. Android 2.3 r1 中文 API (57) —— ScaleGestureDetector
  9. MANet:盲图像超分辨率中空间变异核估计的互仿射网络(ICCV 2021)
  10. 十分钟释疑Oracle中“小表超慢”之谜(SQL调优/SQL优化)
  11. Qt4_使用项视图的简便类
  12. go结构体初始化_go语言基础之结构体普通变量初始化
  13. android5.1 PowerManagerService和DisplayPowerControler、DisplayPowerState关系
  14. 高等数学张宇18讲 第五讲 中值定理
  15. pyqt5优秀项目python_【项目】PYQT5--Python/C++实现网络聊天室
  16. 敏捷项目管理术语大全
  17. cURL 详解(附实例)
  18. 这篇文章终于把中美德三国的工业互联网讲清楚了
  19. go gorm获取数据库报错:goexit: BYTE $0x90 // NOP
  20. MIPI入门——What the hell is mipi?

热门文章

  1. ubuntu pstack报错:Input/output error
  2. cad lisp 两侧偏移并删除_cad lisp 两侧偏移并删除_CAD中级进阶必备,这10个技巧让你轻松再升一级...
  3. 最新数字藏品系统源码一套+价值9000缘
  4. iOS15.6和iOS15.5哪个更省电 iOS15.6建不建议升级
  5. 从零开始学USB(二十一、USB接口HID类设备(三)_报表描述符Global类)
  6. Tetrate万凯:SkyWalking MAL的监控虚拟机和Kubernetes实践
  7. 想做游戏场景建模师,如何拿到高薪资?
  8. FTP服务器架设--架设篇
  9. CMAKE_INSTALL_PREFIX
  10. 大数据处理的关键技术是什么?