5

多くのデータを維持および操作する JavaScript モジュールがあります。私は 4 つの大きな構造体を持っています。それぞれが基本的に配列のオブジェクトのオブジェクトのオブジェクトです。そして、それらには多くのデータがあります。ユーザーが何かを削除したり更新したりする場合、これらの構造のそれぞれを確認し、構造を確実に変更して変更を反映させる必要があります。一部の構造では、ユーザーの操作によっては、どの「リーフ」オブジェクトを変更する必要があるかわからないため、すべてを反復処理する必要があります。

変更が発生したときにこれらの大きな構造を操作する代わりに、それらを無効にして生データから再構築することができます。それが私の質問です:

パフォーマンスの観点から、Javascript では、既存の (大きな) データ構造をループして変更するか、単に生データから構造を再構築するのがより最適でしょうか?

答えは「場合による」かもしれませんが、a)大量のデータを想定しています。b) そのデータが頻繁に変更されると仮定します。

4

2 に答える 2

1

申し訳ありませんが、あなたがこの答えを期待していないことは知っていますが、「状況によって異なります」:-)しかし、私があなたに与えることができる最善の答えは、まったく同じ問題に直面したときに私がしたことだと思います。巨大なスーパーオブジェクトで特定の操作を実行するのにかかる時間を測定します。さまざまなレベルの情報エントロピーの平均時間測定値を取得しました。最速のソリューションは、構造をrawから再構築することでした。私はこれをInternetExplorerで特に気づきました。おそらくIEはループでうまく機能せず(私は推測しています)、スーパーオブジェクトのトラバースはそれを再構築するよりもかなり遅くなりました。したがって、スーパーオブジェクトの構造だけでなく、javascriptエンジンにも依存する可能性があります。

しかし、繰り返しになりますが、それは私の場合です。簡単なテストベンチを実装することをお勧めします。それほど時間はかかりませんが、最後に良い結果を得ることができます;-)

編集

補遺と同じように、サーバー側でスーパーオブジェクトを作成し、それをJSONオブジェクトとしてブラウザーに送り返すと、結果が改善されるかどうか疑問に思います。あなたの場合にそれが可能かどうかはわかりません。コマンド(挿入、削除、名前変更など)を受信するある種のAJAXアクセス可能なPHPスクリプトを実装すると、新しいJSONオブジェクトがブラウザーに返され、オブジェクトのみが解析されます(おそらく高速操作??)

于 2012-08-08T16:31:54.023 に答える
0

ここで適用できるかどうかはわかりませんが、v8 の実装に関するwingolog.org のブログ投稿を思い出します。

Ed.: Vyacheslav Egorov は、V8 が保持しているのは実際には AST ではなく関数ソースであると述べています。必要に応じて再解析します。理にかなっています。Lars Bak がビデオで、ソースは存在する中で最もコンパクトな IR であると言っていたことを思い出します。

基本的に、v8 が JavaScript をコンパイルするとき、生データ (ソース コード) のみを保持します。この場合、メモリ フットプリントがパフォーマンスに最も影響を与えるからです。

于 2012-08-08T16:13:12.510 に答える