一个简单的问题:在较深的物体上使用浅物体有好处吗?
在编写代码时,我倾向于使用深层对象,以便易于理解和分类。但是我想知道这个习惯是否会使我的代码变慢。

我已经做了测试,但是我不知道我做得是否正确。

//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));


结果(毫秒):
shallow 3229 3304 3246 3253 3277
deep    3375 3343 3247 3193 3248

较深物体的测试时间并不慢,但有时甚至比浅物体的测试时间还要快。
尽管有结果,但我不足以得出结论,他们的速度相同。
他们两个之间有什么区别吗?

最佳答案

  • 您正在使用不切实际的代码来测试“真实代码”,这是废话
  • 您使用Date.now()近似于时间戳,并且应该使用performance.now()测试js速度。当前,即使具有良好的测试代码,您也会得到错误的结果。
  • JS引擎一直在更新。有时深层物体的速度很慢,在最近的x年中已经不再是这种情况。这个问题太老了,我什至不记得岁月了,也没有办法用谷歌搜索出任何有值(value)的东西。
  • 关于javascript - 深度对象在JavaScript中会变慢吗?如果有的话,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46047145/

    10-09 03:58