Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   почему вместо методов Array используют циклы (https://javascript.ru/forum/misc/43919-pochemu-vmesto-metodov-array-ispolzuyut-cikly.html)

Aetae 27.12.2013 07:51

Используй forEach и проч. когда удобно. Если производительность упрётся именно в этом месте - всегда можно будет переписать циклом. Но скорее всего этого никогда не понадобится.)

danik.js 27.12.2013 08:32

Antonius, если писать код руководствуясь только скоростью работы, то получится трудно-поддерживаемая груда кода. Кроме того, разные варианты отрабатывают в разных браузерах по-разному, или даже в разных версиях одного браузера.

Antonius 27.12.2013 08:45

Цитата:

Сообщение от danik.js (Сообщение 289534)
Antonius, если писать код руководствуясь только скоростью работы, то получится трудно-поддерживаемая груда кода. Кроме того, разные варианты отрабатывают в разных браузерах по-разному, или даже в разных версиях одного браузера.

Да, приходится постоянно балансировать между читаемостью/поддерживаемостью и скоростью.

Однако в браузерах, доступных мне (okouser, это последние версии) тест http://jsperf.com/for-vs-foreach/111 показывает проигрыш forEach, в разной степени, иногда с небольшой разницей, иногда с внушительной, но он медленнее.

Кстати, да, еще можно руководствоваться такими соображениями — если действия, выполняемые в каждой итерации цикла, достаточно «дорогие» по производительности, то накладные расходы на организацию самого обхода массива существенного влияния на время выполнения не окажут.

cyber 27.12.2013 15:27

okouser, по сути если нужно обработать массив на пару тысяч элементов то лучше использовать for (что вообще не является хорошо:)), а так разница в пару милесекунд http://jsfiddle.net/eT25E/

kobezzza 27.12.2013 16:00

Я в своё время заморочился, и написал свою реализацию forEach с JIT компиляцией, по скорости равна циклам.

cyber 27.12.2013 17:19

kobezzza, поделишься?)

Antonius 27.12.2013 17:30

Цитата:

Сообщение от kobezzza (Сообщение 289594)
Я в своё время заморочился, и написал свою реализацию forEach с JIT компиляцией, по скорости равна циклам.

Откройте секрет, как можно со стороны скрипта влиять на JIT?

kobezzza 27.12.2013 18:18

Цитата:

Сообщение от cyber (Сообщение 289612)
kobezzza, поделишься?)

Как закончу работу над Snakeskin, то опубликую (там кое что допилить надо ещё и тестов понаписать).

kobezzza 27.12.2013 18:24

Цитата:

Сообщение от Antonius (Сообщение 289613)
Откройте секрет, как можно со стороны скрипта влиять на JIT?

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

Antonius 27.12.2013 22:37

Ждем января, значит :) Не пропустить бы.


Часовой пояс GMT +3, время: 13:54.