javascript - 与自实例化的构造函数相比,使用对象文字是否有性能优势?

标签 javascript performance object

问题

与自实例化的构造函数相比,使用对象文字是否有性能优势?

例子

对象字面量:

var foo = { 
    //... 
};

自实例化构造函数:

var foo = new function () {
    //...
};

最佳答案

是的(对象字面量更快),但它们在实现上有细微的不同1并且代表不同的目标。构造函数形式“必须做更多的事情”,而文字形式也可以进行更高程度的优化——它是一个定义(对一组尚未固定的属性),而不是一系列语句。

尽管 micro-benchmark (这很有趣,谢谢 Arun!)可能会显示一个“慢得多”,这在实际程序中并不重要2,因为在任一构造中花费的相对时间量接近于零。


1 使用构造函数时a prototype must be introduced .对象字面量不是这种情况,因为它具有固定链行为。

Every object created by a constructor has an implicit reference (called the object’s prototype) to the value of its constructor’s “prototype” property.

其他开销工作包括创建新的执行上下文、复制其他属性,甚至检查返回值。 (在发布的案例中,它还必须创建一个新的一次性函数对象,然后才能将 is 作为构造函数使用,它本身添加了一些 additional overhead)。

2 我确信有反例。但对于此类情况,我只能希望该问题已通过识别和消除的所有其他瓶颈进行彻底的基准测试。

关于javascript - 与自实例化的构造函数相比,使用对象文字是否有性能优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18199024/

相关文章:

php - 什么是更快的平面文件或 MySQL RAM 数据库?

jquery - 延迟加载 - $(document).准备好了吗?

ruby - 如何使用 Ruby WIN32OLE 访问 Word 文档中的 TextBox 对象文本

javascript - 如何从API加载数据?

javascript - Web Audio API 和播放音频文件时的实时时间

c++ - 与默认 IF 相比,简写 IF 是否会提高效率?

安卓初始化动画

c++ - 本地对象的范围

javascript - Knockout.js 回发到服务器以更新模型

javascript - 如何查询没有被指向的对象? (例如,尚未标记的帖子)