JavaScript中的深层对象是否很慢?如果是这样多少

Y. *_*hii 10 javascript performance javascript-objects

简单的问题:在较深的物体上使用浅物体是否有价值?当我编写代码时,我倾向于使用深层对象,因此它易于理解和分类.但我想知道这个自定义是否使我的代码变慢.

我做了一个测试,但我不知道我是否正确地做了.

//building necessary objects
var a = {};
var b;
b = a;
for (var i = 0; i < 100; i++) {
  b["a"] = {};
  b = b["a"];
}
var c = {};

//objects used
//a.a.a. ..(101 "a"s).. .a === {}
//c === {}

//1st test: shallow
var d;
var start = performance.now();
for (var i = 0; i < 1000000000; i++) {
  d = c;
  d = null;
}
var end = performance.now();
console.log('Shallow: ' + (end - start));

//2nd test: deeper
var e;
var start = performance.now();
for (var i = 0; i < 1000000000; i++) {
  e = a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a;
  e = null;
}
var end = performance.now();
console.log('Deeper: ' + (end - start));
Run Code Online (Sandbox Code Playgroud)

结果(ms):

shallow 3229 3304 3246 3253 3277
deep    3375 3343 3247 3193 3248
Run Code Online (Sandbox Code Playgroud)

深层物体的测试时间并不慢,但有时甚至比浅层物体的测试时间更快.尽管结果如此,但我没有足够的信心得出他们的速度相同的结论.两个人之间有什么区别吗?

Luk*_*kas 5

  1. 您正在使用不切实际的代码来测试“真实代码”,这是无稽之谈
  2. 您使用 Date.now() ,它是时间戳的近似值,您应该使用 Performance.now() 来测试 js 速度。目前,即使使用良好的测试代码,也会得到错误的结果。
  3. JS引擎一直在更新。有时深层物体速度很慢,但在过去的几年里,这种情况不再出现了。这是一个老问题了,我什至不记得这些年了,也记不起任何有价值的东西。