この問題の二つの側面があります。
は、この操作を行うに任意のより良い方法はありますか?
どのようにグラフを描画するかによって大きく異なります。あなたはそれのために何らかのライブラリを使いますか?もしそうなら、おそらく特定のデータ(例えば、配列)を期待しているので、それについてはあまりできません。一方、あなた自身で描画部分を実装している場合は、必要な任意のデータ構造(ここで適切なリストを含む)を使用することができます。
メモリの断片化とArray
パフォーマンス
すべての最初の質問を自問してください:あなたが実際にArray
操作で任意のパフォーマンスの問題を持っているか、これは単なる理論であるのですか?
グラフの描画は、どのアレイ操作よりもはるかに時間がかかります。私は実際に問題がなければ、Array
メソッドのパフォーマンスについて心配するべきではないと思います。 JSエンジンでがArray
であるということは必ずしも配列として実装されているとは限りません。バイナリ検索ツリーやそれを使用する方法によっては、バイナリ検索ツリーやその他のものでもあります。したがって、どの最適化があなたのケースでうまくいくかを予測するのは難しく、状況を悪化させます。
パフォーマンスを向上させる方法はありますか?
はい。しかし、どのように実際に配列を使用するかによって異なります。ライブグラフを描くと想像できます。unshift
/pop
データなどです。 1秒ごとに正確に配列のlength
を知っていますか?それは一定のままでなければなりません。したがって、最初に行うことのできることの1つは、その長さの配列にメモリを割り当てることです。エンジンで最適化するのは簡単なケースなので、将来はunshift
+ pop
を実行すると、メモリが断片化することはありません。しかし、もう一度、それはちょうど推測です。JavaScriptエンジンは私がよりスマートです。より多くのヒントとテクニックは、記事Let’s get those Javascript Arrays to work fastに記載されています。
壊れていないものを修正しようとしないでください。リファクタリングを開始する前に測定し、あまりにも詳しく考える必要はありません。これは時期尚早の最適化と呼ばれ、実際にアプリケーションを実行しているときに配列操作で最適化することは重要ではないということは肯定的です。
実際に配列操作のパフォーマンス上の問題がありますか、これは単なる理論的なものですか?グラフの描画は、どのアレイ操作よりもはるかに時間がかかります。 JavaScriptでの配列は、JSエンジンでは必ずしも標準配列ではないことに気をつけてください。それらは、 'unshift'や' pop'演算を実行するためのリストやツリーとして実装できます。 –
は理論的な質問であり、この操作をすると特にメモリ断片化の問題が気になります...私は他のより良い選択肢を探したいと思います.. – Tim
'unshift'はパフォーマンスがあまり良くなく、' push'なので 'push'と'unshift'と' pop'の代わりに 'shift'を使い、逆に配列を読み込みます。逆の読書もまっすぐな読書よりも速いと信じていますまた、これをチェックしてください.. http://code.stephenmorley.org/javascript/queues/ – Redu