回答:
できることがいくつかあります。
JavaScriptの前にHTMLとCSSをロードします。これにより、ページをレイアウトしてレンダリングするために必要なすべてがブラウザに提供されます。これにより、ユーザーはページがきびきびしているように見えます。スクリプトタグまたはブロックは、できるだけbodyの終了タグの近くに配置してください。
CDNの使用を検討してください。JQueryのような人気のあるライブラリのいずれかを使用している場合、多くの企業(例:google、yahoo)は、ライブラリのロードに使用できる無料のCDNを運用しています。
埋め込みスクリプトの代わりに外部ファイルからコードをロードします。これにより、ブラウザはJSコンテンツをキャッシュする機会を与えられ、まったくロードする必要がなくなります。連続したページの読み込みが速くなります。
Webサーバーでzip圧縮をオンにします。
Yahooには、ページの読み込み時間を短縮するのに役立つ素晴らしいページがあります。
Minifing、gziping、CDNingに加えて(新しい単語?)。ロードを延期することを検討する必要があります。基本的に、これはスクリプトを動的に追加し、ブロッキングを防ぎ、並行ダウンロードを許可します。
それを行うには多くの方法があります、これは私が好むものです
<script type="text/javascript">
function AttachScript(src) {
window._sf_endpt=(new Date()).getTime();
var script = document.createElement("script");
document.getElementsByTagName("body")[0].appendChild(script);
script.src = src;
}
AttachScript("/js/scripts.js");
AttachScript("http://www.google-analytics.com/ga.js");
</script>
これをbody終了タグの直前に配置し、AttachScriptを使用してすべてのjsファイルをロードします。
詳細はこちらhttp://www.stevesouders.com/blog/2009/04/27/loading-scripts-without-blocking/
Googleがアナリティクスを読み込む方法もご覧ください。
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-xxxxxxx-x']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
「ベストプラクティス」の一種のスクリプトと見なされているため、http:
//www.stevesouders.com/blog/2009/12/01/google-analytics-goes-async/
グーグルの人々のカップルが速度2010で新しいオープンソースプロジェクトが発表されたと呼ばれます Diffable。Diffableは、新しいバージョンがリリースされたときに新しいファイル全体を送信するのではなく、ユーザーのキャッシュに保存されているバージョン以降に変更されたJS、HTML、CSSの部分のみをインクリメンタルに発行するための魔法を実行します。
この手法はとてつもなくクールで、現在頻繁に小さなコード変更を伴う大きなJavaScriptコードベースを使用しているWebサイトで最も効果的です(そして努力する価値があります)。これは、毎週火曜日に少なくとも1回リリースされる Googleマップなどのアプリケーションに特によく当てはまります。、年間平均約100件の新しいリリースがあります。また、HTML5ローカルストレージが広く普及すると、一般的に多くの意味を持ちます。
ちなみに、GoogleのMichael Jonesが(地理空間の文脈で)変化について話しているのを見たことがない場合は、GeoWeb 2009で彼の基調講演全体を見る価値があります。
この質問の更新を提供するため。現代では、ノンブロッキングロードの方法はもう必要ないと思います。ブラウザがあなたのためにそれをします。
StackOverflowに質問を追加しました。ここにコンテンツを追加します。
唯一の違いは、loadイベントが少し早く発生することですが、ファイル自体のロードは同じままです。また、ノンブロッキングスクリプトを使用してonloadがより早く起動する場合でも、JSファイルがより早く起動されるという意味ではありません。私の場合、通常のセットアップが一番うまくいきました
さて、最初のスクリプトは次のようになります。
<script>
(function () {
var styles = JSON.parse(myObject.styles);
for( name in styles ){
var link = document.createElement('link');
link.setAttribute('rel', 'stylesheet');
link.setAttribute('type', 'text/css');
link.setAttribute('href', styles[name]);
document.getElementsByTagName('head')[0].appendChild(link);
}
var scripts = JSON.parse(myObject.scripts);
for( name in scripts ){
var e = document.createElement('script');
e.src = scripts[name];
e.async = true;
document.getElementsByTagName('head')[0].appendChild(e);
}
}());
</script>
myObject.styles
ここには、すべてのファイルのすべてのURLを保持するオブジェクトがあります。
3つのテストを実行しましたが、結果は次のとおりです。
これは通常のセットアップです。ヘッドに4つのcssファイルがあり、ページの下部に3つのcssファイルがあります。
今、私は何もブロックしていません。すべてが同時にロードされていることがわかります。
これをもう少し進めるために、jsファイルのみを非ブロッキングにしました。上記のスクリプトでこれを行います。私のCSSファイルが負荷をブロックしていることが突然わかります。最初の例では何もブロックしていないため、これは奇妙です。cssが突然負荷をブロックするのはなぜですか?
最後に、すべての外部ファイルが非ブロッキング方式でロードされるテストを行いました。今、私たちの最初の方法との違いは見られません。どちらも同じように見えます。
私の結論は、ファイルはすでに非ブロッキング方式でロードされているということです。特別なスクリプトを追加する必要はありません。
または、私はここに何かが欠けていますか?