2017-05-07 2 views
0

大きなIIAFを小さな関数に分割すると、パフォーマンスが向上しますか?私は、Googleの検索ページをチェックしていたと私は、彼らが以下のような何かを行うことに気づい

(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 

は、それはそれがすべてでoveralパフォーマンスを向上させることができますように分割していることは可能ですか? 2番目の質問 - 個々の機能を別々の<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(){ /* ... */ };'); 

これがすべて同じデフォルト設定/構成を有していて、新しいアプリケーション/ページを簡単に作成することができます。また、スクリプトをページに一貫した方法で追加することもできます。

関連する問題