0

私はこの質問を見てきましたが、それは私の現在の問題/尋問に適合していないと言わざるを得ません.

シナリオ:

ユーザーが (Ajax 呼び出しを介して) 正常にログインすると、/app にリダイレクトされ ( document.location.href)、基本的な HTML が CSS および JS ファイルと共に送信されます。

問題:

現在、appname-2.3.3.js のような縮小された JavaScript および CSS ファイル名にバージョン番号を付けており、クエリ文字列のバージョン番号を追加して、新しいバージョンで更新されるようにしています。

<script src="/js/app/appname-2.3.3-min.js?1207040740" language="javascript" type="text/javascript"></script>

新しいログイン後に新しいバージョンをプッシュすると、ファイル名とクエリ文字列の番号が変更されても、ブラウザーは最後のバージョンをキャッシュしたままにします。新しい静的ファイルを取得するには、CTRL+F5 でページ全体を更新する必要があります。

質問:

a) 新しいログイン ユーザーがそれぞれ適切なバージョンを使用できるようにする最善の方法は何ですか? 私の推測では、/app HTML ページはキャッシュであり、ログイン後にリダイレクトするときにクエリ文字列の値をそこに置く必要があるかもしれません。しかし、それはログインメソッドを呼び出すjavascriptファイルが「正しい」バージョンである必要があるなどの問題につながります.

/app ページをキャッシュしないようにブラウザーに指示するには、コントローラーで HTTP ヘッダーを指定する必要がありますか? そのページから静的ファイルがキャッシュされていないことを意味しますか?

ほぼ毎週のように新しい更新があり、キャッシュはまだ必要です。

b)あなたの観点から、すでにログインしているユーザーに、新しいバージョンが更新され、ページを更新する必要があることを警告する優れたユーザーエクスペリエンスの方法は何ですか. ユーザーの知覚から「許容できる」ものですか。

参考までに、このアプリは ASP.NET MVC 3 上に構築されています。

お時間いただきありがとうございます/入力

4

1 に答える 1

1

これを行うために使用できますwindow.applicationCache。ほとんどの人は、Application Cache を問題の反対側から考えます: クライアントでデータをキャッシュするにはどうすればよいでしょうか? ただし、キャッシュ マニフェスト ファイルが変更されると、CACHEセクション内のすべてのファイルが更新され、サーバーのキャッシュは完全に無視されます。また、クライアント側のキャッシュの利点も得られます。

これにより、バージョン番号とクエリ文字列を使用してブラウザーを更新する必要がなくなります。

に追加manifest="cache.manifest"<html>ます。cache.manifest何をキャッシュするかを定義するために使用するファイルの名前です。任意の名前を付けることができますが、実際には mine と呼んでいcache.manifestます。

<html lang="en" manifest="cache.manifest">

次に、Web サーバーの MIME タイプが次のように.manifest設定されていることを確認します。

テキスト/キャッシュマニフェスト

次に、という名前のファイルを作成cache.manifestし、アプリのルートに配置します。セクションの下に、CACHEキャッシュする (またはこの場合は更新する) ファイルを配置します。セクションの下に、NETWORKキャッシュしたくないファイル、または単に*「その他すべて」のファイルを置きます。

リリースをプッシュするたびに、キャッシュ マニフェストのバージョン番号を変更します。ファイルの変更は機能しますが、バージョン番号はこれに最適なメカニズムです。

CACHE MANIFEST
#ver 1.0.0

CACHE:
app.html
app.css
app.js

NETWORK:
*

次に、これをスクリプトの先頭onloadまたは同等のものに入れてください。これを最初にコードに追加すると、最初の更新では更新が行われず (この関数が使用できないため)、2 回目の更新で更新されることに注意してください。最初の更新後、期待どおりに動作します。

function updateVersion( event ) {

    window.applicationCache.removeEventListener( 'updateready', updateVersion, false );

    if ( window.applicationCache.status == window.applicationCache.UPDATEREADY ) {
        //perhaps notify user here
        window.applicationCache.swapCache();
        window.location.reload();
    };

};

if ( window.applicationCache ) { 
    window.applicationCache.addEventListener( 'updateready', updateVersion, false ); 
};
于 2012-07-05T09:36:36.673 に答える