2011-09-10 19 views
1

私はビルトイン配列クラスのJavaScriptのを修正するのさまざまな方法の速度について興味があったので、私は少しテストをした:カスタムアレイがバニラバージョンより遅いのはなぜですか?

http://jsperf.com/array-vs-custom-array

これは、アレイに削除機能を追加することの3つの異なる方法を比較します。 Object.create()で追加されたremove()関数は、.call()と同じ関数よりも遅く、またはArray.prototypeに追加されています(Chromeでは約90%)。彼らはすべて同じことをし、実際には同じ機能なので、私はなぜ速度の違いがあるのか​​不思議です。

答えて

0

私の推測では、関数の検索時間が加算されます。

最初のケースでは、すでにremoveのアドレスを検索しているので、関数を呼び出すのは簡単です。

Object.create()メソッドは、最初にArray.prototypeを探し、新しいオブジェクトのプロパティでそれを見つける必要があります。

最後のプロトタイプの置換方法では、プロトタイプの関数の参照時間が発生します。

私はこの仮説をテストする方法はわかりませんが、いくつかのPythonコードを最適化する前に、このようなものを見ました。

+0

興味深い..私は、作成した後にアレイ上でadd removeを設定するだけで、ミントの例を含むようにテストを修正しました。これは、チョコレートのObject.create()メソッドと最も速く機能的には同じですが、欠点は.removeが列挙可能になるようです。http://jsperf.com/array-vs-custom-array/3 – notlion

+0

また、私は関数呼び出しが最初に直近のオブジェクトを見て、プロトタイプで_then_という印象を受けました。チョコレートとバニラは同じではないはずですか? Hrm .. – notlion

+0

あなたがまだこのテストに興味がある場合、私は問題の一部があなたが時間を過ごしたセクションにあまりにも多かったと思う。プッシュコールをテスト設定に移動すると、削除のパフォーマンスは3つのタイプすべてで同じになります。 http://jsperf.com/array-vs-custom-array/4 – myeeshen

関連する問題