Javascript 从对象获取值与从全局值获取值

Javascript 从对象获取值与从全局值获取值,javascript,performance,premature-optimization,Javascript,Performance,Premature Optimization,我知道这是过早的优化,但我只是想知道 需要多长时间才能得到这个值 var objects = { number:10 } console.log(""+objects.number); VS 我只是不知道如何进行基准测试,所以如果我知道我会自己做,但如果这是一个非常糟糕的问题,请不要重复我,告诉我,我会删除这个问题,使用局部值比获取对象值更快 结果差异很大。 请参阅此测试: 多次运行它,您可以看到环绕的结果,而没有确定的结果(至少在Firefox上)。有时访问变量比直接访问对象的属性要

我知道这是过早的优化,但我只是想知道 需要多长时间才能得到这个值

var objects =
{
    number:10
}
console.log(""+objects.number);
VS


我只是不知道如何进行基准测试,所以如果我知道我会自己做,但如果这是一个非常糟糕的问题,请不要重复我,告诉我,我会删除这个问题,使用局部值比获取对象值更快
结果差异很大。 请参阅此测试:


多次运行它,您可以看到环绕的结果,而没有确定的结果(至少在Firefox上)。有时访问变量比直接访问对象的属性要慢,我想你可以假设没有真正的区别。

你真的认为会有区别吗?就像一个循环中的激烈物理游戏,在老款android手机上每秒运行一次,但我不确定。再运行一次。我刚刚得到的对象访问速度提高了16%!了解这背后的原因会很有趣…我从Kroltan做了测试,得到缓存值更快。。。。我认为它们应该与直接值相同。我在chrome上做了测试,直接获取值比直接获取对象更快。我想我会自己使用它,因为它对我来说需要更少的键入:我刚刚添加了一个新的测试,它可能会给我们另一个有趣的启示:如果从对象访问的属性有一个getter,每次访问它时都会调用它,缓存它将缓存getter的返回,提高速度。哈哈哈,我可能会给测试带来一些复杂性,但是,我会尽力解释。属性可以有一个getter,每当有人在该对象中请求该属性时,该函数都会被秘密调用。当我们保存这个调用的结果时,我们不会在每一帧(测试样本)再次调用它,因此给出了一个与局部变量相当的速度。此外,由于大多数浏览器将
object={x:1}
x
去优化为返回
1
的getter,我们得到了一个近似相等的速度值,最后唯一重要的是我们是否缓存它。而且由于Javascript是单线程的(在任何给定的时间都只执行一段代码),因此在将使用它的作用域(函数)中缓存属性值是非常有意义的,并且没有副作用。
var number = 10;
console.log("" + number);