2016-09-28 3 views
0

Что было бы быстрее, когда дело касалось итерации по всем элементам?большой массив чисел против меньшего массива объектов

Метод 1:

let array = [10, 0, 0, 20, 1, 0, 12, 2, 0]; 

for(let i = 0, l = array.length; i < l; i += 3) { 
    doSomething(array[i], array[i + 1], array[i + 2]); 
} 

против

Метод 2:

let array = [{id:10, x:0, y:0}, {id:20, x:1, y:0}, {id:12, x:2, y:0}]; 

for(let i = 0, l = array.length, current = null; i < l; ++i) { 
    current = array[i]; 
    doSomething(current.id, current.x, current.y); 
    // i'm aware that we could make doSomething work with the object 
    // -> even a thing to consider? 
} 

Я думаю, что мы быстрее с , но вы, ребята, может имеют больше интеллекта v8, spidermonkey и все, что может быть, ling и меньший массив будут быстрее в конце?

+0

Почему вы не используете 'Date.now()' и посмотреть на себя? – PHPglue

+0

метод 1 должен быть быстрее, но метод 2 - лучший способ организовать данные, которые вы используете. –

+0

Я не думаю, что доступ к свойствам объекта в том или ином случае может привести к большим изменениям в 2016 году. Я ожидал бы, что и то, и другое будут делать то же самое с точки зрения производительности. – Redu

ответ

3

Оба являются O(n). Остальное не важно. Даже их потребление памяти будет мало отличаться. Вы можете сделать тест самостоятельно, если считаете, что это критически важно, но it most likely isn't.

Используйте объекты, поскольку они обеспечивают четкую структуру ваших данных и делают ваш код более удобочитаемым. Да, вы должны рассмотреть возможность передачи такого объекта в doSomething.

+0

спасибо за разговоры об управлении памятью с памятью, я думаю, я пойду со вторым путем, тест @ dadykhoff показал мне, что это даже не будет критично в коде игры. – daintycode

0

Выполнение обоих ваших методов https://www.measurethat.net/ говорит, что метод 1 работает быстрее на ~ 2300 операций в секунду.

https://www.measurethat.net/Benchmarks/ShowResult/1363

+1

«2300 ops/s» довольно бессмысленно. Говоря, что фрагмент 2 работает примерно на 12% медленнее, чем фрагмент 1, будет разумным, но на самом деле этот показатель является ошибочным, как и многие микрофункции. – Bergi

+0

, который является обозревателем и зависимым от os также .... Я попробовал в 2 браузерах и был достаточно близок как в – charlietfl

+1

Хмм спасибо за замену JSPerf. Они привели то же самое в FF v50 и почти то же самое в Chrome v54 – Redu

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