2020 年からの更新: この回答はインターネット標準からすると非常に古く、今日の全体像には程遠いですが、まだ時折投票が見られるため、投稿後に何が変更されたかについていくつかのヒントを提供する必要があると感じています. スクリプト読み込みの優れたサポートasync
、HTTP/2 のサーバー プッシュ機能、および長年にわたる読み込みプロセスに対する一般的なブラウザの最適化はすべて、Javascript を複数のファイルに分割することによる読み込みパフォーマンスへの影響に影響を与えてきました。
Javascript を始めたばかりの人への私のアドバイスは同じままです (バンドラー/ミニファイアーを使用し、デフォルトで正しいことを行うと信頼してください)。async
ローディングとサーバープッシュによってもたらされる新機能。
2013年っぽいからの元の答え:
ダウンロードに時間がかかるため、常にスクリプトを 1 つの大きなファイルにするようにしてください。ただし、ミニファイヤを使用する場合 (使用する必要があります)、複数のソース ファイルを 1 つにまとめることができます。したがって、複数のファイルで作業を続けてから、配布用にそれらを 1 つのファイルに縮小できます。
これに対する主な例外は、jQuery などのパブリック ライブラリです。これは常にパブリック CDN からロードする必要があります (ユーザーが既にそれらをロードしている可能性が高いため、再度ロードする必要はありません)。パブリック CDN を使用する場合は、失敗した場合に独自のサーバーからロードするためのフォールバックを常に用意してください。
コメントにあるように、実話はもう少し複雑です。
<script src="blah"></script>
スクリプトは、同期 ( ) または非同期 ( )でロードできますs=document.createElement('script');s.async=true;...
。同期スクリプトは、ロードされるまで他のリソースのロードをブロックします。たとえば、次のようになります。
<script src="a.js"></script>
<script src="b.js"></script>
a.js をリクエストし、それがロードされるのを待ってから、b.js をロードします。この場合、a.js と b.js を組み合わせて、一気にロードする方が明らかに優れています。
同様に、a.js に b.js をロードするコードがある場合、それらが非同期であるかどうかに関係なく、同じ状況になります。
しかし、それらを一度に非同期にロードし、クライアントのサーバーへの接続の状態と、プロファイリングによってのみ真に判断できるさまざまな考慮事項に応じて、より高速にロードできます。
(function(d){
var s=d.getElementsByTagName('script')[0],f=d.createElement('script');
f.type='text/javascript';
f.async=true;
f.src='a.js';
s.parentNode.insertBefore(f,s);
f=d.createElement('script');
f.type='text/javascript';
f.async=true;
f.src='b.js';
s.parentNode.insertBefore(f,s);
})(document)
これははるかに複雑ですが、a.js と b.js の両方を、お互いをブロックしたり、その他のものをブロックしたりせずにロードします。最終的にはasync
属性が適切にサポートされるようになり、同期的にロードするのと同じくらい簡単にこれを行うことができます。最終的。