2012-04-04 9 views
1

これが賢明であるかどうかについてのアドバイスが必要です。主にAJAXリクエストを通じてサイトデータをロードしています。ロード時間とサーバーコールを節約するために、グローバルオブジェクトにロードされたすべてのデータを保存し、ユーザーがそのページを再び選択した場合にそのデータをリサイクルします。ロードされたすべてのデータを1つのJavascriptオブジェクトに格納

私は等々、一つのオブジェクト、例えば:

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番目のオブジェクトがカテゴリを保持し、製品。

これが意味をなさない場合は、アドバイスをお願いします。私は、単純化された質問は、あなたがオブジェクトが扱いにくくなり、ブラウザを駄目にする前に、どれだけ大きなオブジェクトを作ることができるかということですね。

答えて

2

まだロードされていない場合は、必要に応じてデータをロードするだけではどうでしょうか。

はたとえば、ユーザーがその場合ではない既にそこに、レベル2の負荷を選択した場合には、レベル1次に

ロードし、続けることができます。

既にロードされているものを保持することができますが、データを取得していることを知らせるだけです。時間がかかる場合は、ロードすることを理解することがあります。

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

サイト全体を事前にロードすることは無駄です。それは大規模なデータセットを返すことが賢明メイクAJAXリクエストことはないことを考えると

+0

ページやユーザーがアイドル状態のときにすべてを「プリロード」できます。ページ1をブラウズするときのように、他のページをバックグラウンドで読み込みます。 – Joseph

+1

@Joseph - あなたはできるが、ユーザーには何のメリットもないかもしれない多くの通話を行っている。もし彼らがモバイルデバイスにいて、帯域幅を払っているのであれば問題になるだろう。また、これは、ユーザーがレベル2の1つの部分だけを見て、次にレベル2からのすべてをロードし、多数が使用されないときにダウンするとメモリを使い果たします。 –

+0

良い点があります。私はモバイルについては決して考えなかった。 – Joseph

0

....

私はあなたがRedisの/ memcachedサーバへの格納、このデータをすることができると思うし、正確に何をしたいキャッチjavascript関数を作ります。その量のデータをグローバル変数に入れて、ユーザーがそれを支払うようにするのは賢明ではありません。

+0

それは私が言ったことです。これは、ユーザーがすでに1つのグローバルオブジェクトにロードしたデータをキャッシュします。これが賢明かどうかわかりません。オブジェクトのサイズには制限がありますか?代わりに別々のオブジェクトを作成したり、オブジェクトにデータを上書きできるようにしました(つまり、すべてをキャッシュしないという意味です)。 – philtune

関連する問題