【问题标题】:In JavaScript, which method of creating an object with properties is most efficient?在 JavaScript 中,哪种创建具有属性的对象的方法最有效?
【发布时间】:2012-01-13 07:54:04
【问题描述】:

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

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

比如这种情况在性能上有什么区别吗:

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

这种情况呢?:

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

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

谢谢。

【问题讨论】:

  • 你真的在担心性能吗?
  • 解析地图声明时可能会有性能损失,但我只是推测
  • 你听说过 jsperf.com 吗?

标签: javascript performance object properties


【解决方案1】:

首先,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 次。

您的数字可能会有所不同,但您将能够观察到,以任何标准衡量,被认为最慢的方法仍然运行得相当快。我认为可以肯定地说两者对于任何目的都足够快。只需使用您喜欢的那个。

【讨论】:

  • 抱歉,打错了。我的意思是new Object();。我应该对我的问题进行另一次通读。感谢您的输入。我不想让自己担心性能,以至于它会对我的开发过程产生负面影响,但我认为养成习惯以有效地替代常见例程是有帮助的。
  • @Aejay 不过最后真的没关系。我只是建议您使用您喜欢的样式,或者出于速度以外的其他原因(例如清晰度)选择一种样式。我,对于以上所有内容,我更喜欢字面符号。另外,它是最快的:)
【解决方案2】:

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

但是,基于this JSPerf benchmark 和 1 的样本大小(在 Chrome/Mac OS X 上),对象字面量形式 (o = {foo:'bar'}) 比在构造后设置属性 ( o={}; o.foo='bar')。

【讨论】:

    猜你喜欢
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2011-10-14
    相关资源
    最近更新 更多