1

私の Grails アプリでは、jquery を使用しています。必要なページにjqueryを含めます

<g:javascript library="jquery"/>

JavaScript ライブラリを変更する場合は、すべてのページを更新する必要があります。これをレイアウトに含めることができることはわかっていますが、すべてのページにライブラリが必要なわけではないので、無駄に思えます。

デフォルトのjavascriptライブラリがどうあるべきかを1か所で指定し、それがjquery(またはそれが何であれ)であることを指定せずにそのデフォルトのものをすべてのページに含める典型的な方法はgrailsにありますか?

4

2 に答える 2

3

ほとんどのブラウザはJavaScriptライブラリなどを大量にキャッシュするため、ライブラリインクルードをレイアウトに配置する方が、個々のページに配置するよりもおそらく優れています。ブラウザが行う大量のキャッシュは、ユーザーがサイト全体(または少なくともブラウジングセッション)に対してサーバーからライブラリを1回だけロードすることを意味し、レイアウトで処理することにより、メンテナンスの負荷を大幅に削減します(ほのめかされた)

一般に、JavaScriptライブラリは高度にキャッシュされている必要があり、多くの場合、 Googleのように頻繁に使用されるCDNからJavaScriptライブラリを取得することをお勧めします。「ローカル」(つまり、サーバーから)ライブラリは、CDNプロバイダーがダウンし、ブラウザーがライブラリにアクセスできない場合にのみ要求されます。(これがどのように行われるかについては、HTML5Boilerplateプロジェクトを見てください)

そのため、ライブラリをレイアウトページに配置することによるパフォーマンスへの影響が最小限なることを心配する必要はありません。ライブラリによく使用されるCDNを使用しない場合でも、今日人々が実際に使用しているブラウザは、JavaScriptライブラリを1回だけロードし(最初のページにそれが含まれます)、残りの部分にはキャッシュされたコピーを使用します。あなたのサイトのページの。

つまり、一言で言えば、レイアウトページに配置して、心配する必要はありません。これは最初のページのロード時にのみ要求され、それ以降のすべてのロードのキャッシュから取得され、コードベースはDRYerになります。

于 2012-04-12T13:27:27.833 に答える
1

指定したファイルを選択的にロードする外部 JS ファイルを作成することもできます。このようなもの:

//FILENAME: jselector.js
if ( [conditions] ) {
  var fileref=document.createElement('script');
  fileref.setAttribute("type","text/javascript");
  fileref.setAttribute("src", filename); //reference your Jquery file here
  document.getElementsByTagName("head")[0].appendChild(fileref);
}

次に、このファイルへの参照 ( jselector.js) を必要な各ページに配置します。

<script type="text/javascript" src="jselector.js"></script>

jQuery ファイルが変更された場合は、この 1 つの外部 JS ( jselector.js) を更新すると、すべてのページが自動的に新しい jQuery を指すようになります。

于 2012-04-12T13:31:52.853 に答える