我正在开发一款JavaScript游戏,我希望尽可能降低内存使用率。
因此我将一些对象再次设置为null,因此可以收集垃圾。
我读了一个article建议避免像Array.splice()
这样的函数,因为这会创建一个新的数组,它会分配新的内存。
所以我实现了一个带有自己函数的JSFiddle,删除了特定索引处的元素并将所有元素移到后面,因此长度将设置为length -= 1
。这仅影响现有阵列,而不是创建新阵列:
使用的功能代替拼接:
deleteElem = function(arr, el) {
var index = arr.indexOf(el);
if (index > -1) {
var len = arr.length - 1;
for (var i = index; i < len; i++) {
arr[i] = arr[i + 1];
}
arr.length = len;
}
}
我的功能的JSFiddle有时更快,有时更慢...... 我是否应该更多地关注更好的性能和更糟的内存,或更好的内存和更差的性能?
还有哪些其他方法可以避免使用Array.splice
?
答案 0 :(得分:0)
您需要了解jsperf如何运行您的代码。它不会在每次运行代码时运行设置 - 每个设置的代码运行数百或数千次。
这意味着您使用空数组来调用99.999999%的调用,因此无法测量任何有用的内容。
你至少可以通过像http://jsperf.com/splice-vs-own-function/2那样测量它来获得一些感觉但是你需要注意50次数组的分配可能会减弱差异,因此你的方法实际上比基准可以显示。