gpt4 book ai didi

javascript - crockford 的 JavaScript 构造函数模式真的应该更快吗?

转载 作者:可可西里 更新时间:2023-11-01 01:43:09 24 4
gpt4 key购买 nike

我最近尝试为一个经常创建的值对象优化一些代码。 (三维向量,fwiw)

我尝试的一件事是将构造函数从匿名方法工厂模式转换为普通的 JavaScript 构造函数。

这导致了 severe performance penalty这让我感到惊讶,因为在我的 last question 中强烈推荐使用"new"和普通构造函数关于 JavaScript 构造函数/工厂模式的主题。

很可能是我的测试过于简单,或者完全错误,或者是最近在 chrome 的 JavaScript 引擎中进行的性能优化的结果,或者以上所有原因。无论如何,我真的很想知道为什么我的“优化”导致性能下降 - 以及 - 最重要的是:我的 jsperf 测试运行是否有任何明显的问题?

最佳答案

您的测试之间的主要区别是:

  • {} is way faster than new Object ,这表明 new 只是比使用 {} 慢。 ([]new Array也是如此。)

  • 您的测试产生不同的结果:make 工厂函数的结果不是 Make 对象。构造的 Make 有一个原型(prototype),由所有 Make 对象共享。您的工厂函数的结果只是一个裸对象,并且在其原型(prototype)链中有一个原型(prototype)(Object.prototype),而 Make 构造的对象有两个(Make.prototype,然后是 Object.prototype)。

    我做了一个fork of your test ,具有一个实际返回 Make 对象(而不是简单的 Object)的工厂函数,使用非标准的 __proto__ 属性,它是比使用构造函数慢得多。 IE 不支持 __proto__,但 Firefox 和 Chrome 的结果看起来非常确定。

关于javascript - crockford 的 JavaScript 构造函数模式真的应该更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14125373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com