+

Некоторые примеры маленькой оптимизации php кода для помешанных на оптимизации

Программирование

Метки (теги) : , ,

Автор: admin

В этом посте я приведу примеры скорости работы различных действий написанных на языке программирования – php (Hypertext Preprocessor).

Всё действо происходит на компьютере под Windows 7 (1,76 Гц двухядерный процессор, 1 гиг оперативки)

Инкремент $i++, $i+=1, $i=$i+1

$i++

<?php
$time = time();
$microtime = microtime();
for($i=0;$i<10000;$i++){}
echo (time()-$time).’ / ‘.(microtime()-$microtime);
Время выполнения – дольше 0.0136 секунды

$i=$i+1

<?php
$time = time();
$microtime = microtime();
for($i=0;$i<100000;$i=$i+1){}
echo (time()-$time).’ / ‘.(microtime()-$microtime);

Время выполнения – дольше 0.0176 секунды

$i+=1

<?php
$time = time();
$microtime = microtime();
for($i=0;$i<100000;$i+=1){}
echo (time()-$time).’ / ‘.(microtime()-$microtime);

Время выполнения – дольше 0.0168 секунды

Итог: в данном случае быстрее всех работает $i++, медленнее $i=$i+1

Ну вот парадокс, если тестовый код немного изменить, то вот что получается:

$i++

<?php
$time = time();
$microtime = microtime();
$j=0;
for($i=0;$i<10000;$i++){$j++}
echo (time()-$time).’ / ‘.(microtime()-$microtime);

Время выполнения – дольше 0.0216 секунды

$i=$i+1

<?php
$time = time();
$microtime = microtime();
$j=0;
for($i=0;$i<100000;$i++){$j=$j+1;}
echo (time()-$time).’ / ‘.(microtime()-$microtime);

Время выполнения – дольше 0.0228 секунды

$i+=1

<?php
$time = time();
$microtime = microtime();
$j=0;
for($i=0;$i<100000;$i++){$j+=1;}
echo (time()-$time).’ / ‘.(microtime()-$microtime);

Время выполнения – дольше 0.0181 секунды

Итог: в данном случае быстрее всех работает $i+=1, медленнее $i=$i+1

Вывод: в разных случаях нужно применять разные методы инкрементации в php

Следующим на очереди мой любимый строковый метод strlen.

Смотрим и удивляемся

<?php
$time = time();
$microtime = microtime();
$j=0;
for($i=0;$i<100000;$i++){$j++;}
$foo=’Hello';
for($i=0;$i<100000;$i++){if(strlen($foo)==0) { $j=2+3; }}
echo (time()-$time).’ / ‘.(microtime()-$microtime);
Среднее время выполнения 0.0790
<?php
$time = time();
$microtime = microtime();
$j=0;
$foo=’Hello';
for($i=0;$i<100000;$i++){if(!isset($foo{0})) { $j=2+3; }}
echo (time()-$time).’ / ‘.(microtime()-$microtime);
Среднее время выполнения 0.0225
Из этого следует что если проверять только наличие нулевого символа, то это выходит почти в 4 раза быстрее чем проверять функцией strlen .

Продолжение следует …

Оставить комментарий

=