2017-05-07 66 views
0

我檢查谷歌搜索頁面,我注意到他們這樣做如下:將大型IIAF分割爲更小的函數是否可以提高性能?

(function(){ 
    window.google={}; // few keys (none of the keys is function) 
})(); 

// immediately after, same script tag 
(function(){ 
    google.x = function(){ /* ... */ }; 
    google.y = function(){ /* ... */ }; 
})(); 
// anonymous function invocations repeat 

是否有可能分裂一樣,可以在任何提高整體性能?第二個問題 - 如果將每個功能放在單獨的<script>標籤中,性能增益是否會有所不同?

+0

不,這應該沒有顯着差異。 – Pointy

+0

你爲什麼認爲它會更快?這是解析,處理和評估的更多代碼。我沒有看到好處。 – Bergi

+0

對於某些*情況,當全局函數沒有關閉許多不必要的變量時可能會有好處,但您的示例沒有顯示。 – Bergi

回答

1

沒有性能好處,實際上它應該稍微慢一些。一般來說,IIFE用於防止意外產生的全局變量。這個例子中的IIFE由於設置了全局變量而部分無用。

我懷疑這是有一個base.html模板(或類似的東西),以及一些應用程序/頁面特定的腳本動態添加的結果。

我想象中的base.html文件文件可能是這個樣子:

<body> 
... 
<script> 
    {{> iife script="window.google={}" }} 
    {{#each scripts}} 
     {{> iife script=script }} 
    {{/each}} 
</script> 
</body> 

我使用的把手,但它可能是任何模板語言。代碼{{> iife }}表示呈現「部分」模板。從本質上講,這隻會包含IIFE中的任何代碼。在上面的例子中,我們也循環了一個名爲「scripts」的變量。這是一串字符串。

在某些特定的應用程序/頁新的內嵌腳本可能會增加這樣的:

scripts.push('google.x = function(){ /* ... */ };'); 

這樣就可以方便地創建具有所有的相同的默認設置/配置新的應用程序/網頁。它還允許他們以一致的方式向頁面添加腳本。

相關問題