しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

ASP.NET 開発者以外にもおススメしたい Microsoft Ajax CDN

Microsoft は Windows Azure などで利用するために、日本国内に CDN のエッジサーバを用意しています。その CDN エッジサーバを利用して jQuery などの有名な JavaScript ライブラリを配信する、Microsoft Ajax CDN というサービスを提供しています。

Microsoft Ajax Content Delivery Network - ASP.NET Ajax Library

使い方は非常に簡単で、普通に script タグで提供されている URL を読み込むようにするだけです。

<!-- jQuery 2.0.3 を読み込む -->
<script src="//ajax.aspnetcdn.com/ajax/jquery/jquery-2.0.3.min.js"></script>

スキームを省略しているのは https の時に対応するためです。ちゃんと圧縮とキャッシュも有効になっているので、ネットワークアクセスでのオーバーヘッドが最低限に抑えられています。

同じようなサービスとして Google が提供している Google Hosted Libraries があり、世間的にはこちらの方がよく使われている印象ですね。

Make the Web Faster — Google Developers

双方のサービスで配信されているライブラリを表にまとめてみました。

Microsoft Ajax CDN Google Hosted Libraries
jQuery
jQuery Migrate
jQuery UI
jQuery Validation
jQuery Mobile
jQuery Templates
jQuery Cycle
jQuery DataTables
Modernizr
Ajax Control Toolkit
JSHint
Knockout
Globalize
Respond
Bootstrap
AngularJS
ChromeFrame
Dojo
ExtCore
jQuery
jQueryUI
MooTools
Prototype
script.aculo.us
SWFObject
WebFontLoader

jQuery プラグインが Microsoft Ajax CDN の方が充実しているのに対して、JavaScript フレームワークが充実しているのが Google Hosted Libraries ということになりますね。配信されているライブラリには差がありますが、jQuery と jQuery UI は双方で配信されているので、好きな方を選んで使うことができます。

でも、私の環境から Microsoft Ajax CDN と Google Hosted Libraries のレイテンシを確認すると、Microsoft Ajax CDN の方が短い傾向がありました。

まずは Microsoft Ajax CDN の エッジサーバへ向けて ping を打った結果です。

PS C:\Users\shibayan> ping ajax.aspnetcdn.com

mscomajax.vo.msecnd.net [65.54.91.121]に ping を送信しています 32 バイトのデータ:
65.54.91.121 からの応答: バイト数 =32 時間 =18ms TTL=54
65.54.91.121 からの応答: バイト数 =32 時間 =21ms TTL=54
65.54.91.121 からの応答: バイト数 =32 時間 =20ms TTL=54
65.54.91.121 からの応答: バイト数 =32 時間 =27ms TTL=54

65.54.91.121 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 18ms、最大 = 27ms、平均 = 21ms

次に Google Hosted Libraries のエッジサーバへ向けて ping を打った結果です。

PS C:\Users\shibayan> ping ajax.googleapis.com

googleapis.l.google.com [74.125.23.95]に ping を送信しています 32 バイトのデータ:
74.125.23.95 からの応答: バイト数 =32 時間 =55ms TTL=45
74.125.23.95 からの応答: バイト数 =32 時間 =55ms TTL=45
74.125.23.95 からの応答: バイト数 =32 時間 =77ms TTL=45
74.125.23.95 からの応答: バイト数 =32 時間 =54ms TTL=45

74.125.23.95 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 54ms、最大 = 77ms、平均 = 60ms

tracert を実行したところ、Microsoft Ajax CDN の方がホップ数が少なかったです。環境に左右されるとは思いますが、Microsoft Ajax CDN も選択肢の一つに入れても良いのではないかと思います。

なお、Microsoft Ajax CDN と Google Hosted Libraries に共通の事項として、何らかの問題が発生して CDN からの読み込みが失敗した時のために、フォールバック用のコードを仕込んでおいた方が安全でしょう。

<script src="//ajax.aspnetcdn.com/ajax/jquery/jquery-2.0.3.min.js"></script>
<script>window.jQuery || document.write('<script src="js/jquery-2.0.3.min.js"></script>')</script>

Scott Hanselman 氏のブログでは ASP.NET の ScriptManager や Bundle を使った方法も紹介されています。

CDNs fail, but your scripts don't have to - fallback from CDN to local jQuery - Scott Hanselman

Windows Azure の日本リージョンも来年には稼働が開始しますし、日本にエッジサーバが増えて帯域も広くなる可能性もあるので期待したいですね。