Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 13.02.2014, 07:41
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от melky
разве функция внутри forEach инлайнится движком?
да хз что там с ней делается. Сейчас перепроверил, разница в скорости в 3 раза.
Ответить с цитированием
  #12 (permalink)  
Старый 13.02.2014, 08:57
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Riim, хз как ты тестишь. Вот тут у меня в хроме forEach в 10 раз медленней for:
http://jsperf.com/for-vs-foreach/132
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #13 (permalink)  
Старый 13.02.2014, 10:44
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от danik.js
хз как ты тестишь
просто запускаю в консоли:
var i = 500000, arr = []; while (i--) { arr.push(i); }

var sum = 0, st = Date.now();
arr.forEach(function(num) { sum += num; });
console.log(Date.now() - st);

sum = 0; st = Date.now();
function add(num) { sum += num; }
arr.forEach(add);
console.log(Date.now() - st);

sum = 0; st = Date.now();
for (var j = 0, l = arr.length; j < l; j++) { sum += arr[j]; }
console.log(Date.now() - st);

sum = 0; st = Date.now();
for (var j = 0; j < arr.length; j++) { sum += arr[j]; }
console.log(Date.now() - st);

результат в хроме:
736
85
2496
2608

в ff:
657
590
871
913

пробовал переставлять тесты местами, пробовал отдельно генерить массив и далее отдельно запускать каждый тест. Проверь, мож я где затупил жестко. jsperf выдает результат схожий с твоим, странно как-то.
Ответить с цитированием
  #14 (permalink)  
Старый 13.02.2014, 10:55
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

ну вот, если запускать не из консоли, результат меняется, обидно , кажись придется иногда обычные циклы писать.
Ответить с цитированием
  #15 (permalink)  
Старый 13.02.2014, 11:31
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Riim
ну вот, если запускать не из консоли, результат меняется
Я тож такое заметил. Не знаю почему так. Для консоли нужно код оборачивать в анонимную функцию.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #16 (permalink)  
Старый 13.02.2014, 12:33
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от danik.js Посмотреть сообщение
Я тож такое заметил. Не знаю почему так. Для консоли нужно код оборачивать в анонимную функцию.
При включённом отладчике отключается/частично отключается JIT компилятор
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 13.02.2014 в 12:37.
Ответить с цитированием
  #17 (permalink)  
Старый 13.02.2014, 12:34
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от Riim Посмотреть сообщение
ну вот, если запускать не из консоли, результат меняется, обидно , кажись придется иногда обычные циклы писать.
https://github.com/kobezzza/Collection
Кошерный функциональный стиль со скоростью циклов + прозрачная работа с LocalStorage/IndexedDB

Сравнения: https://github.com/kobezzza/Collecti...aster/profiler
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 13.02.2014 в 12:43.
Ответить с цитированием
  #18 (permalink)  
Старый 13.02.2014, 12:36
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от melky Посмотреть сообщение
разве функция внутри forEach инлайнится движком?
Зависит от функции.
__________________
kobezzza
code monkey
Ответить с цитированием
  #19 (permalink)  
Старый 13.02.2014, 13:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

kobezzza,
то что вы пишите я совсем непонимаю 98%, надеюсь на озарение ))), но немогли бы вы обьяснить, если можно что значит это:
Сообщение от kobezzza
Сравнения: https://github.com/kobezzza/Collecti...aster/profiler
Ответить с цитированием
  #20 (permalink)  
Старый 13.02.2014, 14:39
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от рони Посмотреть сообщение
kobezzza,
то что вы пишите я совсем непонимаю 98%, надеюсь на озарение ))), но немогли бы вы обьяснить, если можно что значит это:
Эммм, это ссылка на папку с бенчмарками производительности тех или иных методов различных реализаций.

Чтобы запустить нужно склонить к себе репозитарий:

git clone git://github.com/kobezzza/Collection.git


А затем запускать .html файлики, например: forEach.html

***

Сама Collection - это микролиба которая предоставляет унивесальный итераторный API для любых типов данных и работает как правило значительно быстрее нативных методов, т.к. основана на кодогенерации циклов в real-time с кучей оптимизаций.

Collection v4

Пример: сравнение forEach в хроме (время в мс):

*** Циклы

for (i = 0; i < length; i++) 99
for (i = length; i--; ) 78
for (i = 0; i < length; i++) с функцией 81
for (i = 0; i < length; i++) с функцией в Function 86
for (i = -1; (i += 1) < length; ) 83

*** Итераторы

Array.prototype.forEach 348
jQuery.each 487
Underscore.each 345

*** Collection

$C().forEach 131
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 13.02.2014 в 14:54.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
инициализация плагинов до вставки html-я в DOM FanAizu jQuery 3 19.01.2014 01:16
Проблема select innerHTML adamsalex AJAX и COMET 0 02.04.2012 11:46
Новый элемент отсутствует в DOM модели StrSprut jQuery 4 19.09.2011 12:50
Как в браузерах реализуются функции DOM (например createElement) iamme Общие вопросы Javascript 7 02.09.2011 20:26
DOM vs iframe. Как в ифрейме заменить выделенный текст (его innerHTML)? Бухалыч Events/DOM/Window 4 20.08.2009 14:30