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



我读过这样的文章:

  • 使用CCD_ 1将是最快的,因为声明的函数是共享的。本文详细解释了与使用"即兴创作"相比,使用JS原生原型将提高性能。

  • 闭包的性能应该更差,因为每次创建它都会返回一组函数和变量的单独副本。

  • 对象(函数)是一种闭包,但具有this。具有访问控制(公共/专用)。它们应该比闭包更好。

  • 对象文字(看起来像JSON的文字)的行为就像对象,但没有隐私感。它们与JAVA中的静态方法相当。我没有文章可以参考,我只是把这个放进去比较一下。

在继续我的项目之前,我正在测试在构建"类"时使用jsperf的4种方法的简单比较,我期待着原型的成功。然而,闭包轻而易举地击败了它们。怎么会这样?这里有互让吗?看不见的偏见?

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

"闭包的性能应该更差"并不是既定的。闭包使每个对象获得自己的函数副本。但是,只要您有足够的内存,就不会导致任何实际的性能问题。如果有什么不同的话,闭包可能会更快,因为它们不必沿着原型链找到属性,它们总是位于对象的第一级。

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

您还必须考虑有问题的运行时。不同的JavaScript引擎会针对不同的情况进行优化,这取决于他们认为什么是最重要的。

不同之处在于闭包在作用域链上查找,属性在内部原型链上查找。尽管它们都是基本的对象属性查找(一个使用激活对象,另一个使用普通对象),但可能只是因为您测试的UA对其中一个的优化程度高于另一个。

附言:在IE 8中,原型在示例中速度更快。

最新更新