【发布时间】:2013-01-02 16:17:15
【问题描述】:
我最近尝试为经常创建的值对象优化一些代码。 (一个三维向量,fwiw)
我尝试的一件事是将构造函数从匿名方法工厂模式转换为普通的 JavaScript 构造函数。
这导致了 severe performance penalty 让我感到惊讶,因为在我的 last question 关于 JavaScript 构造函数/工厂模式的主题中非常推荐使用“新”和普通构造函数。
很可能是我的测试过于简单,或者完全是错误的,或者是最近在 chrome 的 JavaScript 引擎中进行的性能优化的结果,或者以上所有原因。无论如何,我真的很想知道为什么我的“优化”会导致性能下降——最重要的是:我的 jsperf 测试运行是否有任何明显的问题?
【问题讨论】:
-
克罗克福德对我来说是最快的 ~50%
-
@Zaz: 2 件事...1) 克罗克福德是否声称他的方法更快?我认为这只是它避免了全局变量,因此“更安全”。 2) 你确定你展示的东西是 Crockford 推荐的吗?我在考虑更多关于此页面上最后一个示例的内容...javascript.crockford.com/prototypal.html...if 我错了(可能)你能把我链接到你从哪里得到这个,因为我目前正在重读“The好零件”
-
您正在比较两件不做同样事情的事情,这两者都不是 Crockford 的对象构造函数。
-
@Mathletics:没有理由比较两个相同的代码位。除了已经提到的构造性能差异之外,所介绍的两种技术之间存在哪些行为或性能差异?
-
@ScottSauyet 这个问题表明他正在测试 Crockford 的构造函数;比较直接设置
prototype与使用new关键字。创建对象的两种方法,但肯定不是“相同的代码位”。整个问题都是关于施工性能的,但提供的测试并不能代表我认为 OP 认为他在问的问题。
标签: javascript performance constructor