2013-08-02 4 views
2

Есть ли повышение производительности для предопределения длины массива Javascript при нажатии элементов в этот массив?Предопределение длины массива в Javascript

Например, предположим, что вы делаете это:

var item1 = "apple", 
    item2 = "orange", 
    item3 = "sports car"; // Because I said so, that's why. 

var myArray = []; // Empty array with initial length of 0 

myArray.push(item1); 
console.log(myArray.length) // 1 

myArray.push(item2); 
console.log(myArray.length) // 2 

myArray.push(item3); 
console.log(myArray.length) // 3 

В приведенном выше коде длина туАггау пересчитывается на каждом толчке. В качестве альтернативы;

var item1 = "apple", 
item2 = "orange", 
item3 = "sports car"; 

var myArray = Array(3) // Assume we already know exactly how many items will be added 
myArray[0] = item1; 
console.log(myArray.length) // 3 

myArray[1] = item2; 
console.log(myArray.length) // 3 

myArray[2] = item3; 
console.log(myArray.length) // 3 

Мой вопрос заключается в следующем, когда вы явно присвоить значение ранее существовавшего слот в массиве длина свойство этого массива еще переоценены. Если это не так, уменьшает ли этот процесс более быстрое распределение массива?

Само собой разумеется, что это скорее теоретическое упражнение, чем реальная проблема реального мира.

+1

Некоторые люди делают тесты по очень близкому вопросу: http://stackoverflow.com/questions/1295584/most-efficient-way-to-create-a-zero-filled-javascript-array – Thilo

+0

Матричные литералы быстрее, потому что вам не нужно вызывать конструктор (или запускать дополнительную функцию), но я не уверен в вашем конкретном вопросе. Я сомневаюсь, что это делает разницу. – elclanrs

+0

Я бы предположил, что установка длины заранее может ускорить вставку позже. –

ответ

1

Согласно this JSPerf, предопределяющая длина - это быстрее, совсем немного.

Следует отметить, что синтаксис new Array() не считается наилучшей практикой. Если вам абсолютно необходимо, чтобы сжать каждый последний бит производительности, подумайте об этом. В противном случае сделайте жизнь легкой для вас и всех разработчиков, которые касаются вашего кода, используйте [].

+0

Это не совсем сравнение яблок с яблоками, так как ваш второй пример не использует push, что обычно немного медленнее, чем просто присвоение индекса , Было бы интересно увидеть все варианты (определенная/не определенная длина, push/assign by index). Но интересный результат. –

+0

@EvanTrimboli Я добавлю версию без нажатия. – SomeKittens

Смежные вопросы