これを考えると:
このような小さなライブラリの必要性を明確にする: これは、サイトがページに組み込むサードパーティのサービスです。既存のライブラリ、速度、またはページの読み込みを制御できないため、すべてを可能な限り軽量、高速、自己完結型に保つ必要があります。15k は、サービスの動的コンテンツによってアクセスされるライブラリのみのターゲット数です。
CDN の 1 つ (Google または Microsoft。Google のほうがよく使われていると思いますが、テストする必要があります) を介して、デマンド ロードされた jQuery を使用することをお勧めします。コードは、jQuery が既にロードされているかどうかを検出し、ロードされている場合 (~0k) を使用し、ロードされていない場合はscript
要素を動的に追加して、CDN からプルします。ユーザーがその CDN から jQuery を使用して他のサイトにアクセスした場合、スクリプトはキャッシュ (~0k) から取得される可能性があります。そうでない場合は、最大 15,000 ヒットではなく、最大 31,000 のヒットがありますが、ヒットがないか、CDN からの「変更されていない」応答のヒットだけになることがよくあります。
サイトがjQuery以外のものnoConflict
を使用している場合に備えて、ロードした場合は呼び出しを発行する必要があります。これは、要素のイベントを監視し ( IE で使用し、いずれかまたはステータスを監視する必要があります)、それが発生したときにそれを実行することで$
簡単に実行できます。load
script
readystatechange
loaded
complete
今日の電気通信の世界では、15k のダウンロードと 31k のダウンロードの違いは、最初に HTTP 接続をセットアップするコストに比べれば些細なことです。
そのデマンド ロードは、次の行に沿って、実際にはほんの少しのコードです。
function loadJQuery(cb) {
var d, s, t;
if (typeof jQuery === "function"
&& parseFloat(jQuery.fn.jquery) >= 1.5) { /* Or whatever */
window.ourjQuery = jQuery;
if (cb) {
cb();
}
return;
}
d = document;
s = d.createElement('script');
t = d.body || d.getElementsByTagName('head')[0] || d.documentElement;
s.onload = loaded;
s.onreadystatechange = handleReadyStateChange;
s.src = "//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js";
t.appendChild(s);
function loaded() {
if (s) {
s = undefined;
window.ourjQuery = jQuery.noConflict(true);
if (cb) {
cb();
}
}
}
function handleReadyStateChange() {
if (s && (s.readyState === "loaded" || s.readyState === "complete")) {
loaded();
}
}
}
script
要素の URL に注意してください。http
これは、とhttps
ページ ( details )の両方に優しいためです。また、jQuery の最小バージョンを確認し、より厳密な形式のnoConflict
if we load を使用していることにも注意してください。いずれにしても、コールバックが呼び出されるまでに、ourjQuery
シンボルは読み込まれたコピーを最小バージョンで参照します。
更新:上記のコメントへの対処:
それは良い考えですが、残念ながら私たちにとって実際には選択肢ではありません。Google の CDN の jQuery がキャッシュされる可能性が高く、負荷を節約し、必要に応じてチェックおよび拡張できることに同意しますが、自分で提供するほどスケーラブルまたは安定していないようです。サイトは、ニーズに合わせて jQuery モジュールを上書きするか、さらに悪いことを決定する可能性があります。私たちが必要としているのは、完全に制御でき、必要に応じて拡張および分岐できる軽量の自己完結型ライブラリです。目標は、このライブラリがキャッシュされ、CDN からバージョン管理されることです。
はい、基本的な jQuery 機能が変更されたサイトのわずかなリスクがあります。非常に小さなリスクです。コア API (プラグインなどではない) に制限している場合、率直に言って、心配する価値はないと思います。
しかし、それについて心配している場合は、率直に言って、独自の CDN でホストされている、わずかに変更された jQuery を、別のシンボルを使用しjQuery
て (まったく使用せず$
に) 使用するだけです。今日の電気通信の世界では、31k 対 15k は問題ではありません。主なコストは、最初に接続を確立することです。必要に応じて、必要のない部分を削除することで、おそらくそれを少し減らすことができますが、悲しいことにjQueryの内部は少し厄介であり、機能を選択的に削除することは簡単ではない場合があります(機能によって異なります)。