2009-07-16 15 views
3

クライアントがデータの束を頻繁に(たとえばキーストロークによって)検索する可能性のあるajaxアプリケーションを使用すると、デーモンプロセスによって一定時間に1日に1回または2回サーバー側でデータが更新されます。サーバーを頻繁に訪れることを避けるために、データはxmlファイルに保存されるため、クライアントはページが最初に読み込まれると一度ダウンロードしてから、javascriptを使用してローカルデータファイルからデータを探します。 しかし、ユーザーは変更の直前にページを読み込んでから、ページを更新せずにページを使用してデータファイルを更新することはないため、新しいデータが利用できないことをユーザーに伝え続けることがあります。 この問題を解決するにはどうすればよいですか?キャッシュまたはキャッシュしない

答えて

3

あなたはその時、過去の任意のクライアントの要求が取得されますので、生成されたXMLファイルに適切なHTTPキャッシュヘッダを設定する必要がありますすることができます他の静的コンテンツと同様に、新しいバージョンを作成し、ローカルにキャッシュします。どのようなランタイム

+0

HTTP HEADコールで最後に変更されたヘッダーが取得されます。このヘッダーを使用して、更新が必要かどうかを判断できます。 –

+0

サーバー側のxmlファイルに適切なhttpキャッシュヘッダーを設定するにはどうすればよいですか?これはxmlファイルが動的サーバーコードを通じて提供される必要があることを意味しますか? – user121196

+0

もjavascript経由でHTTP HEADコールですか?詳細を教えていただけますか? – user121196

0

データの読み込みがあまり大きくない場合は、メイン文書にXMLアイランドとしてデータを含めます。いずれかのドキュメント生成(aspx、php、何でも)を作成するか、ロード時に予約されたドキュメントノードを(ajax呼び出しを介して)埋めます。この方法では、ユーザーは常に最新のデータを保持しています。キャッシングについて心配する必要はなく、人生ははるかに簡単です。

大きい場合は、必要に応じてajax呼び出しでそのノードを記入してください。

+0

あなたがxml islandと言うとき、あなたはxmlデータとメイン文書DOMの一部を作るのですか? 私の場合のデータは小さくない(少なくとも1MB) – user121196

+0

このテクニックの要点は、ドキュメントノードのデータを隠すことです。特にXMLを使用して心配する必要はありません。独自の形式を選択します。(XMLは他の多くのフォーマットよりもはるかに冗長です)。しかし、「XML Island」という言葉はよく知られたパターンであり、多くの例につながります。 ... 1 MBのデータは、ほとんどのサーバーが要求されたドキュメントを圧縮するため、最初のドキュメントの一部として配信されるときにはそれほど大きくはありません。 幸運 – CMB

0

明白なオプションの1つは、サーバをポーリングするAJAXを追加することです(x分)。データがリフレッシュする必要がある場合は、ページ上に非ブロックメッセージを明示的に表示するだけで、ユーザーに新鮮なデータが利用可能であることを通知し、ページを更新するためのリンクを提供します。余分なこととして、(x分が経過するのを待つのではなく)新しいデータをチェックしたい場合に、ユーザーがクリックするためのボタンを提供することができます。

HEADリクエストを使用する場合は、最後に変更されたヘッダーを確認するだけで済みます。

0

更新時間は固定されていますか?したがって、ユーザーが更新時間の前にページをすばやく訪問すると、次の更新までの時間などを示すJavaScript変数を設定し、クライアント側のタイマーを実行することができます。

タイマー= { 実行:関数(){ あれば(今+ minuteToUpdate> updateTime - startVisitTime){

 // make ajax request here to update XML file 
    } 
}, 
interval: //you can determine this since this will run in client-side 

}

それは無駄だと呼び出すために強調しているため、このstiuationではないあなたのポーリングを行います毎回サーバー。

あなたはより良いこの実行を支援するために、いくつかのセッション変数を設定し、より正確に

ジャスティン

0

は、更新時間は固定とまれているので、あなたがXMLを果たすとき、そして、また要素やカスタムヘッダーとしてキャッシュの有効期限が含まれ、

...言いましたか。このようにして、ユーザーがXMLアップデートの1分前にサイトを訪問した場合、その1分後の次のリクエストでクライアントのキャッシュを期限切れにするようにコードすることができます。

+0

これは、XMLデータを送信する前に有効期限ヘッダーを送信するサーバーコードによってXMLファイルが提供される必要があることを意味します。 クライアント側から有効期限ヘッダを取得できますか(javascript?)なぜ要素またはカスタムヘッダーとしてキャッシュの有効期限を設定する必要がありますか? – user121196

+0

JavaScriptが使用できるように、キャッシュの有効期限をカスタムヘッダーまたは通常のXML応答の要素として戻す必要があります。そして、はい、JavaScriptでAJAXリクエストからヘッダーを取得できます。 –

関連する問題