Оптимизация кода. Время выполнения функций.

MishGUN

Новичок
Оптимизация кода. Время выполнения функций.

Недавно задался вопросом о полной оптимизации кода. Уперся в то, что одну и ту же цель средствами РНР можно достичь разными путями. Например, операция сравнения: есть переменная $a=1 и есть массив числел, надо проверить входит ли $a в этот массив. Попробовал три способа - switch с перебором всех значений, in_array и простой перебор значений массива типа $a==$array[0] or $a==$array[1] or... И, что удивительно (для меня) количество кода обратно пропорционально зависит от скорости работы. Другими словами, switch дал самый маленький показатель времени выполнения, затем перебор и затем in_array. Казалось бы, написанные разработчиками языка функции должны работать быстро, но нет, в данном случае in_array работает в 2 раза дольше.

Это заставляет задуматься и приступить к поиску идеальных способов и для других целей. Искать самостоятельно будет достаточно сложно, поэтому хочется услышать от вас подобные примеры (если кто сталкивался с этим или хочет столкнуться). Таким образом, можно будет складывать на форуме большое множество примеров, что, думаю облегчит некоторым жизнь
 

Кром

Новичок
И, что удивительно (для меня) количество кода обратно пропорционально зависит от скорости работы. Другими словами, switch дал самый маленький показатель времени выполнения, затем перебор и затем in_array. Казалось бы, написанные разработчиками языка функции должны работать быстро, но нет, в данном случае in_array работает в 2 раза дольше.
Тха ха ха! Зачот!
 

Flanker

незнайка
Есть над чем трудиться, переработай все функции РНР(написанные на более низкоуровневых языках, но более продуктивных) и создай свой модуль, получишь то за что боролся...
 

MishGUN

Новичок
Причем здесь шутки? Я привел реальный пример. Кто сомневается, могу сорцы дать. Провел опыт, получил конкретные числа... Может я что-то в принципе не догоняю, но факт остается фактом... В конце концов, я не утверждаю, что это лучший пример.
Объясните мне тогда, почему так происходит. И почему свич нельзя использовать если он работает быстрее? Может быть хоть чему-то научусь
 

Фанат

oncle terrible
Команда форума
это ваще нереальный пример.
сколько времени у тебя выполняется этот свитч?
 

MishGUN

Новичок
in_array - 0.0001060962677
switch - 4.79221343994E-005
Разница небольшая, но это только на элементарной функции
 

Фанат

oncle terrible
Команда форума
ну, давай, продемонстрируй нам не элементарную
 

MishGUN

Новичок
Я к тому, что грубо говоря
неэлементарная=элемнтарная*N => время_сэкономленное_на_неэлементарной=время_сэкономленное_на_элементарной*N
 

Фанат

oncle terrible
Команда форума
ты попкой-то не виляй. приведи пример.
тоже, математик нашёлся.
 

Фанат

oncle terrible
Команда форума
SiMM
тут дело не в этом даже.
он сравнивает конструкцию языка с ран-тайм исполнением программы.

что быстрее - вычислить факториал многозначного числа или сразу вывести результат?
 

Flanker

незнайка
Что такое
in_array()=>function-на вход и выход которой используються команда(таже самая ссылка на метку,но...(я не знаю почему 2)) по 2 байта и воопще это значительное время, поту выберай без функций но быстро, или с красивым кодом(который твоим детям служить будет) и с маленькой потеряй памяти(я уверен ты на своем оптимизированом коде столько теряешь, что всё остальное мелочи)
switch=>php code просто с изменнеой симантикой низкоуровнего языка, а воопще это куча(низкоуровневых) условий, которые предпологают переход на определенную метку, эти команды воопще занимают мизер и считаються самыми скоростными не считая пустых команд nop.
 

uliss

Новичок
Преждевременная оптимизация - корень всех зол (c) Д. Кнут
 
Сверху