かぶめもで使用しているJavaScriptライブラリーのCDN利用、フォールバック対応を行いました。
CDN
CDNとはContents Delivery Networkの略で、画像、動画、CSS、JavaScriptファイルなどを配信するためのサービスです。
同じファイルが保存されたサーバーを世界各地に配置して、ユーザーに近い位置にある最適なサーバーから配信を行うのと、あらかじめファイルをキャッシュしているためパフォーマンスが向上する可能性があります。
今回は下記のCDNを利用しています。
CDNのパフォーマンス比較
CDNを比較して「CDNのパフォーマンス比較(スプレッドシート)」にまとめました。
5回計測して平均を算出した結果です。
Microsoft、Googleの順にパフォーマンスが良いので、ライブラリーがあればここを優先的に利用したほうが良いと思います。
フォールバック対応
利用しているCDNに障害が発生したときもエラーになってしまわないように行った対応です。
かぶめもではJavaScriptをモジュール化、非同期ローディングが行えるRequireJSというJavaScriptライブラリーを使用していて、このライブラリーで対応することができました。
通常、RequireJSではロードしたいJavaScriptファイルをconfigへ文字列として定義するのですが、この定義を配列にして複数指定するだけでフォールバック対応ができてしまいます。
対応前
require.config({
paths: {
'jquery': 'lib/jquery/jquery-1.10.0.min',
'jquerymobile': 'lib/jquery.mobile/jquery.mobile-1.3.1.min',
'underscore': 'lib/underscore/underscore-1.4.4.min',
'backbone': 'lib/backbone/backbone-1.0.0.min'
}
対応後
require.config({
paths: {
'jquery': [
'//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.10.0.min',
'//ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min',
'//code.jquery.com/jquery-1.10.0.min',
'//cdnjs.cloudflare.com/ajax/libs/jquery/1.10.0/jquery.min',
'lib/jquery/jquery-1.10.0.min'
],
'jquerymobile': [
'//ajax.aspnetcdn.com/ajax/jquery.mobile/1.3.1/jquery.mobile-1.3.1.min',
'//code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min',
'//cdnjs.cloudflare.com/ajax/libs/jquery-mobile/1.3.1/jquery.mobile.min',
'lib/jquery.mobile/jquery.mobile-1.3.1.min'
],
'underscore': [
'//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min',
'lib/underscore/underscore-1.4.4.min'
],
'backbone': [
'//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone-min',
'lib/backbone/backbone-1.0.0.min'
]
}
配列の初めから優先的にロードが行われ、失敗したときは次がロード対象になるため、パフォーマンスが高い順に設定しています。


コメント