webpack进阶篇(二十一):Tree Shaking的使用和原理分析

简介: webpack进阶篇(二十一):Tree Shaking的使用和原理分析

说明

玩转webpack课程学习笔记。


tree shaking(摇树优化)

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


使⽤:

  • webpack 默认⽀持,在 .babelrc ⾥设置 modules: false 即可
  • production mode的情况下默认开启

要求:必须是 ES6 的语法,CJS 的⽅式不⽀持



DCE (Dead code elimination)


  • 代码不会被执⾏,不可到达
  • 代码执⾏的结果不会被⽤到
  • 代码只会影响死变量(只写不读)
if (false) {
  console.log('这段代码永远不会执行');
}


Tree-shaking 原理


利⽤ ES6 模块的特点:


  • 只能作为模块顶层的语句出现
  • import 的模块名只能是字符串常量
  • import binding 是 immutable(不可改变的) 的

代码擦除: uglify 阶段删除⽆⽤代码



例子

1、在search文件夹里添加tree-shaking.js文件

export function kaimo666() {
  return 'this kaimo666';
}
export function kaimo777() {
  return 'this kaimo777';
}


2、在search文件夹里引用index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './search.less';
import logo from './images/logo.png';
console.log(logo);
import '../../common/index.js';
import { kaimo666 } from './tree-shaking.js';
class Search extends React.Component {
  render() {
    debugger;
    return <div className="search-text">
      凯小默的博客666
      <img src={ logo } />
    </div>
  }
}
ReactDOM.render(
  <Search/>,
  document.getElementById('root')
)


3、修改配置mode为none

module.exports = {
  mode: 'none',
}


4、none下的效果

20200701204151722.png



5、修改配置mode为production

module.exports = {
  mode: 'production',
}


6、production下的效果

image.png


7、配置mode为production情况下,引用并且使用kaimo666这个函数

import React from 'react';
import ReactDOM from 'react-dom';
import './search.less';
import logo from './images/logo.png';
console.log(logo);
import '../../common/index.js';
import { kaimo666 } from './tree-shaking.js';
class Search extends React.Component {
  render() {
    const kaimo = kaimo666();
    return <div className="search-text">
      { kaimo }
      凯小默的博客666
      <img src={ logo } />
    </div>
  }
}
ReactDOM.render(
  <Search/>,
  document.getElementById('root')
)


8、引用并且使用kaimo666效果,发现kaimo777没有引用进来

20200701204229679.png


9、也可以试试添加无用代码打包,不会被打包进去

import React from 'react';
import ReactDOM from 'react-dom';
import './search.less';
import logo from './images/logo.png';
console.log(logo);
import '../../common/index.js';
import { kaimo666 } from './tree-shaking.js';
// 无用代码
if (false) {
  kaimo666();
}
class Search extends React.Component {
  render() {
    return <div className="search-text">
      凯小默的博客666
      <img src={ logo } />
    </div>
  }
}
ReactDOM.render(
  <Search/>,
  document.getElementById('root')
)





目录
相关文章
|
8月前
|
JavaScript 前端开发 API
webpack核心原理-2
webpack核心原理-2
46 0
|
1月前
|
API 开发工具 开发者
webpack热更新原理
Webpack的Hot Module Replacement(HMR)提升开发效率,无需刷新页面即可更新模块。开启HMR需在配置中设`devServer.hot: true`。Webpack构建时插入HMR Runtime,通过WebSocket监听并处理文件变化。当模块改变,Webpack发送更新到浏览器,HMR Runtime找到对应模块进行热替换,保持应用状态。开发者可利用`module.hot` API处理热替换逻辑。
|
1月前
|
前端开发 测试技术 开发者
深入理解 Webpack 热更新原理:提升开发效率的关键
深入理解 Webpack 热更新原理:提升开发效率的关键
|
1月前
|
缓存 前端开发 算法
Webpack 进阶:深入理解其工作原理与优化策略
Webpack 进阶:深入理解其工作原理与优化策略
70 2
|
1月前
|
前端开发 JavaScript 开发者
深入理解前端性能优化中的Webpack Tree Shaking
【2月更文挑战第2天】在前端开发中,性能优化一直是开发者们不断追求的目标之一。而在这个过程中,Webpack Tree Shaking 技术作为一种重要的优化手段,对于减小前端应用的体积、提高加载速度起到了至关重要的作用。本文将深入探讨Webpack Tree Shaking 技术的原理和实现方式,帮助读者更好地理解并运用这一技术来优化前端应用性能。
|
1月前
|
存储 缓存 JavaScript
《Webpack5 核心原理与应用实践》学习笔记-> webpack的loader开发技巧
《Webpack5 核心原理与应用实践》学习笔记-> webpack的loader开发技巧
51 1
|
1月前
|
缓存 监控 JavaScript
《Webpack5 核心原理与应用实践》学习笔记-> webpack极致性能优化
《Webpack5 核心原理与应用实践》学习笔记-> webpack极致性能优化
39 1
|
1月前
|
前端开发 测试技术
《Webpack5 核心原理与应用实践》学习笔记-> webpack核心配置结构
《Webpack5 核心原理与应用实践》学习笔记-> webpack核心配置结构
74 1
|
1月前
|
自然语言处理 JavaScript 前端开发
webpack 的热更新是如何做到的?原理是什么?
webpack 的热更新是如何做到的?原理是什么?
47 0
|
1月前
|
缓存 前端开发 API
《Webpack5 核心原理与应用实践》学习笔记-> webpack插件开发基础
《Webpack5 核心原理与应用实践》学习笔记-> webpack插件开发基础
87 0