これは特にあいまいな点のように思えるかもしれませんが、私はJavascript言語全体の基礎を改善しようとしています(より具体的には、その最良かつ最も効率的な方法)。
http://jsperf.com/で理論をテストしているときに、奇妙な結果が出ました。
次のように定義された2つの「同一の」プロトタイプがあるとします。
Object1
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;
}
}
Object1は、次の単純な操作を実行するときに、Object2よりも一貫した(限界の場合:〜3%)速度の利点があります。
var o = new Object1();
var offset = o.centerOffset();
&
var o = new Object2();
var offset = o.centerOffset();
ここで自分でテストを実行できます。OSX10.6.8でChrome25を使用しています。
私が知りたいのはこれです:
- このパフォーマンスの違いの理由は何ですか?
- このパフォーマンスは、JavaScriptのベストプラクティスを示していますか?
よろしくお願いします。
編集:回答に感謝します-一部の人が言及しているように、私の側でさらにテストすると、この問題はブラウザ(またはJavascriptコンパイラ固有)であることが示唆されているようです。Safari、IE 10、Firefoxでさらにテストしました。IE 10とFirefoxはどちらも、違いがないほど近い結果を出しました。Safariは、Object2での操作をObject1での操作よりもわずかに速く実行しました(平均で約2%)。ただし、その場合のパフォーマンスの違いはかなり大きいように見えるので、外れ値(その他)が何であるかを知りたいと思います。