Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.08.2013, 01:53
Новичок на форуме
Отправить личное сообщение для kolyas Посмотреть профиль Найти все сообщения от kolyas
 
Регистрация: 01.06.2013
Сообщений: 8

Производительность условий 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) условия для "красоты" кода ?

Последний раз редактировалось kolyas, 15.08.2013 в 01:57.
Ответить с цитированием
  #2 (permalink)  
Старый 15.08.2013, 07:01
Профессор
Отправить личное сообщение для mta88 Посмотреть профиль Найти все сообщения от mta88
 
Регистрация: 16.05.2013
Сообщений: 229

микрооптимизации до психушки доведут
тем более с современными jit-компиляторами, которые делают что хотят

я заменил == на === и разница между результатами уменьшилась
Ответить с цитированием
  #3 (permalink)  
Старый 15.08.2013, 19:34
Новичок на форуме
Отправить личное сообщение для kolyas Посмотреть профиль Найти все сообщения от kolyas
 
Регистрация: 01.06.2013
Сообщений: 8

Сообщение от Дзен-трансгуманист Посмотреть сообщение
kolyas,
Пардон, а вы что, собираетесь в реальных условиях эти if'ы по 300 млн. раз в секунду гонять? )

Вот уж смешно устраивать тесты на таких крошечных кусочках кода. Контекст, из которого это выдрано, наверняка гораздо тяжелее, и все отличия просто растворятся на его фоне...
Не 300млн раз, но используется в цикле ~15*81*24 раз.
Ковыряю одну текстовую онлайн игру, и приспосабливаю ее под себя.

И да там довольно много условий, регулярок и условий с indexOf и куча многомерных массивов. Поэтому постепенно изучая JS, упрощаю код и облегчаю его выполнение.

if (TypeSearch !== 'all'){
				if (!istut(txt1, TypeSearch)){
					continue;
				}
			} else{
				if ((istut(txt1, "str1")) || (istut(txt1, "str2")) || (istut(txt1, "str3"))){
					continue;
				}
			}

И таких кусочков пока хватает.
Ответить с цитированием
  #4 (permalink)  
Старый 15.08.2013, 21:11
Новичок на форуме
Отправить личное сообщение для kolyas Посмотреть профиль Найти все сообщения от kolyas
 
Регистрация: 01.06.2013
Сообщений: 8

К сожалению там много завязано на окружаюшие элементы - получаемые данные 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) )


А насколько быстрее в реальных условиях, это уже дело десятое. Все равно каждый раз не будет равным.
Ответить с цитированием
  #5 (permalink)  
Старый 15.08.2013, 22:21
Новичок на форуме
Отправить личное сообщение для kolyas Посмотреть профиль Найти все сообщения от kolyas
 
Регистрация: 01.06.2013
Сообщений: 8

НЕ прошло. Я отказался от тестов простых кусков, добавил timeStart и timeEnd в начало и конец общего скрипта, ну и крупных функций. И в конце работы вывожу время, теперь ориентируюсь чисто на это. Другие тесты забросил.
Ответить с цитированием
  #6 (permalink)  
Старый 15.08.2013, 22:50
Аватар для Makarov
Профессор
Отправить личное сообщение для Makarov Посмотреть профиль Найти все сообщения от Makarov
 
Регистрация: 08.07.2013
Сообщений: 212

И еще раз повторю что написано выше и добавлю своего:
1) Микрооптимизации, которые можно сделать в своем коде, в большинстве случаев уступают оптимизациям которые может сделать компилятор/интерпретатор.
2) Для скриптов оптимизации такого рода почти наверняка убьются об реализацию js в браузере =(. То есть для одних браузеров оптимизация будет работать, для других нет, для третьих работать в зависимости от притяжения юпитера
3). Как следствие первых двух пунктов, оптимизировать стоит алгоритмы. Использовать алгоритмы с минимальной вычислительной сложностью, синхронные вызовы асинхронными заменить etc. Голову правда поломать придется, но выигрыш это может дать вполне реальный
Ответить с цитированием
  #7 (permalink)  
Старый 16.08.2013, 12:49
Новичок на форуме
Отправить личное сообщение для kolyas Посмотреть профиль Найти все сообщения от kolyas
 
Регистрация: 01.06.2013
Сообщений: 8

Переделал немного алгоритм работы. Упростил часть условий. Общее время работы скрипта стало стабильно на 25-30 сек быстрее ( было 6 минут). Негусто, но будем копать дальше.
Ответить с цитированием
  #8 (permalink)  
Старый 17.08.2013, 13:06
Интересующийся
Отправить личное сообщение для maxmaster Посмотреть профиль Найти все сообщения от maxmaster
 
Регистрация: 25.02.2012
Сообщений: 10

Вы на каком железе это проверяете? И у вас весь код выполняется целиком?
Ответить с цитированием
  #9 (permalink)  
Старый 17.08.2013, 20:15
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

kolyas,
Проще сделать так
var statysWord= [a,b,a1,b1].join('');
if(statysWord=='1212') c=1;
Ответить с цитированием
  #10 (permalink)  
Старый 17.08.2013, 20:34
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от kolyas
15*81*24 раз.
30 000 итераций? Смешно, да.
Профайлер-то запускали?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация условий if/else с jQuery jsuse jQuery 8 25.09.2015 20:02
производительность: querySelectorAll vs getElementsByClassName lekba Events/DOM/Window 4 10.08.2013 22:16
Как красиво писать много условий в ифах? godofjavascript Оффтопик 12 14.12.2012 22:58
Вывод определенного блока при выполнении условий sergiocharm Общие вопросы Javascript 24 17.04.2012 19:22
Скрипт условий if, помогите разобраться lyuis Общие вопросы Javascript 8 28.12.2010 21:21