4

JavaScript/jQuery を使用した高度なアプリケーション開発にますます夢中になっています。私は JavaScript 言語についてもっと学び、より高度な機能のいくつかに飛び込もうとしています。記事のこのセクションを読んだとき、メモリ リークに関する記事を読んでいたところです。

JavaScriptはガベージ コレクション言語です。つまり、オブジェクトの作成時にメモリがオブジェクトに割り当てられ、オブジェクトへの参照がなくなると、ブラウザによってメモリが解放されます。JavaScript のガベージ コレクション メカニズムに問題はありませんが、一部のブラウザーが DOM オブジェクトのメモリの割り当てと回復を処理する方法と矛盾しています。

これにより、私のコーディングの習慣について考えさせられました。しばらくの間、サーバーに送信するリクエストの数を最小限に抑えることに重点を置いてきましたが、これは良い習慣だと感じています。でもたまには行き過ぎないかなーと思ったり。私は、JavaScript 言語に伴う効率性の問題やボトルネックについてまったく知りません。

私は最近、レッカー会社向けの収監管理アプリケーションを作成しました。jQuery UI ダイアログ ウィジェットを使用して、データグリッドに特定のチケット データを入力しました。さて、これは表面的には非常に単純に聞こえますが、ここでは大量のデータが渡されます。

(そして質問ですが...ドラムロールをお願いします...)

次の各オプションの長所/短所は何なのか疑問に思っています。

1)特定のチケットに対して1 つのリクエストのみを作成し、永久に に保存しDOMます。モーダル ウィンドウを表示/非表示にするだけで、チケットごとに 1 つのリクエストのみが送信されます。

2)チケットがオープンされるたびにリクエストを行い、チケットがクローズされると破棄します。


私の自然な傾向は、チケットをDOM- に保存することでしたが、アプリケーションがリセットされずに長時間実行されると、最終的に大量のメモリを占有し始めるのではないかと心配しています (そうなるでしょう)。

私は本当に、これら2つのオプションの両方の長所/短所を探しているだけです(または= Pについて聞いたことのないきちんとしたもの)。

4

4 に答える 4

4

ここでの解決策は、問題の詳細によって異なります。「正しい」答えは、ページを開いたままにしておく時間の長さ、DOM 要素のサイズ、および要求の待ち時間によって異なります。さらに考慮すべき点がいくつかあります。

  • 最新のn 個のアイテムのみをキャッシュに保持します。これは、アイテムを短期間だけ再表示する可能性が高い場合にうまく機能します。
  • DOM 要素の代わりに各要素のデータを保存し、各ディスプレイで DOM を再構築します。
  • DOM または変数ストレージの代わりに、HTML5 ストレージを使用してデータを保存します。これには、複数のページ リクエストにわたってデータを保存できるという利点があります。

キャッシュ戦略では、いつキャッシュを無効にして更新データを再リクエストするかを検討する必要があります。戦略によっては、複数の編集者による競合を処理する必要があります。

最善の方法は、最も単純な方法を使用して開始し、複雑さを追加して必要な場合にのみ速度を向上させることです。

于 2010-12-01T22:38:40.180 に答える
2

3 つ目の方法は、チケットに関連付けられたデータを JS に保存し、モーダル ウィンドウが呼び出されたり閉じられたりするときに DOM ノードを作成および破棄することです (ここでは、jQuery テンプレートが自然な解決策になるかもしれません)。

とはいえ、ネットワーク トラフィックを避ける主な理由はユーザー エクスペリエンスにあるようです (ネットワークは常に RAM よりも低速です)。しかし、ユーザーが直感的にデータの読み込みを伴うものである場合、毎回リクエストを行うことで実際にそのエクスペリエンスが低下するわけではありません。

于 2010-12-01T22:37:22.777 に答える
0

2番が一番いいと思います。そうすれば、チケットを開いた後にチケットが変更された場合、その変更はチケットを2回目に開いたときに表示されます。

于 2010-12-01T22:36:44.743 に答える
0

DOM 操作でトリガーされる再描画/リフローの数の重要な要因の 1 つです。増分ごとに再描画/リフローが発生するため、コンテンツの変更を構築して一度に挿入する方が、増分的に行うよりもはるかに効率的です。

これをよりよく理解するには、http ://www.youtube.com/watch?v=AKZ2fj8155I を参照してください。

于 2010-12-01T22:40:22.653 に答える