测试 "Class"的不同仿真的 Javascript 基准

标签 javascript object closures benchmarking prototype

我读过这样的文章:

  • 使用 prototype 将是最快的,因为声明的函数是共享的。 this article 中解释了更多详细信息与使用“即兴创作”相比,利用 JS native 原型(prototype)将提高性能。

  • 闭包应 perform worse因为它的每次创建都返回一组函数和变量的单独副本。

  • 对象(函数)是一种闭包,但带有 this。具有访问控制(公共(public)/私有(private))。他们是supposed to be better than closures .

  • 对象字面量(看起来像 JSON 的字面量)就像对象一样,但没有隐私感。它们与 JAVA 中的静态方法相当。我没有文章可以引用,我只是为了比较而收录了这个。

我是testing a simple comparison of the 4 methods using jsperf在我继续我的项目之前构建“类”,我期待原型(prototype)获胜。然而,闭包打败了他们。怎么会?这里有一些让步吗?看不见的偏见?

我可能不是 JS 新手,但我对这些优化概念完全陌生,请耐心等待。我还在研究这些东西。

最佳答案

并不是说“闭包应该表现更差”。闭包导致每个对象都获得自己的函数副本。但只要您有足够的内存,就不会导致任何真正的性能问题。如果有的话,闭包甚至可能更快,因为它们不必沿着原型(prototype)链向上寻找属性,它们总是在对象的第一层。

闭包真正的缺点是内存使用,而不是速度。当创建大量对象时,它可能会成为一个问题。

您还必须考虑相关的运行时。不同的 JavaScript 引擎会针对不同的情况进行优化,具体取决于他们认为最重要的内容。

关于测试 "Class"的不同仿真的 Javascript 基准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9270665/

相关文章:

java - 没有找到对象时如何处理返回值

javascript - 将数组中的对象移动到末尾

即使使用匿名函数或绑定(bind),注册 OpenLayers 事件时 JavaScript 闭包也会触发循环内的所有内容

javascript - 在 Firefox 的选项卡中显示 pdf 内容

JavaScript 和 HTML : in two separate files or in a single HTML file?

java - 访问存储在 Arraylist 中的 Arraylist 中的数据 - Java

swift - 为什么我在第二个例子中得到保留圈?

ios - Swift 闭包从函数返回

javascript - 在 react 中获取导入函数的未定义值

Javascript 不适用于单击汉堡包以打开和关闭汉堡包