Удалить элемент массива без сплайсинга ()

Я занимаюсь разработкой игры на 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?

1 ответ

Вы должны понять, как jsperf выполняет ваш код. Он не запускает установку каждый раз, когда запускает ваш код - код запускается сотни или тысячи раз для каждой установки.

Это означает, что вы используете пустой массив для 99,999999% вызовов и, следовательно, не измеряете ничего полезного.

Вы можете, по крайней мере, получить какой-то смысл из этого, измерив его следующим образом: http://jsperf.com/splice-vs-own-function/2 однако вы должны заметить, что выделение массива в 50 раз может притупить различия и что ваш метод, следовательно, на самом деле намного быстрее, чем может показать тест.

Другие вопросы по тегам