1

これが賢明かどうかについて、アドバイスが必要です。サイト データの大部分を AJAX リクエストで読み込んでいます。ロード時間とサーバー呼び出しを節約するために、グローバル オブジェクトにロードされたすべてのデータを保存し、ユーザーがページを再度選択した場合にそのデータをリサイクルしています。

サイト全体を 1 つのオブジェクトにキャッシュするのが賢明かどうか疑問に思いました。

var page = ['level 1','level 2','level 3','level 4'];
var mysiteobj = [];
if (page[0] == 'level 1')
   if (!mysiteobj['level 1'])
      $.ajax(/*load data*/).done(function(data){ mysiteobj['level 1'] = data; /*display data*/ });
   else /*display mysiteobj['level 1']*/
   if (page[1] == 'level 2')
      if (!mysiteobj['level 1']['level 2'])
         $.ajax(/*load data*/).done(function(data){ mysiteobj['level 1']['level 2'] = data; /*display data*/ });
      else /*display mysiteobj['level 1']['level 2']*/
 ...etc

...などなど。かなり奇妙な表記法を明確にするために、「レベル 1」はユーザーが検索する可能性のあるすべての地域、「レベル 2」はユーザーが検索する地域内のすべての部門、「レベル 3」は部門内のカテゴリです。 「レベル 4」は、地域の部門のカテゴリにリストされている製品またはエントリであるとします。

現在、私の方法は、すべての地域を含むオブジェクトがあり、2 番目のオブジェクトは新しい地域が読み込まれるたびに新しい部門リストで上書きされ、3 番目のオブジェクトはカテゴリを保持し、4 番目のオブジェクトは私のリスト/製品を保持します。

これが理にかなっている場合は、アドバイスしてください。簡単に言えば、オブジェクトが扱いにくくなってブラウザーが動かなくなる前に、どのくらいの大きさのオブジェクトを作成できるかということです。

4

2 に答える 2

2

まだロードされていない場合は、必要に応じてデータをロードしないでください。

たとえば、レベル 1 をロードできます。

次に、ユーザーがレベル 2 を選択すると、まだそこにない場合はそれをロードして続行します。

したがって、すでにロードされているものを保持することができますが、時間がかかる場合は、データを取得していることを伝えるだけで済みます。

個人的には、ロード リクエストがあることをユーザーに示して、ユーザーが何が起こっているかを把握できるようにします。

サイト全体をプリロードするのは無駄です、IMO。

于 2012-04-04T01:28:24.430 に答える
0

大規模なデータセットを返す ajax リクエストを作成することは決して賢明ではないことを考えると....

このデータを Redis/Memcached サーバーに保存し、必要なものを正確にキャッチする JavaScript 関数を作成できると思います。その量のデータをグローバル変数に入れて、ユーザーにその代償を払わせるのは賢明ではありません。

于 2012-04-04T01:35:06.473 に答える