V8 разработчик здесь.Первый фрагмент быстрее, потому что new Array(max)
сообщает V8, какой размер массива вы хотите, чтобы он мог сразу же выделить массив нужного размера;тогда как во втором фрагменте с []
/ .push()
массив начинается с нулевой емкости и должен быть увеличен в несколько раз, что включает копирование его существующих элементов в новое резервное хранилище.
https://www.youtube.com/watch?v=m9cTaYI95Zc - хорошая презентация, но, вероятно, следовало бы прояснить, насколько мала разница в производительности между упакованными и дырявыми элементами, и как мало вы должны о ней беспокоиться.Чтобы иметь массив, имеет смысл использовать new Array(n)
, чтобы предварительно выделить его для этого размера.Когда вы не заранее знаете, насколько большим он будет в конце, тогда начните с пустого массива (используя []
или new Array()
или new Array(0)
, не имеет значения) иувеличивайте его по мере необходимости (используя a.push(...)
или a[a.length] = ...
, не имеет значения).
Примечание: ваш тест for for с новым Array () и push "создает массив, который в два раза больше, чемты хочешь.