ユーザーがシングル ページ アプリケーションの最新バージョンを使用していることを確認する最善の方法は何ですか? ユーザーが最新のページ リソース(JS+CSS)を取得するためにctrl+F5を押す必要がないようにするにはどうすればよいですか?
3 に答える
これが私の解決策です:
PHP:
ob_start(function($data) {
return preg_replace_callback(
"(/(?:js|css|img)/.*?\.(?:js|css|png|jpg|gif))",
function($m) {
if( file_exists(substr($m[0],1))) return $m[0]."/t=".filemtime(substr($m[0],1));
else return $m[0];
},
str_replace(array_keys($rep),array_values($rep),$data)
);
});
.htaccess:
RewriteRule (.*)/t=[0-9]+$ /$1
これにより、特定のタイムスタンプがすべての画像、スタイル、およびスクリプトに自動的に追加されます。つまり、変更時間です。その後、.htaccess
再び剥ぎ取ります。
これは、これらのファイルのいずれかが更新されるたびに、キャッシュされたバージョンが事実上即座に無効になることを意味します。すべてのブラウザで完全に動作することがテストされています。
静的ファイルへのすべての参照の前にビルダー番号を付けます。
代わりに、ビルド番号である 123/js/app.js
を指す必要があります。/js/123/app.js
デプロイごとに、ビルド番号を増やします。
app.js
次に、パスに偽のフォルダーがある場合にサーバーが検出できるように、いくつかの書き換えを行う必要があります。
もちろん、静的ファイルは、誰かがブラウザーを閉じて再度ページにアクセスするか、F5 キーを押すまで再ロードされません)。
これを解決するには、AJAX を使用してリクエストapp.js
し、変更されているかどうかを確認します。
$.ajax({
type:"GET",
url:'/js/123/app.js',
cache:true,
ifModified:true,
success:function(data,textStatus,jqXHR){
console.debug(data); // Returns undefined when response is 304 Not Modified
}
});
静的コンテンツ フォールドの前にビルド番号を付けることは、そのための優れた方法です。ビルド後に常に最新のものをプルするようにするには、その手法を、ビルド番号を考慮して静的コンテンツの場所で html をレンダリングするサーバー側タグと組み合わせる必要があります。もちろん、100% Angular パラダイムを実行している場合、サーバー側タグのようなものは存在しないため、ソリューションの純度に違反し、ユーザーがログイン後に到達する JSP ページまたは同様のものを用意する必要があります (ようこそページ) を作成し、静的コンテンツを参照します。必要に応じて、サーバー側のコードをそこで終了し、その時点から純粋な静的レイアウトの世界に住むことができます。