0

このテストはhttp://jsperf.com/literal-obj-vs-function-objで行い、FF6、Opera 10、IE8ではリテラルが勝ちましたが、 Chrome 13.0.782.112ではFunctionメソッドの方が速いため、どちらが優れていますか使用する方法は?

var A = {
    aa : function(){
        var i, j=[];
        var arr = ['Literal', 'Function'];
        for (i = 0; i < arr.length; i++){
            j[i] = arr[i];
        }
       return j[0];
    }
};
var A1 = A;
var A2 = A1;
A1.foo = ' Test';
alert(A1.aa() + A2.foo);

//Function test
function B(){
    this.bb = function(){
        var i, j=[];
        var arr = ['Literal', 'Function'];
        for (i = 0; i < arr.length; i++){
            j[i] = arr[i];
        }
        return j[1];
    }
}
var B1 = new B();
var B2 = new B();
B.prototype.foo = ' Test';
alert(B1.bb() + B2.foo);
4

5 に答える 5

1

どちらかお好みで。アプリで実際に問題にならない限り、速度が問題になることはありません。あなたがしていることは、私には時期尚早の最適化のように見えますが、それは時間の無駄です。コードを最適化する必要があるまで待ってから、やり直しが必要な部分を最適化します。これは些細なことです。

于 2011-08-22T18:48:12.440 に答える
1

実を言うと、私が見つけた最高のものはミックスです。

function C() {
    var i, j = [],
        foo;

    return {
        bb: function() {

            var arr = ['Literal', 'Function'];
            for (i = 0; i < arr.length; i++) {
                j[i] = arr[i];
            }
            return j[1];
        },
        setFoo: function(val) {
            foo = val;
        },
        getFoo: function() {
            return foo;
        }
    }
}
var C1 = C();
var C2 = C();
C2.setFoo(' Test');
console.log(C1.bb(), C2.getFoo());
于 2011-08-22T18:49:24.303 に答える
0

Chromeは、hidden classesオブジェクトメンバーへのより高速なアクセスを可能にすると呼ばれる最適化を使用します。

この最適化は、オブジェクトがを介して構築された場合にのみ有効になると思いますnew。その結果、を介して構築されたオブジェクトは、を介しnewて構築されていないオブジェクトよりもメンバーアクセスが高速になりますnew

于 2011-08-22T18:48:26.970 に答える
0

ウィキペディアによると、Chromeは市場シェアの約17%を占めています。したがって、リテラルを使用します。

于 2011-08-22T18:48:33.800 に答える
0

違いが問題になるほど集中的に何かをするつもりはないと思います。

関数スタイルのコンストラクターは、プライベート変数のオプションを提供します。これは素晴らしいことです。

于 2011-08-22T19:04:45.267 に答える