До оптимизации быстродействия php-кода я настоятельно рекомендую сначала оптимизировать http-запросы, уменьшить размер js и css, продумать кэширование темплейтов, оптимизировать запросы БД и только тогда заниматься проверкой кода на производительность. Однако стиль программирования надо выбирать до выполнения самой работы и смотреть на ниже перечисленные пункты с точки зрения безопасности - лучше знать о подводных камнях заранее, чем латать дыры потом.
|
Плохо |
Хорошо | Разница |
| $a="text $b"; | $a='text '.$b; | 50% |
| eregi("(ма[a-zа-я]{1,20})",$text); | preg_match("/(ма[a-zа-я]{1,20})/im",$text); | 76% |
| $test[a][b]=1; | $text['a']['b']=2; | 361% |
| foreach($test as $n) |
$it=0; while($it<100000) |
254% |
| while (list($k, $v) = each($test)) | foreach($test as $k=>$v) | 22% |
| substr_compare("abcd","ab",0,2) | strpos("abcd","ab")===0 | 22% |
Поиск прожорливых мест в памяти можно грубо делать так:
function array_size($arr) {
ob_start();
print_r($arr);
$mem = ob_get_contents();
ob_end_clean();
$mem = preg_replace("/\n +/", "", $mem);
$mem = strlen($mem);
return $mem;
}
foreach($GLOBALS as $key=>$value){
$memEstimate = array_size($value);
echo($key.':'.$memEstimate);
}
Читайте так же:

Комментарии
Если выбранное вами средство не позволяет писать максимально удобно по причине производительности, может вы ошиблись в выборе средства?
п.с. алгоритмы рулят
наоборот :)
а иногда можно использовать строковые функции вместо регулярок.
все зависит от кривости рук программиста
и
"Сделано своими руками"
здесь значит багрепорты и писать? :)
На моих часах уже 4.13
Грубо говоря $a="text $b"; скажем занимает 0,0001 секунды, мы выигрываем заменяя офигенно много - 50% его на $a='text '.$b;
но сам скрипт, в котором мы так много выиграли , работает 1 секунды, так что даже с учетом того что такой работы со строками у нас много, всеравно в масштабе всего скрипта выигрыш незначителен.
Оптимизировать в любом языке можно только одним способом- включаешь профайлер и смотришь что тормозит, его и рефакторишь, иначе это все ересь......
Например я как-то изучал почему медленно работает одна мне мало знакомая интранет-система, в итоге докопался до того что переменные в самописном темплейт-движке ищутся в цикле с preg_replace и очень нечётким выражением. Так что мелочи имеют значение там где они повторяются в больших количествах.
$test[a][b]=1; // писать в корень не правильно. Тут вообще нет смысла говорить о приросте. Если человек так пишет, он не знает PHP. Ему надо дать прочитать самоучитель.
$a="text $b"; // я часто пишу так, и не считаю, что это плохо. Мой аргумент в точности совпадает с аргументацией от daedmen.
Почему такая разница с foreach для меня остается загадкой. Возможно была допущена ошибка при измерениях?
while (list($k, $v) = each($test)) — это PHP3. Если человек так пишет, он не знает даже PHP4, хотя уже пора знать PHP5. Ему надо дать прочитать самоучитель.
Ну а чем меньше в коде регулярок, тем лучше — известная истина. Часто регулярное выражение можно заменить своим кодом со строковыми функциями. Но так мало кто делает, потому что RegExp намного удобнее и быстрее писать. Просто при их использовании нужно быть крайне внимательным.
while (list($k, $v) = each($test))
вспоминаешь старые времена ... :)