我正在搞乱 JavaScript 的推送和弹出功能的性能。
我有一个名为 arr
的数组。
当我运行这个时:
for (var i = 0; i < 100; i++) {
for (var k = 0; k < 100000; k++) {
arr.push(Math.ceil(Math.random() * 100));
arr.pop();
}
}
我得到的时间为 251.38515999977244 毫秒(我正在使用 Performance.now() 函数)。
但是当我运行自定义推送和弹出时:
Array.prototype.pushy = function(value) {
this[this.length] = value;
}
Array.prototype.poppy = function() {
this.splice(-1, 1);
}
for (var i = 0; i < 100; i++) {
for (var k = 0; k < 100000; k++) {
arr.pushy(Math.ceil(Math.random() * 100));
arr.poppy();
}
}
时间为 1896.055750000014 毫秒。
谁能解释一下为什么它们之间存在如此巨大的差异?
对于那些担心时差的人。我运行了这个测试 100 次并计算了平均时间。我这样做了 5 次,以确保没有任何异常时间。
最佳答案
因为内置函数是由浏览器使用的任何语言(可能是 C++)编写并编译的。自定义函数用 Javascript 编写并进行解释。
一般解释型语言比编译型语言慢得多。人们通常不会在 Javascript 中注意到这一点,因为在大多数情况下,您只在人类交互之间执行几行 JS(这始终是最慢的部分)。
像您在此处所做的那样在紧密循环中运行 JS,突出了差异。
关于javascript - 为什么自定义函数比内置函数慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31480536/