while vs for
сделал прогонку 1000000 раз.
test=function(fu, i, name){ console.time(name) while(--i){fu()} console.timeEnd(name) } arr="foo bar baz flk jdjdj dkkdke jdj".split(" ") tst1=function(){ for(var i=0; i<arr.length; i++){arr[i]} } tst1_a=function(){ for(var i=arr.length; i>-1; i--){arr[i]} } tst2=function(){ var i = arr.length while(i--){arr[i]} } dflt=1000000 test(tst1, dflt, "ts1") test(tst1_a, dflt, "ts1_a") test(tst2, dflt, "ts2") //ts1: 23ms //ts1_a: 263ms //ts2: 41ms Как видно, while сливает в 2 раза почти, но 2-й for просто фантастически медленный. Интересно, почему? Тестировал на ноде. |
Пожалуйста, отформатируйте свой код!
Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [js] ... ваш код... [/js] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
bes,
Отформатировал. Только не пойму, зачем это. Что там буков чтоли не видно? Что по сабжу? |
добавь кнопку запуска [js run] и сам тест, чтобы сразу просмотреть результат,
по твоему примеру не видно, что ты Цитата:
|
Цитата:
|
Цитата:
|
bes,
У меня не работает запуск. Как эту кнопку правильно добавить? просто дописать в откр тег или еще что-то? |
Цитата:
|
Цитата:
|
109/62/79 в лисе показало. Странно. То есть, в лисе обычный цикл медленней.
|
В хроме
ts1: 23.000ms ts1_a: 359.000ms ts2: 43.000ms Сопоставимо с нодой, что не удивительно, с-на. |
Объявление в глобале без var... Отсутствие точки с запятой... Отсутствие отбивки операторов... Ужасное форматирование вцелом... Кого-то ты мне напоминаешь.
|
Erolast,
Забей на форматирование, будь мужиком. |
Степень идиотизма == foo
|
newobject, проверь количество итераций в циклах
|
Вообще:
foo = new ObjectПросто он на форматирование забил:) |
bes,
там, по моему, во 2-й на одну больше. Это роли особо не играет. |
|
рони,
Ваша вторая ссылка: Вы дали на конкретное сообщение, а не на тему; если Вы не ошиблись, я позволю себе заметить, что рассуждения, приведенные там, по-поводу while vs do while ИМХО, наивны. Разница там будет всего в одной итерации,которая исполнится до проверки, это существенно на скорость повлиять не может. Это только в частном случае, поскольку у него там break, есть разница, в целом же, при обычном использовании, это не фактор. |
Цитата:
|
Цитата:
|
bes,
Убрал я одну итерацию, протестил, изменений нет, практически. |
Цитата:
Цитата:
test = function (fu, i, name) { console.time(name) while (--i) { fu() } console.timeEnd(name) } arr = "foo bar baz flk jdjdj dkkdke jdj".split(" ") tst1 = function () { for (var i = arr.length; i > -1; i--) { arr[i] } } tst2 = function () { for (var i = arr.length; i > 0; i--) { arr[i] } } dflt = 1000000 test(tst1, dflt, "ts1") test(tst2, dflt, "ts2") хром ts1: 151.000ms ts2: 78.000ms ff ts1: таймер запущен ts1: 14.78мс ts2: таймер запущен ts2: 7.06мс |
bes,
У меня ваш тест показывает приблизительно одинаковое время в обеих браузерах. Протестируйте несколько раз, у вас там что-то не так, возможно побочки были. Разница в пределах 5%. |
Цитата:
|
newobject,
ок ссылки возможно по теме а может нет )))https://blogs.oracle.com/greimer/ent..._way_to_code_a |
|
BETEPAH,
Спасибо. |
BETEPAH,
для полного счастья хотелось бы array[i] === |
рони,
Я этот тест делал полтора года назад :) Там внизу есть кнопка, позволяющая создавать свои ревизии, со своими условиями и прочим. Удобство этого сервиса в том, что можно просто раздать ссылку и наглядно смотреть результаты как своего теста, так и тестов тех, кому дали ссылку без необходимости публиковать эти результаты на форуме. |
BETEPAH,
50000 это середина а если искать с конца массива то естественно 80000 найдётся раньше чем при поиске с начала loop (forward) -- заведомо в проигрыше в 4 раза |
рони,
а-а... вон ты о чем. Ну, да, ну, да. |
Часовой пояс GMT +3, время: 16:58. |