[英]Closure compiler: How does it decided when to inline?
我試圖讓閉包編譯器以簡單模式內聯一些包裹在配置對象中的代碼,而沒有任何類型注釋。 React做到了這一點,並設法降低了捆綁包的大小
我觀察到以下幾點:
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();
Closure編譯器如何內聯? 是否有確定的方法可以將其用於內聯包裝函數?
更新: 根據建議 ,我使用了--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);
}())
沒有答案。 編譯器使用試探法和副作用計算來決定何時內聯。 與嵌套作用域相比,編譯器在全局作用域內聯的可能性也較小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.