9

明確にするために編集:

パフォーマンスに関しては(これはまだ乱暴な用語ですが、私は知っています)、どちらが優れているのでしょうか? RequireJS を介して、jQuery のローカル バージョンまたは CDN バージョンをロードしますか?

記録として、RequireJS のオンライン ドキュメントには、CDN の使用を思いとどまらせるような一節が含まれていますが、その意味について 100% 確信があるわけではありません。

ビルドで CDN の読み込みと shim 構成を混在させないでください。シナリオ例: CDN から jQuery をロードしますが、shim 構成を使用して、jQuery に依存するバックボーンのストック バージョンのようなものをロードします。ビルドを行うときは、必ずビルド ファイルに jQuery をインライン化し、CDN からロードしないでください。それ以外の場合、バックボーンはビルドされたファイルにインライン化され、CDN で読み込まれた jQuery が読み込まれる前に実行されます。これは、シム構成が依存関係がロードされるまでファイルのロードを遅らせるだけで、定義の自動ラップを行わないためです。ビルド後、依存関係は既にインライン化されており、shim 構成は、define() されていないコードの実行を後まで遅らせることはできません。定義()' d モジュールは、依存関係が読み込まれるまで実行されない define factory 関数でソースを適切にラップするため、ビルド後に CDN で読み込まれたコードで動作します。教訓: shim config は、非モジュラー コード、レガシー コードの応急処置です。define() されたモジュールの方が優れています。

理論的には、CDN jQuery ファイルを使用すると、さらに 1 つの HTTP リクエストが発生します (r.js を使用して他の JS ファイルとマージすることはできません)。訪問しました。

ただし、Google で調べた情報が正しかったとしても、ローカルの jQuery コピーを r.js に提供する必要があります。結果として得られる縮小された JS ファイルには、依存関係の一貫性を確保するために jQuery モジュールのコピーが含まれている必要があるからですその結果、ローカルと CDN の両方で jQuery が読み込まれます。(私はこの部分を正しく理解したと思いますか?)

では、どの方法が良いでしょうか?

4

3 に答える 3

6

requirejs doc quoteは、特にjQueryのshim構成を持つスクリプトの使用に関するものです。すべてのスクリプトがAMDモジュールである場合、サードパーティのCDNからベース依存関係を動的にロードすることは問題ありません。

キャッシュヒットはあなたが思うほど高くはありません(Yahooはキャッシュと非キャッシュ状態の調査を行ったと思います)。これは、ロードを別のドメインに依存する必要があることを意味します。

メリットはおそらくアプリによって異なります。プロファイリングを行うと、最良の回答が得られます。たとえば、画像がたくさんあるサイトの場合、画像の読み込みがおそらくより顕著なパフォーマンスの問題になるため、jqueryの戦略はそれほど重要ではありません。

まず、ビルドされたファイルにjQueryを最適化し、すべてにAMDモジュールを使用することから始めます。したがって、CDNに委任する場合は可能です。ただし、requirejsとshim configを使用する場合、shimmedライブラリはdefine()を呼び出さないため、ベースの依存関係をビルドファイルにインライン化する必要があります。依存関係が読み込まれるのを待たず、すぐに利用できるようにします。

于 2012-08-29T17:06:08.563 に答える
6

簡単な答え: 余分な HTTP リクエストと DNS ルックアップを避ける

独自のコピーを使用して、RequireJS にファイルをマージさせたほうがよいでしょう。言い換えれば、余分な http リクエストと DNS ルックアップを避ける方が価値があると言えます。

ユーザーが別のサイトのキャッシュにそのファイルを既に持っている可能性があることは事実ですが、そうではない可能性が高いです。最近別のサイトにアクセスしていたとしても、キャッシュ サイズは一般に十分小さいため、通常のブラウジング セッションで 1 回または 2 回、ユーザーは簡単にキャッシュをいっぱいにすることができます。この場合、古いファイルは破棄されます。

CDNファイルがすでにキャッシュにあるトラフィックのせいぜい1%しか話していないので、恩恵を受けているのはユーザーの1%だけです。ただし、これらのリソースを組み合わせて余分な http リクエストを回避することで、ユーザーの 99% にメリットがあります。逆に言えば、統合しないことでユーザーの 99% を傷つけることになります。これを見る別の方法です。

もう 1 つの考慮事項はモバイル ユーザーです。モバイル ユーザーは遅延がひどいため、追加の http 要求と dns ルックアップの RTT のコストが高くなります。

于 2012-08-27T12:44:25.287 に答える
4

人々がファイルをキャッシュしたという事実だけではありません。ユーザー エージェントは、同じドメインから同時にいくつかのファイルしかロードできません。そのため、CDN から JS ファイルをロードすると、ファイルが同時にロードされるようになります。

これは、ユーザーが既にキャッシュされたバージョンのファイルを持っているという利点に次ぐものです。そのため、一般的なファイル (jQuery JavaScript など) については、常に CDN からロードします。

何らかの理由で CDN がダウンした場合に備えて、いつでもローカル バージョンにフォールバックを追加できます。

ノート

RFC では、ユーザー エージェントは同時に最大 2 つのリクエストを実行する必要があると述べていますが、ほとんどのユーザー エージェントは現在、この仕様を無視しています。SOに関するこの古い (2009) の質問も参照してください。現在、ユーザー エージェントがさらに多くのリクエストを行っていることに驚かないことに注意してください。

于 2012-08-27T12:23:11.540 に答える