dce和tree shaking

dce和tree shaking

为了在弱网环境下降低网络延迟以获取更好的用户体验,我想这些关于如何降低代码体积的技术都是值得研究的。目前降低网络延迟的一个方法是降低js代码的体积,本文研究的就是在压缩代码之前的降低体积的方法——DCE以及Tree Shaking。其实Tree Shaking也可以说是DCE的另一种思路的实现方式。

常规dce

dce 即 dead code elimination(消除死代码),通常在编译阶段由编译器进行判断某些代码是否可达从而删除那些不可能执行的代码,当然由于Javascript没有常规意义上的编译阶段,所以这个工作交由打包工具辅助进行。举个?:

// Some code that cannot be reached
let flag = true; // compiler can't solve this condition
// 对于依赖运行时才能确定是否会使用的代码,DCE和Tree Shaking都没办法处理
if (true && flag) {
    // ...
}
else {
   // will not execute forever 
}

function func () {
  return 'result';
  
  // some dead code here;
}

常规的死代码消除一般来说包含上面这几种类型的无用代码,会在打包阶段(一般是uglify.js做的)通过分析去除掉。

tree shaking

俗称摇树优化,直观的说就是将代码中没有使用到的部分通过摇树策略删除掉。为什么称为摇树优化呢?因为这个阶段是在AST中进行的,通过分析将AST中的一些无效分支剪除,看起来就像是将那些死掉的叶子分支摇下来。

好像加粗的那部分有点难以理解,什么叫代码中没有使用到的部分?难道现在程序员写代码时没有用到的代码(函数)还留着没删除?….好吧如果是业务代码这样的话似乎可以理解,这里的Tree Shaking主要是对于第三方库而言的,比如lodash,可能我们项目中只用到了lodash中几个方法,因此多余的那部分代码在打包时也就没必要引入到我们的项目中了。

let a = 'never used'; // never used value
const test = () => {
		return 'test func1'
};
// 打包时会将a test删除 因为没有用到
const func = a => b => c => a + b + c;
func();

PS:Tree Shaking只能用于使用es6模块化的项目,主要原因是Tree Shaking是基于ES6模块化机制才能进行代码的静态分析,从而才能进行优化。

参考链接

roll up 作者原文:https://medium.com/@Rich_Harris/tree-shaking-versus-dead-code-elimination-d3765df85c80

百度外卖tree shaking性能优化实践:https://juejin.im/post/5a4dc842518825698e7279a9

内容概要:本文全面介绍了数据流图(DFD)的概念、构成元素及其重要性。数据流图是从数据传递加工的角度,以图形方式表达系统逻辑功能、数据流向变换过程的工具。文章详细解释了数据流图的四个基本元素:数据流、加工、数据存储外部实体,并通过实例说明了这些元素在实际场景中的应用。文中强调了数据流图在软件开发需求分析业务流程优化中的关键作用,通过绘制顶层、中层底层数据流图,逐步细化系统功能,确保数据流向处理逻辑的清晰性。此外,文章还指出了常见绘制误区及解决方法,并以在线购物系统为例进行了实战分析,展示了从需求分析到数据流图绘制的全过程。 适合人群:软件工程师、业务分析师、系统设计师以及对系统分析与设计感兴趣的初学者。 使用场景及目标:①帮助开发团队在需求分析阶段清晰展示数据流动处理过程,避免理解偏差;②辅助企业梳理优化业务流程,识别效率低下的环节,提升运营效率;③为系统设计开发提供详细的逻辑框架,确保各模块的功能明确,减少开发错误。 阅读建议:本文内容详实,涵盖了从理论到实践的各个方面。建议读者在学习过程中结合实际项目背景,逐步掌握数据流图的绘制技巧,并通过反复练习优化,加深对系统分析与设计的理解。
资源下载链接为: https://pan.quark.cn/s/5c50e6120579 《CoffeeTime_0.99.rar:主板BIOS修改工具详述》 在计算机硬件领域,BIOS(基本输入输出系统)是计算机启动时最先加载的软件,它负责初始化硬件设备,并为操作系统提供基本的交互功能。不过,随着处理器技术的持续进步,部分主板可能无法原生支持更新的CPU型号。为解决这一问题,一些技术爱好者专业人士会通过修改主板BIOS,也就是俗称的“魔改”,来提升其兼容性。本文将深入剖析名为“CoffeeTime_0.99.rar”的工具,它是一款专门用于主板BIOS修改,以实现对第6、7、8、9代英特尔CPU支持的工具。 我们先来看“CoffeeTime.exe”,这是该工具的主程序文件。通常情况下,它会配备一套直观易用的用户界面,方便用户对BIOS进行修改操作。不过,在使用该工具之前,用户必须具备一定的电脑硬件知识,因为一旦操作失误,就可能导致系统运行不稳定,甚至无法启动。对于初学者而言,谨慎操作至关重要,否则可能会造成不可挽回的损失。 “readme.txt”是软件包中常见的文档,一般会包含使用指南、注意事项以及开发者提供的其他重要信息。在使用CoffeeTime之前,用户务必要仔细阅读该文件,因为里面可能包含了如何正确运行程序、避免错误操作以及解压后具体步骤等关键内容。 “bin”“data”是两个文件夹,它们可能包含了用于BIOS修改的各种二进制文件数据。“bin”文件夹通常会包含特定版本的BIOS固件或用于修改的工具,而“data”文件夹则可能包含更新CPU微码、识别信息等必要的数据文件。在进行BIOS修改的过程中,这些文件会被程序调用,从而实现对原有BIOS的扩展或修正。 BIOS的修改过程一般包含以下步骤:首先,备份原始BIOS,这是在进行任何修改前的必要步骤,以便
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值