これは特にあいまいな点のように思えるかもしれませんが、私はJavascript言語全体(より具体的には最高の効率的なプラクティス)を身に付けようとしています。JSプロトタイプ関数をディクショナリよりも速く別々に定義するのはなぜですか?
http://jsperf.com/で理論をテストしながら、私はいくつかの奇妙な結果を思い付いた:
たちは次のように定義された2つの "同一" のプロトタイプを、持っているとします
オブジェクト1
var Object1 = function() {}
Object1.prototype.defaults = {
radius: 400,
up: 1
}
Object1.prototype.centerOffset = function() {
return this.defaults.radius*this.defaults.up;
}
Object2
var Object2 = function() {}
Object2.prototype = {
defaults: {
radius: 400,
up: 1
},
centerOffset: function() {
return this.defaults.radius*this.defaults.up;
}
}
オブジェクト1一貫した(マージナル場合:〜3%)があります。
var o = new Object1();
var offset = o.centerOffset();
&
var o = new Object2();
var offset = o.centerOffset();
あなたがテストを実行することができ、以下の簡単な操作を実行するときObject2に以上の速度の利点をあなた自身here。私はOSX 10.6.8でChrome 25を使用しています。私が知りたいのですがどのような
はこれです:
- このパフォーマンスの違いの理由(複数可)とは何ですか?
- このパフォーマンスは、javascriptのベストプラクティスを示していますか?
ありがとうございました。
編集:ありがとうございました - いくつか述べているように、私のところでさらにテストすると、この問題はブラウザ(またはJavascriptコンパイラ固有)であることが示唆されているようです。私はSafari、IE 10、Firefoxでさらにテストしました。 IE 10とFirefoxはどちらも同じ結果を得た。 SafariはObject2の操作をObject1の操作よりもわずかに速く(平均で約2%)実行しました。その場合のパフォーマンスの差がかなりあるように見えるので、私は外れ値(その他)が何であるか知りたいと思います。
これはたぶんV8のいくつかの奇妙なことを示しているに過ぎません。 – delnan
私は反対の結果Firefoxを実行していた –
魅力的なので、そのコンパイラ固有...私はいくつかのより多くのブラウザテストを行い、報告します。 –