在JavaScript中,哪种创建具有属性的对象的方法最有效?

时间:2011-12-05 15:24:57

标签: javascript performance object properties

我对JavaScript有点新鲜。我已经在客户端使用它一段时间了,但现在我冒险进入服务器端Javascript。这个问题是关于Javascript对象,关于它们的创建和它们的属性的有效定义。

我已经看过(好几次)出于性能原因,创建一个var o = {};对象现在比var o = new Object();更受欢迎。在向对象添加属性方面的性能是否存在差异?

例如,这种情况之间的表现是否存在差异:

var o = {
  thing1: "yardigooven",
  thing2: "goovenyardi",
};

这种情况?:

var o = {};
o.thing1 = "yardigooven";
o.thing2 = "goovenyardi";

我假设第一种情况是首选,但我想确保在以这种方式编写所有对象定义之前。

感谢。

2 个答案:

答案 0 :(得分:11)

首先,var o = {};var o = new Array();不一样。第一个初始化一个对象,第二个初始化一个数组。 var o = {};var o = new Object();相同。

现在关于使用对象文字而不是之后添加属性的性能。哪一个最快?答案是,我们不在乎,你也不应该。 如果性能存在差异,即使您同时创建了100万个对象,它也会非常小,永远不会产生影响,这种情况不太可能发生。

这称为过早优化,是许多中级程序员的祸根。除非您开始遇到性能问题,否则不要担心优化任何事情。然后使用分析器检测瓶颈在哪里并解决它。只是担心制作你的应用程序。

为了完整起见,here is a test I ran on jsperf。在我的浏览器Chrome 15中,对象文字初始化速度提高了53%。哇,53%,这是巨大的权利吗?除非您将鼠标放在初始化后使用属性的测试的工具提示上,否则您会看到类似

的内容
  

在0.077秒内跑出681,285次。

您的数字可能会有所不同,但您可以观察到,任何标准都认为最慢的方法仍然非常快。我认为可以说两者都足够快,可以用于任何目的。只需使用您喜欢的那个。

答案 1 :(得分:3)

听取别人关于过早优化的建议 - 意味着不要专注于这些实现细节,这些细节在不同的JavaScript解释器实现之间可能会有很大差异。

但是,根据this JSPerf benchmark和一个样本大小(在Chrome / Mac OS X上),对象文字形式(o = {foo:'bar'}很多比设置更快施工后的属性(o={}; o.foo='bar')。