データのAjaxを使用してクライアントのキャッシュを使用して管理する

データは、クライアントのキャッシュを使用して管理するアプリケーションのパフォーマンスには、クライアント側とサーバー側に実装されているキャッシュに依存します。場合は、キャッシュのパフォーマンスが低下すると、アプリケーションのパフォーマンスが低下します。場合は、キャッシュの効果は、アプリケーションが有効になります。明らかにされている大規模な程度に、私は言ったが、私は、どんなにうまく場合、悪いのキャッシュ戦略を持って、アプリケーションのパフォーマンスが低下しますが、コードの他の部分に書かれた強調しておきたい。戦略キャッシュの4種類実装することができます:

  

HTTPの検証:ここで、URLについては、クライアントとブラウザの情報を共有するハンドシェークプロトコルを使用してキャッシュを形成します。キャッシュこのフォームは、会話のカウンタは減少しませんが、どれだけのデータを減らしている会話の中で送信されます。このアプローチを使用する場合は、定期的に変更し、クライアントとサーバー間のネットワークのブロードバンド接続の品質にはデータがあります。

クライアント側のみの:ここでは、クライアント側のキャッシュの情報をキャッシュするのを形成します。通常は、ときにキャッシュサーバー、またはクライアントとサーバーの間の場合は、ラウンドトリップをサポートしていない、このアプローチを使用しすぎるくらいの時間が必要です。

サーバー側のみの:ここでは、サーバー側のキャッシュの情報をキャッシュするのを形成します。常に適切な情報については、サーバーに対してクエリを実行するクライアント。キャッシュこのフォームは一般的で、非効率的である場合にのみ、クライアントとサーバーの間の物理的なネットワークの距離を最小限に(例えば、ブラウザとサーバーが使用する必要があると同じコンピュータ上で)です。

クライアント側とサーバー側:ここで、両方のサーバーとクライアントのキャッシュの情報を、これらの各キャッシュの戦略では、使用可能な帯域幅の場合、受信されたデータの種類について考える必要があるキャッシュの一般的な理想的な方法だと、どれだけ離れて、クライアントからはサーバーです。追加の懸念は、プロキシは、クライアントとサーバーがキャッシュの情報の間に座っている。

