3

そのため、この js/css バージョン管理スキームを実装しています。ここでは、基本的に js/css ファイルのチェックサムを追加します。私が考えている戦略は、基本的にこのチェックサム値を取得し、ファイルのチェックサムを計算します(これはキャッシュから来ると思われます)。一致する場合、クライアントは最新のファイルを持ち、そうでない場合はクライアントブラウザはその特定のファイルをサーバーから強制的にダウンロードします。このアプローチは正しいですか?また、script タグの src 属性のように、script タグの動作を理解したいと思っていましたが、最初に js ファイルのキャッシュに移動しますか、それとも Web サーバーに直接移動しますか?

ありがとう

4

2 に答える 2

2

Tomasz は頭に釘を打ちました... ただし、もっと簡単な解決策があります :-) ファイルのファイル名をまったく変更しないでください。それらへのリンク、特に「検索」部分を変更するだけです。また、チェックサムは実際には必要ありません。ソース管理システムで増分番号または現在のリビジョン番号を使用することもできます

言い換えれば:

<script src='myFile.js'/>

だろう:

<script src='myFile.someChecksum.js'/>

トマシュが説明したように。代わりに次のようにします。

<script src='myFile.js?x=someChecksum'/>

(チェックサムが変更された場合) ブラウザーは引き続き新しいファイルと見なしますが、毎回ファイル名を変更する必要はありません。リビジョン番号を使用する場合、毎回チェックサムを計算する必要さえありません。必要なのは、次のようなサーバー側のロジックだけです。

<script src='myFile.js?x={{currentRevisionNumber}}'/>
于 2012-08-28T17:55:39.107 に答える
2

実際のシナリオでは、実際にはもっと簡単です。JavaScript ファイルに一意のチェックサムを追加し (ファイル自体は変更しません)、その完全な名前を HTML ファイルで使用します。また、ブラウザがこのファイルをリクエストするときは、ブラウザがこのファイルを「永久.jsに」キャッシュするように、将来のExpiresヘッダー (通常は 1 年) を使用します。現在使用している Web サイトのソースを見てみましょう。

<script src="http://cdn.sstatic.net/js/stub.js?v=aa8b9e2e0673" type="text/javascript"></script>
<link href="http://cdn.sstatic.net/stackoverflow/all.css?v=ffb907d7e663" rel="stylesheet" type="text/css">

(SO は、@machineghostによってここで説明されている手法を使用します)。

ファイルを変更しない限り.js、チェックサムとファイル名は同じで、ブラウザは何もしません。ファイルはキャッシュされており、1 年以内に変更されないと言われました。では、どのように変更しますか?ファイルを変更するたびに、チェックサムが変更されます。ブラウザは別の.jsファイルを認識し、強制的にダウンロードします。前のファイルは役に立ちませんが、ブラウザはそれを 1 年間保持します (気にしません)。

このようにして、積極的なキャッシングと迅速な変更を組み合わせることができます (ブラウザーが古い JavaScript をキャッシュし、新しい HTML を使用するなどの問題はありません)。

script タグの src 属性、最初に js ファイルのキャッシュに移動

はい、この JavaScript ファイルが既にダウンロードされている場合、ブラウザはキャッシュを使用します。これは実際にはもう少し複雑です。前回ヘッダーを返した場合Expires、ブラウザはサーバーにアクセスしません。ヘッダーのみを返したLast-Modifed場合、ブラウザはいわゆる条件付き GETを発行します。サーバーは、ファイルが変更された場合などに新しいコンテンツのみを返します304 Not Modified

于 2012-08-28T17:50:58.673 に答える