2017-05-07 68 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(){ /* ... */ };'); 

这样就可以方便地创建具有所有的相同的默认设置/配置新的应用程序/网页。它还允许他们以一致的方式向页面添加脚本。

相关问题