|
|
1
64
这是一个有趣的问题,所以我运行了一些非常简单的测试(我应该重新启动浏览器来清除内存,但我没有;把这个值多少钱)。至少在Safari和Firefox上,
真的很遗憾,因为我真的很讨厌用
[编辑]非常感谢@Kevin,他指出了我以前的代码是错误的,这大大提高了报告的速度
|
|
|
2
32
我猜这取决于你想要创建的对象的类型。我和Andrew做了一个类似的测试,但是使用了一个静态对象,静态对象轻而易举地就赢了。下面是测试:
此测试是对我在以下位置找到的代码的修改: 结果: IE6:关闭时间:1062,原型时间:766,静态对象时间:406 IE8:关闭时间:781,原型时间:406,静态对象时间:188
Safari:关闭时间:152,原型时间:12,静态对象时间:6
我们得到的教训是 需要实例化同一个类中的许多不同对象,然后将其创建为静态对象就可以轻而易举地获得成功。所以仔细想想你真正需要什么样的课程。 |
|
|
3
6
结论:这证实了本文中其他人的发现。如果您不断地创建对象,那么原型机制显然更快。如果代码将大部分时间花在访问对象上,那么模块模式会更快。如果您对内存使用很敏感,那么原型机制会减少每个对象约360字节的内存使用量。 |
|
|
4
3
直观地说,在原型上创建函数会更高效、更快:函数只创建一次,而不是每次创建一个新实例。
然而,当它的时候会有一个轻微的性能差异
接近
函数。什么时候?
因此,在实例上创建属性将导致访问时间稍微加快—但这可能只是非常深层的原型层次结构的问题。 |
|
|
5
2
我们需要将对象的构造和用法分开。在原型上声明函数时,它在所有实例之间共享。在构造函数中声明函数时,每次创建新实例时都会重新创建函数。有鉴于此,我们需要分别对构造和使用进行基准测试,以获得更好的结果。这就是我所做的,我想和你们分享结果。这个基准不测试施工速度。
从这些结果我们可以看到原型版本是最快的(4ms),但是闭包版本非常接近(7ms)。您可能仍然需要为您的特定案例设定基准。
附:我用安德鲁的回答作为参考。使用相同的循环和符号。 |
|
|
6
1
the Version 23 of this test 它有一个有缺陷的原型(变量X),它只是一次又一次地返回完全重写的原型对象,当我创建测试时,这个原型仍然比我的“真实原型”测试慢。 不管怎样, 答案是什么 :除非我的测试有缺陷,否则它表明真正的原型是最快的。当忽略实例化时,它胜过或至少等于静态对象。实例化和私有变量的赋值都要慢得多。我没想到私有变量会这么慢。 我用jQuery.extend 在和之间,它和直接分配的速度差不多。当然,扩展超出了测试本身。至少这是一种避免编写烦人的“.prototype.”部件的方法。 |
|
|
7
1
高分辨率浏览器性能API测试这里的测试都没有利用 performance API 对于高分辨率测试,所以我写了一个,它将显示许多不同场景的当前最快结果,包括2个比大多数运行中的任何其他答案都快的结果。
|
|
|
8
0
我敢肯定,只要实例化对象,它的速度会更快,占用的内存也会更少,这一点毫无疑问,但我认为javascript引擎需要遍历对象的所有属性,以确定调用的属性/方法是否是该对象的一部分,如果不是,则检查原型。我不是100%确定,但我假设它就是这样工作的,如果是这样的话,那么在某些情况下,如果你的对象添加了很多方法,只实例化了一次并且大量使用,那么它可能会慢一点,但这只是一个假设,我没有测试任何东西。 但最后,我还是同意,作为一般规则,使用原型会更快。 |
|
|
9
-3
实际上,结果与我们预期的不同——访问原型方法的时间比访问完全附加到对象的方法(FF测试)的时间要快。 |
|
Sweepy Dodo · JSON lite的格式化 9 月前 |
|
|
giantjenga · 优化整数向量到二进制向量的转换 10 月前 |
|
Zegarek · Postgresql递归查询未提供预期结果 11 月前 |
|
|
Joe · 为什么这两个查询之间的性能存在如此大的差异? 1 年前 |
|
tic-toc-choc · 在`dplyr中高效使用列表进行过滤` 1 年前 |