gpt4 book ai didi

javascript - 关闭编译器: How does it decided when to inline?

转载 作者:行者123 更新时间:2023-12-03 01:28:55 24 4
gpt4 key购买 nike

我试图让闭包编译器内联一些以简单模式封装在配置对象中的代码,而无需任何类型注释。 React does this并设法降低 bundle 大小

我观察到以下情况:

a.js

(function main() {

const config = {
log(m) {
console.log(m);
}
}

function reconciler(c) {
const log = c.log;
log('jere');
}

reconciler(config);

}())

编译时返回

a.min.js

(function() {
(function(a) {
a = a.log;
a("jere");
})({
log: function(a) {
console.log(a);
}
});
})();

并且,

b.js

(function main() {

const config = {
log(m) {
console.log(m);
}
}

function reconciler(c) {
const log = c.log;
c.log('here');
// log('jere');
}

reconciler(config);

}())

编译时给出,

b.min.js

(function() {
console.log("here");
})();

另一方面,

function main(){
const config = {
log: function log(m) {
console.log(m);
}
};

const log = config.log;

log('m');
log('m');
log('m');
log('m');
}

main()

给出

function main() {
console.log("m");
console.log("m");
console.log("m");
console.log("m");
}
main();

闭包编译器如何内联?有没有明确的方法让它成为内联包装函数?

更新: As suggested ,我使用了 --assume_function_wrapper 并且它更好地内联了代码。但是如果函数有返回值,CC 就无法内联。

(function main() {

const config = {
log(m) {
console.log(m);
}
}

function reconciler(c) {
const log = c.log;
log('jere');
return {
foo() {
// More side effects
}
}
}

reconciler(config);

}())

最佳答案

没有一个答案。编译器使用启发式和副作用计算来决定何时内联。与嵌套作用域相比,编译器在全局作用域中内联的可能性也较小。

关于javascript - 关闭编译器: How does it decided when to inline?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51383149/

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