打包优化(可摇树优化)

什么叫可摇树优化

  • 摇树是一种消除死代码的方法。这个词最初是由 Rollup 发起的,并逐渐流行开来,但消除死代码的概念却早已存在。webpack 中也涉及了这个概念。
  • 应用程序的依赖项是树状结构。树中的每个节点都代表了一个依赖项,这些依赖项为应用程序提供了不同的功能。我们通过消除不需要的依赖项来减少树的节点。这个过程叫摇树
  • 早期我们开发的应用程序依赖项比较少,随着后续的开发树节点越来越多且有很多的节点我们可能已经不需要了
  • 摇树优化 基于webpack2.0来实现的

具体代码实例

  • 用 export default 导出的不可摇树 ,下属示例中即使我们不需要 c 和 d。但是他任然会被输出到 JavaScript 客户端
export default {
  a: xxx,
  b: xxx,
  c: xxx,
  d: xxx
}

import test from 'xxx'
test.a()
test.b()

上述实例 页面不需要c和d 但是任然被打包

  • 用 export 可以摇树 按需加载 ,打包时会自动剔除c d 变量
export const a: xxx
export const b: xxx
export const c: xxx
export const d: xxx


import { a, b } from 'xxx'
// {a ,b} 类似结构赋值但是和解构赋值不一样
// 如果是 export default 导出 这样引用会报错

上述实例 页面不需要c和d 但是任然被打包

问题

  • 看到vue3的核心特性

vue的树摇(tree-shaking)

  • vue2存在的问题
  • 不少global-api是作为静态函数直接挂在构造函数上,例如Vue.nextTick(),如果我们从未在代码中使用它们,就会形成所谓的dead code ,这类global-api 造成的dead code 无法使用webpack 的tree-shaking 去除掉。
import Vue from 'vue';
Vue.nextTick(() => {
	// something DOM-related
})
  • vue3 中做了相应的变化,将这些方法抽取为独立的函数,这样打包工具的摇树优化可以将这些dead code 去除掉
import {nextTick} from 'vue';
nextTick(() => {
	// something DOM-related
})
// Vue.nextTick
// Vue.observable (replaced by Vue。reactive)
// Vue.version
// Vue.compile (only in full builds)
// Vue.set(only in compat builds)
// Vue.delete (only in compat builds)

具体怎么使用

  • 如果是webpack创建的项目
  • 在webpack.config.js中mode=‘none’时,默认关闭
  • 在webpack.config.js中mode=‘production’时,默认开启
  • 只会注入已使用的函数,未使用的函数不会注入到bundel.js中
  • 如果是vue创建的项目 是默认开启的
  • 应该是在vue.config.js 上配置的

参考的文章

tree-shaking.
打包后的代码.

总结

  • 我们的应用程序采用应该采用按需加载的方式导出 也就是export 的方式导出
  • 一个模块只导出一个程序的时候,使用 export default。导出多个模块的时候使用 export
  • 或者干脆所有的模块导出的时候都使用 export
  • 理论上一些方法 变量如果没有引用在开发的时候就应该删除,但是项目周期长,需求变动,维护成本高 ,
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Webpack树摇(Tree Shaking)是一种在Webpack中进行性能优化的手段,它通过静态分析和模块依赖关系来消除无用的代码,从而减少最终打包文件的体积。树摇会通过识别并删除未被使用的模块、函数、变量等,以达到优化代码的目的。 虽然Webpack从2.x版本开始原生支持树摇功能,但由于JavaScript的动态特性和模块的复杂性限制,直到最新的5.0版本,树摇仍然存在一些问题,使得优化效果可能不如预期。因此,开发者需要有意识地优化代码结构,或者使用一些补丁技术来帮助Webpack更精确地检测无效代码,完成树摇操作。一个常见的优化操作是避免无意义的赋值,以减少无用代码的产生。[3.1] 总结来说,Webpack树摇是一种通过静态分析和模块依赖关系来消除无用代码的性能优化手段,它可以帮助减少最终打包文件的体积,提升网页加载速度。但在实际使用中,需要注意JavaScript的动态特性和复杂的模块结构可能会对树摇效果造成影响,需要开发者有意识地进行代码优化和使用辅助技术来实现更精确的树摇操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Webpack 原理系列九:Tree-Shaking 实现原理](https://blog.csdn.net/zjjcchina/article/details/121159109)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [webpack中的tree shaking(树摇)-----移除未使用的代码](https://blog.csdn.net/qq_41869212/article/details/128396960)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值