単一の要求は、クライアントキャッシュの実装効果的かつ効率的なキャッシュは、クライアントのプログラミングモデルの変更はない。したがって、クライアント側のキャッシュを最高の非同期クラスを変更することによって実装されます。そのたびにいくつかのコードが非同期を使用して、キャッシュがチェックされている場合は、応答が参照することが確認すでにご利用いただけます。応答が可能ですし、コードがすぐに応答を受け取ります。次の例にしてキャッシュを使用するようにフックします。

 ソース: /クライアント/スクリプト/ jaxson / common.js)(ヴァールインスタンス=この;場合(!this.settings)(新しいエラーをスローする("設定")で定義されていません;))の場合(this.xmlhttp.readyState Asynchronous_call(リクエスト機能! = 4&&this.xmlhttp.readyState!= 0)(を続行できません")("現在アクティブなリクエストの新しいエラーがスロー;)this.xmlhttp.open(request.action、request.url、このthis.settings.username真。settings.password);("オープニングを要求"+ request.url)globals.info; request.headersで(defHeader)(this.xmlhttp.setRequestHeaderの場合(request.headers)((defHeader、request.headers [defHeader] );))の場合(this.settings.headers)(this.settings.headersで(defHeader)(this.xmlhttp.setRequestHeader用(defHeader、this.settings.headers [defHeader]);))= this.settings.url request.url; 場合(this.cache.processAndBreakBeforeRequest(this.xmlhttp、 リクエストthis.settings)==がtrue)( 要求がキャッシュからglobals.info("作成データ"+ instance.settings.url); を返す; this.xmlhttp.onreadystatechange =関数()(場合(instance.xmlhttp.readyState == 4)(globals.info要求("受信データ"+ instance.settings.url); 場合(instance.cache.processAndBreakAfterRequest(instance.xmlhttp、 リクエストinstance.settings)==がtrue)( を返す; 試し((instance.xmlhttp);)(電子)(globals.errorHandler(電子);)))((request.data);)(電子)(グローバルキャッチthis.xmlhttp.sendしようとキャッチinstance.settings.onComplete。 ErrorHandlerの(オ);))

非同期のコードは非常に何を第4条に発表されたようです。新しい部品を太字で表示されます。非同期にキャッシュフックは簡単です:前に送信される場合は、要求をキャプチャする必要があるとし、応答をキャプチャ時に到着します。があるので、キャッシュのコードには多くの方法があります。非同期キャッシュを実装していません。賢い戦略、および1つの非同期が選んだ、別のメソッドへの呼び出しを委譲することです。要求をキャプチャする場合には、this.cache.processAndBreakBeforeRequestメソッドが呼び出されます。 XMLHttpRequestを要求し、非同期のインスタンスの設定は、メソッドに渡されます。このメソッドはtrueを返しますし、すぐに戻っAsynchronous_call。即時復帰は、通常、データがキャッシュされますが、示しても要求を停止するために使用することができます。

応答をキャプチャする場合には、onreadystatechangeの実装内では、instance.cache.processAndBreakAfterRequestメソッドへの要求です。 3つのパラメータは、メソッドに渡されます:XMLHttpRequestのインスタンスは、要求、および設定を行います。これらの3つのパラメータに基づいて、キャッシュに保存時点で取得する応答データを格納することができます。場合は、processAndBreakAfterRequestメソッドがtrueを返す場合、応答データのonCompleteメソッドに送信されていません。一般的に言えば、このことはしないだろうが、それが必要である場合は、HTTPの検証キャッシュを実装している。

キャッシュのタイプを実装するお客様のニーズに依存します。のいずれかのクライアント側のキャッシュまたはHTTPの検証をキャッシュすることができます。株式相場アプリケーションは、単一の要求は、クライアントのキャッシュのコンテキストで作成されます。 1つの要求は、クライアントキャッシュは、キャッシュ要求ごとに1回と2番目の物理的なHTTP要求を行うことはありません。これは、株式相場の例の場合の罰金、これは歴史的な相場データを決して変更されます。場合は、データを変更した場合、古いデータが示すようにする必要があるだろう。このようなケースでは、HTTPの検証キャッシュをより適切になります。次のコードは単一の要求は、クライアントのキャッシュの実装です。

 ソース: /クライアント/スクリプト/ CacheController(/ common.jsヴァール_cache = jaxson:新しいArray()、)関数CachedProcessAndBreakBeforeRequest(要求の設定)(場合(request.action ==""のGET)(ヴァールOBJの= CacheController._cache [設定を。url];場合(OBJの!=がnull)(ヴァールfakeXMLHttp =(ステータス:200、statusText:obj.StatusText、はresponseText:obj.ResponseText、responseXMLを:obj.ResponseXML)て((fakeXMLHttp);)settings.onCompleteキャッチ(電子)(globals.errorHandler(オ)はfalse)trueを返す;))falseを返す;)関数CachedProcessAndBreakAfterRequest(XMLHTTPのリクエスト、の設定)(場合(xmlhttp.status == 200&&request.action ==は"GET")を返す(CacheController._cache [settings.url] =(状況:xmlhttp.status、StatusText:xmlhttp.statusText、はresponseText:xmlhttp.responseText、responseXMLを:);)はfalseを返しますxmlhttp.responseXML;)

1つの要求は、クライアント側でキャッシュするときだけは、HTTPと呼ばれ、これは完全に論理的なもののGETが動作する場合は、キャッシュするかどうかは、POST、DELETE、またはPUTのキャッシュすることができます。答えはの質問は、イエスができますが、懇願しないインテリジェント。場合は、キャッシュへのPUTしていたたとえば、同じURLにGETを使う場合は、サーバーを照会する必要はありませんが呼び出されます。トラブルには得ることができる、この戦略があればチャンスは、複数のユーザーのPUTを実行されます。しかし、その場合は、JavaScriptのスレッドと、クエリのデータは、PUT HTTPの検証を使用して送信されたステータスをスピンオフするには、最適化されます。それはあなたの好みに合わせてキャッシュをチューニングすることができますを実現することが重要だ。あなたも、キャッシュなど、それがプリロードURLの場合、特定のURL要求されている調整することができます。

1つの要求は、クライアント側のキャッシュは、インテリジェントではなく、オブジェクトの場合は、キャッシュ内に存在を返します。それ以外の場合は、HTTPサーバーを照会します。前に、非同期の物理的な要求を行うCachedProcessAndBreakBeforeRequest関数が呼び出されます。関数が呼び出される場合は、URLの存在は、CacheController._cacheオブジェクトにテストされます。場合は、URLが存在しない場合は、返されると、そのURLを実行する必要がありますことを示す場合はfalse。場合は、URLが存在しない場合、キャッシュされたオブジェクトが存在する。キャッシュされたオブジェクトの存在することは、サーバーを呼び出すために必要ではない、という意味のコードのonCompleteメソッドを直接呼び出すことができます。キャッシュされたオブジェクトとの唯一の問題がないことをご利用いただけますXMLHttpRequestのインスタンスです。

この問題を解決するにXMLHttpRequestの偽のインスタンスを作成することです。 JavaScriptを使用すると、偽のオブジェクトを作成するのは簡単だ。どこで物事をトリッキーには、メソッドは、このように利用されていませんが定義されていないです。なぜなら、オブジェクトの場合、キャッシュされたオブジェクトが作成されて格納されていないヘッダを利用されていません。繰り返しますが、実際には、ヘッダーは、キャッシュに格納されていないが、このXMLHttpRequestの単純な実装でハイライトされます。 fakeXMLHttp変数とは、偽のXMLHttpRequestオブジェクトを表すコードのsettings.onCompleteメソッドを呼び出すために使用されます。ためsettings.onCompleteと呼ばれ、キャッシュは、非同期のHTTPリクエストを作成しないことを示すfalse値を返します。

キャッシュのコードを、他の部分は、キャッシュされたオブジェクトのエントリを追加するために使用されているCacheProcessAndBreakAfterRequest関数です。キャッシュへのオブジェクトのほか、200のHTTPステータスコードに制約されてHTTPのGET。場合は、オブジェクトをキャッシュし、その後は、XMLHttpRequestのプロパティ、ステータス、statusText、はresponseTextとresponseXMLを保存されて追加されます。場合は、偽のXMLHttpRequestオブジェクトの完全な実装を作成すると、HTTPヘッダに保存したい場合は、CacheProcessAndBreakAfterRequest関数でコードを配置する。代替として、あなたは、XMLHttpRequestのインスタンスへの参照を保存するに誘惑される場合があります。場合は、非同期のインスタンスが別の要求のためのXMLHttpRequestのインスタンスを再利用できるようにデータを保存されない問題は、キャッシュは、XMLHttpRequestのインスタンスを制御しているので、参照を保存することはありません。したがって、必ずあなたのキャッシュを実装する場合は、キャッシュに保存される必要のある情報をコピーする必要があります。

HTTPの検証クライアントのキャッシュの実装1回のリクエストが実行されており、保存されたキャッシュの実装では、それを再度実行することは決して簡単です。 URLについてはデータがない変更は、この許容されます。しかし、URLは、データの変更など、リアルタイムの株式相場の場合と同様であり、単一の要求は、クライアントのキャッシュを完全に容認されています。そのような状況では、単一の要求は、クライアントのキャッシュのHTTPの検証を使用するように拡張する必要があります。

HTTPの有効期限のキャッシング悪いアイデア(一般)です するときは、インターネットインフラのキャッシュを管理させているHTTPの検証を使用しています。 2つのモデル:HTTPの有効期限、およびHTTP検証されます。を使用する場合 HTTPの有効期限場合、そのコンテンツの時間を一定期間有効であることを言っている。これは、データが有効なHTTPヘッダーの言うことに依存する時間の期間。それは一般的には良いアイデアは、HTTPの有効期限モデルを使用するのではなく、それを使用する方が良い HTTPの検証 と記述したコードは、インターネットのインフラを支援する、その作業を行う。理由は、HTTPの有効期限モデルの問題であることを理解するには、次のシナリオを考えます。あなたのホストニュースのフィードをaWebサイトを運営しているという。 Webサイト上の反復的なトラフィックを削減するには、HTTPキャッシュを有効にすると30分の有効期限を割り当てます。 (有効期限を任意の値を例示の目的で使用されます。)したときにブラウザの一部のコンテンツは、コンテンツの次のバージョンをダウンロード30分で利用できるようになりますこれを意味する。 30分の待機期間を示す30分のニュースを劇的に変更するには、悪い考えです。

は一部のコンテンツがダウンロードされたクライアントは、次に30にニュースが1分サイクルの取得に制限されます。もちろん、クライアントを無視したり、キャッシュを空には、最新の情報のダウンロードが生じる。場合は、クライアントは、常にキャッシュを空にすると、クライアントは、常に最新のニュースを取得しますが、変更がないことが、コンテンツのダウンロードのコストがかかる。リソースコストを、誰も驚きはありませんので、常に最新のコンテンツをキャッシュは一切使用して意味を得る。 Javaサーブレットのようなスクリプト/ JSPやASP.NETページではしばしば、この戦略を使用し、管理者がWebサイトを管理する理由は、パフォーマンスの問題が不思議。

記事は、ソニアLandeを提出


免責事項:弊社のウェブサイトは、この資料の内容については責任を負いません。 Webarticles無料の情報リソースです。
重要: この記事は、"使用して、データの管理クライアントのキャッシュ"自動ソフトウェアによって翻訳されたAjaxを利用した。大変申し訳ございませんが発生した可能性があります任意のスペルミスを感じている。お客様のご理解いただき、ありがとうございます。


Online: 256 users browsing the articles directory