10

最大n年分のデータを含むJSON結果を返すasp.netmvcアプリケーションがあり、Javascriptチャートにレンダリングされます。

(パフォーマンスの観点から)優れたユーザーエクスペリエンスを実現するために、クライアント側でJSONデータをキャッシュできるかどうかを確認し、ユーザーが日、週のビューなどのさまざまなパラメーターを使用してグラフをクリックしたときに、サーバーにアクセスすることなく、同じJSONデータが照会されます。

データをクライアント側とサーバー側のどちらでキャッシュするか、グラフの切り替えごとにデータベースに直接アクセスするかについて、キャッシュのベストプラクティスについて、誰かが最善の決定を下すのを手伝ってもらえますか?

前もって感謝します。

4

3 に答える 3

10

まず、データベースはどこにありますか?Gigabit Lanを使用してローカルネットワークにいる場合は、それをヒットすることは問題になりません。ただし、それはインターネット上で真実ではありません。人々は、特にモバイルで帯域幅が限られているため、HTTPコールを制限する必要があります。また、HTTP呼び出しが少ないと、サーバー上の負担が少なくなります。

いくつかのヒントを次に示します。

  • ページネーションを考慮する

    「2年分」を読み込むと、100ページ以上の論文のように、たくさん想像します。一度にすべてをロードするのではなく、データのページ分割を検討してください。これにより、帯域幅とキャッシュスペースを節約できます (制限されている場合)。

    方法: サーバー スクリプトで、クライアントの要求に応じてデータを分割します。LIMITクエリで使用して、SQL でページネーションを作成するのは非常に簡単です。ロジックはまるでstarting_item = (page_needed - 1) * items_per_page

  • JSON化データ

    ネットワークとの間でデータを転送するために JSON を使用します。軽量であるだけでなく、構造もしっかりしています。後で解析して保存するのが簡単になります。

    方法: PHP には、配列を JSON 文字列に変換する json_encode 関数があります。あなたのフレームワークには同様の機能があると思います。文字列をページにエコーしてJSON.parseから、JSON 文字列から JS オブジェクトに変換するために使用します。JSON メソッドは最新のブラウザーにネイティブに組み込まれていますが、古いブラウザーに対応する必要がある場合、Crockford にはそれを解析するためのライブラリがあります。

  • よく知られたストレージ フレームワークを使用する

    ページ全体のキャッシュに永続的なストレージが必要な場合、私は最近、localStorage をブラウザーで利用可能なものに抽象化するPersistJSに出会いました。また、これは LZW の JS 実装です。localstorage は文字列を使用してデータを保存し、5 ~ 10 MB の制限があるため、手元に置いておいてください。

    方法: JSON.stringifyPersistJS を使用してデータを文字列に変換し、保存します。次に、取得のために文字列を取得し、次を使用して解析しますJSON.parse()

  • 必要な時だけ電話する

    何かが変更、追加された場合、または何かがそこにない場合にのみ、キャッシュシステムがサーバーを呼び出すようにします。データがそこにある場合、なぜサーバーを呼び出す必要があるのでしょうか?

  • キャッシュを同期する

    If you fear of stale data, then have some AJAX sync your cache system by using some method of live data fetching as described in this wiki about Comet.

The last two points depend on your cache framework. But BackboneJS allows it's models and collections to sync to the server, which have the same functionality I mentioned.

于 2012-05-15T13:19:53.420 に答える
0
  1. データベースからデータを取得し、サーバーで静的ファイルとして保存します。.css または .png 拡張子を付けます。(ブラウザはスタイルシートと画像ファイルを自動的にキャッシュします。)
  2. 非表示フィールドにタイムスタンプを付けてデータ ファイル名を保存します (ファイルに変更があった場合に、サーバーから最新のファイルを確実にロードするため)。
  3. AJAX を使用してサーバーからファイルをロードします。最初はサーバーからロードされますが、次回はブラウザのキャッシュからロードされます。
  4. JSON.Parse() を使用して AJAX リクエストの結果を解析できます。
于 2016-07-12T07:23:28.877 に答える