gpt4 book ai didi

javascript - 如何使闭包编译器在大型项目中通过高级优化删除所有死代码?

转载 作者:行者123 更新时间:2023-11-30 10:31:30 25 4
gpt4 key购买 nike

以下代码:

function f(a) { a.a = 5; return a; }
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});
f(function() {});

Closure 编译器对此进行了优化:

function a(){return function(){}}function b(c){c.a=5}b(a());b(a());b(a());b(a());b(a());b(a());b(a());b(a());b(a());b(a());b(a());b(a());b(a());b(a());b(a());b(a());b(a());b(a());b(a());b(a());b(a());b(a());b(a());b(a());b(a()); 

(它留下死代码。)

但是,如果我删除最后一行(仅重复调用 24 次),它会删除死代码。结果为空。

我如何强制 Closure 编译器删除大型项目中的所有死代码?

最佳答案

区别在于编译器是否决定内联“f”。一旦它被内联,“(function(){}).a = 5”就是一个死表达式。在此之前,“f”是一个具有副作用(它会修改其参数)并且不能自行移除的函数。

内联的决定是基于对内联是否会导致更小的代码大小的估计。在这种情况下,从 24 到 25 的变化是内联成本估计超过通过删除函数定义节省的成本的转折点。

关于javascript - 如何使闭包编译器在大型项目中通过高级优化删除所有死代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16667600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com