0

我正在开发一个 JavaScript 游戏,我希望尽可能降低内存使用率。因此,我再次将一些对象设置为 null,以便它们可以被垃圾收集。我读了一篇文章,它建议避免使用类似的函数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

4

1 回答 1

0

您需要了解 jsperf 如何运行您的代码。它不会在每次运行代码时都运行设置 - 代码会为每个设置运行数百或数千次。

这意味着您对 99.999999% 的调用使用了一个空数组,因此没有测量任何有用的东西。

您至少可以通过像这样http://jsperf.com/splice-vs-own-function/2那样测量它来了解它,但是您需要注意,分配 50 次的数组可能会削弱差异和因此,您的方法实际上比基准测试显示的要快得多。

于 2014-05-22T12:57:18.210 回答