我很好奇修改 JavaScript 内置数组类的不同方式的速度,所以我做了一个小测试:
http://jsperf.com/array-vs-custom-array
这比较了向数组添加删除函数的三种不同方法。使用 Object.create() 添加的 remove() 函数似乎比使用 .call() 或添加到 Array.prototype 的相同函数慢得多(在 Chrome 中约为 90%)。它们都做同样的事情,而且实际上是相同的功能,所以我很好奇为什么会有速度差异。
最佳答案
我的猜测是函数查找时间会增加。
在第一种情况下,您已经查找了remove
的地址,因此调用该函数很简单。
Object.create()
方法必须首先查找 Array.prototype
,然后在新对象的属性中找到它。
最后一个原型(prototype)替换方法会产生原型(prototype)中函数的查找时间。
我不确定如何检验这个假设,但我之前在优化一些 python 代码时见过类似的情况。
关于javascript - 为什么自定义数组比普通版本慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7369854/