Javascript perf для очистки массива

Я просто посмотрел на это:

http://jsperf.com/array-destroy/32

Я не понимаю, как первый:

arr.length = 0;

Может быть медленнее, чем:

while (arr.length > 0) {
  arr.shift();
}

Кто-то может связать/объяснить, почему?

Ответ 1

В тестовой настройке создается большой массив. Как только начнется тест, массив будет опустошен, и тест повторится. Однако каждый раз после первого запуска теста массив уже пуст. Чтобы выполнить этот тест, вы должны каждый раз создавать новый массив. Попробуйте следующее:

http://jsperf.com/array-destroy/67

Я изменил тест, чтобы каждый раз возвращать новый массив. Результаты ожидаются. splice и length являются самыми быстрыми, поскольку они мгновенно изменяют длину массива без цикла.

Detailed ResultsBar Graph

Ответ 2

При использовании pop() последний элемент в массиве удаляется и что он. При использовании shift() первый массив удаляется, а все остальные элементы повторно индексируются. Чем больше массив, тем дольше это займет.