jqueryファイルまたはjavascriptファイルにリンクするために使用するCDNは実際に重要ですか。一方が他方より速い可能性はありますか? cdn の使用を決定する上で、他にどのような要因が役割を果たす可能性がありますか? Microsoft、Yahoo、Google のすべてが現在 CDN を持っていることを私は知っています。
17 に答える
コメントに基づく更新:
短いバージョン:大した問題ではありませんが、ホストするものによって異なる場合があります。それらはすべて異なるものをホストしています: Google は jQuery.Validate をホストしていません, Microsoft は jQuery-UI をホストしていませんでしScriptResource.axd
た.ネット4.0)。
重要な注意: イントラネット アプリケーションを構築している場合は、CDN アプローチを避けてください。内部で非常に過負荷のサーバーを使用していない限り、誰がホストしているかは関係ありません.CDNはローカルの100mb / 1GBイーサネットよりも優れたパフォーマンスを提供しません. 厳密に内部アプリケーションに CDN を使用すると、パフォーマンスが低下します。 キャッシュの有効期限ヘッダーを正しく設定し、イントラネットのみのシナリオに存在する CDN を無視します。
どちらかがブロックされる可能性はほぼ同じで、ほぼゼロのようです。私はこれが真実ではない契約に取り組んできましたが、それは例外のようです. また、この回答の最初の投稿以来、それを取り巻く状況が大きく変化し、Microsoft CDN は多くの進歩を遂げました。
私が現在取り組んでいるプロジェクトでは、ソリューションに最適な両方の CDN を使用しています。これにはいくつかの要因が関係しています。古いブラウザーを使用しているユーザーは、HTTP 仕様で推奨されているように、ドメインごとに 2 つの同時要求を行っている可能性があります。これは、パイプライン処理をサポートする適切な新しいもの (現在のすべてのブラウザー) を実行している人にとっては問題ではありませんが、別の要因に基づいて、少なくとも JavaScript に関しては、この制限も打ち破っています。
使用している Google の CDN:
使用している Microsoft の CDN:
- MicrosoftAjax.js
- MicrosoftAjaxWebForms.js (4.0 まではすべての UpdatePanels を完全に削除していません)
- jQuery.Validate.min.js
私たちのサーバー:
- Combined.js?v=2.2.0.6190 (Major.Minor.Iteration.Changeset)
ビルド プロセスの一部はすべてのカスタム JavaScript を組み合わせて縮小するため、ビルドに応じてこれらのスクリプトのリリース バージョンまたはデバッグ (縮小されていない) バージョンを含むカスタム スクリプト マネージャーを介してこれを行います。Google は jQuery 検証パッケージをホストしていないため、これはマイナス面になる可能性があります。MVC はこれを 2.0 リリースに含めて使用しているため、すべてのニーズに対して Microsoft の CDN に完全に依存することができ、そのすべてが ScriptManager を介して自動的に行われます。
他の唯一の議論は DNS 時間です。これには、ページの読み込み速度という点でコストがかかります。 平均的に:ローカル DNS サーバーが要求を取得する可能性が高いため、より多く使用されている (より長く使用されている)という理由だけで、 ajax.googleapis.com
DNS によってより早く返される可能性がありajax.microsoft.com
ます (これは、領域内の最初のユーザーのペナルティです)。 . これは非常に些細なことであり、パフォーマンスがミリ秒単位まで非常に重要である場合にのみ考慮する必要があります。
(はい: この点は両方の CDN を使用することに反していることは理解していますが、私たちの場合、DNS 時間は、発生する JavaScript/ブロッキングの待機時間によってはるかに影が薄くなります)
最後に、まだ見ていない方のために説明すると、 Firebugは最高のツールの 1 つであり、そのためのプラグインとしてPage SpeedとYSlow があります。CDN を使用していても、キャッシュ ヘッダーがないためにページが毎回画像を要求している場合は、簡単に達成できる成果が得られません。Firebug の Net パネルでは、ページの読み込み時間の内訳をすばやく確認できます。また、Page Speed/YSlow を使用すると、役立つヒントがいくつか表示されます。
jQuery には Google CDN を絶対に使用する必要があります (これは Microsoft 中心の開発者によるものです)。
簡単な統計です。MS CDN for jQuery の使用を検討する人は、常に少数派です。MS 以外の開発者で jQuery を使用していて、Google を使用し、Microsoft の使用を検討しない人が多すぎます。パブリック CDN の大きな利点の 1 つはキャッシングの改善であるため、複数の CDN 間で使用を分割すると、その利点の可能性が減少します。
Google は、独自のソフトウェアで縮小された jQuery バージョンを送信します。このバージョンは、MS が提供する標準の縮小バージョンよりも 6kb 軽量です。Googleに行きます。
考慮すべきマイナーなことの1つは、両方の会社がわずかに異なる「追加の」ライブラリを提供していることです。
- MicrosoftはCDNでJQuery検証ライブラリを提供していますが、Googleは提供していません( http://www.asp.net/ajaxlibrary/cdn.ashx)
- GoogleはCDNでJQueryUIライブラリを提供していますが、Microsoftは提供していません( http://code.google.com/apis/ajaxlibs/documentation/)
ニーズに応じて、これが関連する場合があります。
ajax.microsoft.comはmicrosoft.comリクエストのサブドメインであるため、すべてのmicrosoft.com Cookieを送信して、ファイルを元に戻すのにかかる全体的な時間を追加することにも注意してください。
また、ajax.microsoft.comはデフォルトのIIS7圧縮を使用していますが、これは他のWebサーバーが使用する標準の圧縮よりも劣っています。
http://ajax.microsoft.com/ajax/jquery/jquery-1.4.4.min.js-33.4K _
http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js-26.5K _
また、他の人が言及しているように、グーグルCDNははるかに人気があり、ファイルがキャッシュされる可能性が大幅に高まります。
だから私はグーグルを使用することを強くお勧めします。
おそらく問題にはなりませんが、A/B テストでこれを検証できます。トラフィックの半分を 1 つの CDN に送信し、半分を別の CDN に送信し、プロファイリングを設定して応答を測定します。どちらか一方に深刻な問題が発生した場合に備えて、簡単に切り替えられることがより重要だと思います。
ここで少し遅れていることはわかっていますが、本番環境で使用しているコードを次に示します。問題が発生したことはありませんが、走行距離は異なる場合があります。必ず自分の環境でテストしてください。
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
!window.jQuery && document.write('<script src="/scripts/jquery-1.4.2.min.js"><\/script>')
</script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript">
!window.jQuery.ui && document.write('<script src="/scripts/jquery-ui-1.8.2.min.js"><\/script>')
</script>
一方が他方より速い可能性はありますか?
私は実際にこれに興味があったので、次のそれぞれを使用して jsbin テスト ページをセットアップし、webpagetest.org の視覚比較ツールで実行しました。私はテストしました:
- ajax.googleapis.com
- code.jquery.com
- ajax.aspnetcdn.com
- cdnjs.cloudflare.com
どちらが最速でしたか:両方のテストでcode.jquery.comが 0.1 秒差をつけました
誰が最も遅かったか: ajax.aspnetcdn.comは最初のテストで 0.7 秒、ajax.googleapis.comは 2 番目のテストで 1秒遅かった
これが最初のテストです(それぞれが3回テストされました):
ビデオ: http://www.webpagetest.org/video/view.php?id=121019_16c5e25eff2937f63cc1714ed1eac814794e62b3
これが2番目のテストです(それぞれ別の3つ):
ビデオ: http://www.webpagetest.org/video/view.php?id=121019_a7b351f706cad2c25664fee7ef349371f17c4e74
Pingdomが述べたように:
誰かがあなたのサイトにアクセスしたときに、同じ CDN で同じ jQuery ファイルを使用する別のサイトに既にアクセスしている場合、ファイルはキャッシュされているため、ダウンロードする必要はまったくありません。それ以上速くなることはありません。
これは、最も広く使用されている CDN が有利であることを意味し、サイトに利益をもたらす可能性があります。
パフォーマンスに関するいくつかの観察: Google の CDN は、北米とヨーロッパの両方で一貫して 3 つの中で最も遅いです。ヨーロッパでは、Microsoft の CDN が最速です。
追加の考慮事項 - サイトが SSL であり、Android 2.1 (またはそれ以前) をサポートする必要がある場合、Microsoft CDN の HTTPS バージョンの SSL 証明書は、この問題により、これらのバージョンの Android ブラウザーをクラッシュさせます: http://code .google.com/p/android/issues/detail?id=5001 . SSL 証明書は技術的に有効であり、欠陥は Android の SSL 実装にあるため、Microsoft の「せい」ではありませんが、それでもサイトがクラッシュします。
Google の CDN の SSL 証明書は、この特定の問題 (証明書の「証明書のサブジェクトの代替名」に関連する) に該当しません。
そのため、SSL + Android 2.1 のサポートについては、Google CDN を使用してください。
ターゲットとするオーディエンスがどこにいるかによると思います。alertra.com を使用して、世界中の多くの場所から両方の CDN 速度を確認できます。
私の答えは他の人とは少し異なります.jqueryを使用している場合、ほとんどの人が必要とするjqueryバリデーターが必要な場合は、Microsoftを使用します。
Microsoft CDN http 接続は Keep-Alive です。これは、複数のアイテムを要求している場合に大きなプラスになります。
したがって、jquery の検証が必要な場合は、Microsoft CDN を使用します。jquery ui が必要な場合でも、Google はキープアライブを維持しないため、Microsoft を使用するため、すべてのリクエストは独自のものになります。そのように混ぜることはプラスです。マイクロソフトをバリデータのみに使用している場合は、リクエストごとにGoogleサーバーと個別に接続しています。
概要では、マイクロソフトは UI を提供していないと述べていますが、それは正しくありません (これ以上)。http://www.asp.net/ajaxlibrary/cdn.ashxからダウンロードできます。
また、Google CDN を使用する場合は、ajax.googelapis.com などのタイプミスが発生する場合があることも考慮してください。これにより、非常に厄介な xss (クロス サイト スクリプティング) 攻撃が発生する可能性があります。googlapis.com のタイプミスを登録して実際にテストしたところ、JavaScript、マップ、CSS などのリクエストを処理していることにすぐに気付きました。
Google にメールを送信し、同様の CDN のタイプミス URL を登録するよう依頼しましたが、返事がありません。これは、潜在的に危険な攻撃者がタイプミス リクエストを待っており、xss ペイロードを使用して jquery などを簡単に返すことができるため、CDN に依存しない本当の理由になる可能性があります。
ありがとうございました
私は両方を使用します!
Google Jquery ホスティングはずっと前から存在しているため、Microsoft のものと比較して、人々がすでにキャッシュしている可能性がはるかに高いため、最初にそれを取得します.
個人的には、私はこのようなものを使用します -
if (typeof jQuery == 'undefined') {
// jQuery is not loaded
document.write("<scr" + "ipt type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js\"></scr" + "ipt>");
}
} else {
// jQuery is loaded
}
(これが100%機能するかどうかはわかりませんが、例ではなくアイデアを書くつもりでした-これは、リンクが見つからなかったため、Microsoftのものではなく、GoogleがホストするJqueryを参照しています)