jsperf が壊れているため、この質問はほとんど無効です。何らかの理由で結果が歪められます。独自のマップ実装(整数に基づくもの)を作成していたときに、個人的に確認しました。
これら 2 つの方法にまったく違いはありません。
ところで、これは同じ構文で空のオブジェクトを作成する簡単な方法だと思います。
var EmptyV2 = function() { return Object.create(null); };
私は、これら 3 つのメソッドをいくらでも作成する時間を出力する小さな独自のテストを作成しました。
ここにあります:
<!DOCTYPE html>
<html>
<head>
<style>
html
{
background-color: #111111;
color: #2ECC40;
}
</style>
</head>
<body>
<div id="output">
</div>
<script type="text/javascript">
var Empty = function(){};
Empty.prototype = Object.create(null);
var EmptyV2 = function() { return Object.create(null); };
var objectCreate = Object.create;
function createEmpties(iterations)
{
for(var i = 0; i < iterations; i++)
{
var empty = new Empty();
}
}
function createEmptiesV2(iterations)
{
for(var i = 0; i < iterations; i++)
{
var empty = new EmptyV2();
}
}
function createNullObjects(iterations)
{
for(var i = 0; i < iterations; i++)
{
var empty = objectCreate(null);
}
}
function addResult(name, start, end, time)
{
var outputBlock = document.getElementsByClassName("output-block");
var length = (!outputBlock ? 0 : outputBlock.length) + 1;
var index = length % 3;
console.log(length);
console.log(index);
var output = document.createElement("div");
output.setAttribute("class", "output-block");
output.setAttribute("id", ["output-block-", index].join(''));
output.innerHTML = ["|", name, "|", " started: ", start, " --- ended: ", end, " --- time: ", time].join('');
document.getElementById("output").appendChild(output);
if(!index)
{
var hr = document.createElement("hr");
document.getElementById("output").appendChild(hr);
}
}
function runTest(test, iterations)
{
var start = new Date().getTime();
test(iterations);
var end = new Date().getTime();
addResult(test.name, start, end, end - start);
}
function runTests(tests, iterations)
{
if(!tests.length)
{
if(!iterations)
{
return;
}
console.log(iterations);
iterations--;
original = [createEmpties, createEmptiesV2, createNullObjects];
var tests = [];
for(var i = 0; i < original.length; i++)
{
tests.push(original[i]);
}
}
runTest(tests[0], 10000000000/8);
tests.shift();
setTimeout(runTests, 100, tests, iterations);
}
runTests([], 10);
</script>
</body>
</html>
すみません、ちょっと固いです。index.html に貼り付けて実行するだけです。このテスト方法は、jsperf よりもはるかに優れていると思います。
ここに私の結果があります:
|createEmpties| 開始: 1451996562280 --- 終了: 1451996563073 --- 時間: 793
|createEmptiesV2| 開始: 1451996563181 --- 終了: 1451996564033 --- 時間: 852
|createNullObjects| 開始: 1451996564148 --- 終了: 1451996564980 --- 時間: 832
|createEmpties| 開始: 1451996565085 --- 終了: 1451996565926 --- 時間: 841
|createEmptiesV2| 開始: 1451996566035 --- 終了: 1451996566863 --- 時間: 828
|createNullObjects| 開始: 1451996566980 --- 終了: 1451996567872 --- 時間: 892
|createEmpties| 開始: 1451996567986 --- 終了: 1451996568839 --- 時間: 853
|createEmptiesV2| 開始: 1451996568953 --- 終了: 1451996569786 --- 時間: 833
|createNullObjects| 開始: 1451996569890 --- 終了: 1451996570713 --- 時間: 823
|createEmpties| 開始: 1451996570825 --- 終了: 1451996571666 --- 時間: 841
|createEmptiesV2| 開始: 1451996571776 --- 終了: 1451996572615 --- 時間: 839
|createNullObjects| 開始: 1451996572728 --- 終了: 1451996573556 --- 時間: 828
|createEmpties| 開始: 1451996573665 --- 終了: 1451996574533 --- 時間: 868
|createEmptiesV2| 開始: 1451996574646 --- 終了: 1451996575476 --- 時間: 830
|createNullObjects| 開始: 1451996575582 --- 終了: 1451996576427 --- 時間: 845
|createEmpties| 開始: 1451996576535 --- 終了: 1451996577361 --- 時間: 826
|createEmptiesV2| 開始: 1451996577470 --- 終了: 1451996578317 --- 時間: 847
|createNullObjects| 開始: 1451996578422 --- 終了: 1451996579256 --- 時間: 834
|createEmpties| 開始: 1451996579358 --- 終了: 1451996580187 --- 時間: 829
|createEmptiesV2| 開始: 1451996580293 --- 終了: 1451996581148 --- 時間: 855
|createNullObjects| 開始: 1451996581261 --- 終了: 1451996582098 --- 時間: 837
|createEmpties| 開始: 1451996582213 --- 終了: 1451996583071 --- 時間: 858
|createEmptiesV2| 開始: 1451996583179 --- 終了: 1451996583991 --- 時間: 812
|createNullObjects| 開始: 1451996584100 --- 終了: 1451996584948 --- 時間: 848
|createEmpties| 開始: 1451996585052 --- 終了: 1451996585888 --- 時間: 836
|createEmptiesV2| 開始: 1451996586003 --- 終了: 1451996586839 --- 時間: 836
|createNullObjects| 開始: 1451996586954 --- 終了: 1451996587785 --- 時間: 831
|createEmpties| 開始: 1451996587891 --- 終了: 1451996588754 --- 時間: 863
|createEmptiesV2| 開始: 1451996588858 --- 終了: 1451996589702 --- 時間: 844
|createNullObjects| 開始: 1451996589810 --- 終了: 1451996590640 --- 時間: 830