Производительность условий if-else.
Очередная попытка отжать пару секунд процессора.
Есть три варианта исполльзования условий. // --------- 1 ------------------------------------- if ((a == 1) && (b == 2) && (a1 == 1) && (b1 == 2)) { c = 1; } // --------- 2 ------------------------------------- if ((a == 1) && (b = 2)) { if ((a1 = 1) && (b1 == 2)) { c = 1; } } // --------- 3 ------------------------------------- if (a == 1) { if (b == 2) { if (a1 == 1) { if (b1 == 2) { c = 1; } } } } Я опробовал эти варианты тут http://jsperf.com/double-if/2 Показало что третий вариант лучше всего. Кто что скажет: лучше делать цепочку вложенных if или все таки не париться и делать объединенные(как в случае 1) условия для "красоты" кода ? |
микрооптимизации до психушки доведут
тем более с современными jit-компиляторами, которые делают что хотят я заменил == на === и разница между результатами уменьшилась |
Цитата:
Ковыряю одну текстовую онлайн игру, и приспосабливаю ее под себя. И да там довольно много условий, регулярок и условий с indexOf и куча многомерных массивов. Поэтому постепенно изучая JS, упрощаю код и облегчаю его выполнение. if (TypeSearch !== 'all'){ if (!istut(txt1, TypeSearch)){ continue; } } else{ if ((istut(txt1, "str1")) || (istut(txt1, "str2")) || (istut(txt1, "str3"))){ continue; } } И таких кусочков пока хватает. |
К сожалению там много завязано на окружаюшие элементы - получаемые данные ajax и тд. Я думал что если:
if (a == 1) if (b==1)быстрее чем if ((a==1)&& (b==1)), то и: if (a.indexOf(b)!==1) if (b.indexOf(c)!==1) будет быстрее чем: if ((a.indexOf(b)!==-1) && (b.indexOf(c)!==-1) ) А насколько быстрее в реальных условиях, это уже дело десятое. Все равно каждый раз не будет равным. |
НЕ прошло. Я отказался от тестов простых кусков, добавил timeStart и timeEnd в начало и конец общего скрипта, ну и крупных функций. И в конце работы вывожу время, теперь ориентируюсь чисто на это. Другие тесты забросил.
|
И еще раз повторю что написано выше и добавлю своего:
1) Микрооптимизации, которые можно сделать в своем коде, в большинстве случаев уступают оптимизациям которые может сделать компилятор/интерпретатор. 2) Для скриптов оптимизации такого рода почти наверняка убьются об реализацию js в браузере =(. То есть для одних браузеров оптимизация будет работать, для других нет, для третьих работать в зависимости от притяжения юпитера 3). Как следствие первых двух пунктов, оптимизировать стоит алгоритмы. Использовать алгоритмы с минимальной вычислительной сложностью, синхронные вызовы асинхронными заменить etc. Голову правда поломать придется, но выигрыш это может дать вполне реальный |
Переделал немного алгоритм работы. Упростил часть условий. Общее время работы скрипта стало стабильно на 25-30 сек быстрее ( было 6 минут). Негусто, но будем копать дальше.
|
:blink: Вы на каком железе это проверяете? И у вас весь код выполняется целиком?
|
kolyas,
:) Проще сделать так var statysWord= [a,b,a1,b1].join(''); if(statysWord=='1212') c=1; |
Цитата:
Профайлер-то запускали? |
Цитата:
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 21:26. |