Всем привет!
За последний год довольно много хороших кодеров либо ушли в реал, либо нашли себе стабильную работу и просто забили на инет.
Одновременно "появилось" много скажем новичков.
В этой статье я поделюсь с вами советами по поводу оптимизации PHP кода.
Зачем я решил это сделать?
- Я сам искал материалы, но ничего прямого к теме не находил.
- Новички в первую очередь стараються "наклепать" или "напонтовать" мод, такой чтоб он казался сложным и прочее, но этим они лишь убивают скорость работы скрипта.
Думаю можно начать урок. :)
1. Используйте одинарные кавычки вместо двойныхДвойные ковычки "сканируются" на наличие переменных и подстановок.
msg("Привет \n это текст");
print("Это тот же текст");
echo "И это тоже!"); ?>
Намного быстрей будет работать
echo 'Это текст'; ?>
Потому что, тут сервер не ищет переменных или подстановок, одним словом код становиться более читабельным.
Тоже самое я скажу и про текст из переменных...
$text='ok'; быстрей чем $text="ok";
2. Не заключайте переменные в кавычки $text = 'мой текст';
echo 'Тут мой текст: '.$text.' :)'; ?>
Быстрее чем
echo "Тут мой текст: $text :)";
В первом примере у нас склейка строк, тоесть текст делиться на три части:
1. Тут мой текст:
2. $text
3. :)
3. Не используйте много переменныхecho 'Текст';
Быстрей в два раза чем
$text='Текст';
echo $text;
4. Используйте короткие имена переменных (не больше 7 символов)$abc='текст';
Быстрее чем
$abcabs_ololo_aaaa='текст';
5. Используйте вложенные функции echo (substr(stripslashes(trim(str_replace("\r",' ',str_replace("\n",' ',$text)))),0,1024)); ?>
Быстрей чем
$text=str_replace("\n",' ',$text);
$text=str_replace("\r",' ',$text);
$text=trim($text);
$text=stripslashes($text);
$text=substr($text,0,1024);
echo text; ?>
6. Используйте существующие функцииecho htmlspecialchars($text);
Быстрее чем
$text=str_replace('&','&',$text);
$text=str_replace('"','',$text);
$text=str_replace('<','<',$text);
$text=str_replace('>'','>',$text); ?>
echo $text;
Дело в том что стандартная функция htmlspecialchars() делает тоже самое что и тот велосипед, только в несколько раз быстрей.
7. Создавайте и используйте собственные функции function filtre($my){
$my = mysql_real_escape_string(htmlspecialchars(trim($my)));
}
$text = filtre($text);
$text2 = filtre($text2); ?>
Быстрее чем
$text = mysql_real_escape_string(htmlspecialchars(trim($text)));
$text2 = mysql_real_escape_string(htmlspecialchars(trim($text))); ?>
8. Не создавайте лишних функций echo htmlspecialchars($text); ?>
Быстрее чем
function text($text){
$text=str_replace('&','&',$text);
$text=str_replace('"','',$text);
$text=str_replace('<;','<',$text);
$text=str_replace('>'','>',$text);
}
echo text($text);
?>
9. Не используйте лишние конструкцииecho 'Тут мой текст';
Быстрее чем
echo 'тут мой';
echo ' текст';
10. Не используйте устарелые функцииecho str_replace('добро','зло',$text); (функция находит в переменной $text слова добро и заменяет на зло.)
Быстрее чем
echo ereg_replace('добро','зло',$text); (+ функция ereg_replace включает алгоритм обработки регулярных выражений, хотя этого тут не нужно.)
preg_match("/(ма[a-zа-я]{1,20})/im",$text);
Быстрее чем
eregi("(ма[a-zа-я]{1,20})",$text);
11. Не играйте с обработчиком echo'
'.$text.'
';
include 'text.php'; echo '
Ссылка'; ?>
Быстрее чем
echo $text;
?>
include 'text.php';
?>
Ссылка12. Используйте echo вместо print при выкл. ob_start() echo 'Текст'; ?>
Быстрей чем
print('Текст'); ?>
Однако, если включён ob_start() всё наоборот, print будет работать быстрей.
13. Используйте меньше комментариев в кодеЛучше всего использовать минимум комментариев, если же вы используйте кеширование opcodes, комментарии игронируются, и убирать их не нужно.
14. Не используйте лишние символы, лишнюю конкатенацию строк echo 'text = '.$text; ?>
в версии 4.2 работает быстрее чем
echo "text = $text"; ?>
однако с 4.3 скорость идентична.
15. Не используйте килограммы кода в подключаемом файлеПримерно на обработку каждых 2 Кб кода инклудного файла тратиться 0.001 секунды.
16. Храните и выводите данные в файла/из файла, используйте бд лишь в случаях поиска данных, хранения данных для поиска17. Работа без ООП(object) быстрее в 3 раза18. Используйте одинарные ковычки в массивах, контролируйте мерность массивов$text['test'] = 'ok';
быстрее чем
$text[test] = 'ok';
и быстрее чем
$text['test']['test'] = 'ok';
19. Контактация строк с помощи запятой в конструкции echo быстрее чем контактация c помощью точкиПример:
$text1 = 'text';
$text2 = 'text2';
echo $text , $text2; ?>
быстрее чем
20. Лучше контактировать переменные и выводить с помощью echo чем повторять конструкцию echo несколько раз$text = 'test';
$text.= 'test2';
echo $text;
?>
Быстрее чем
echo 'test';
echo 'test2';
?>
Однако
ob_start();
echo 'test'; echo 'test2';
ob_end_flush(); ?>
Быстрее чем
$text = 'test';
$text.= 'test2';
echo $text;
?>
21. Require быстрее, чем include22. If, else, elseif быстрее чем switch23. Elseif быстрее чем множество конструкций if, else24. Функции работы со строками быстрее, чем регулярные выражения25. Не используйте подавление ошибок @26. Проверка символов в строке с помощью isset быстрее чем с помощью функции strlen() if (isset($test{10})){
код
} ?>
быстрее чем
if (strlen($text)>9){
код
} ?>
27. Для определения времени используйте $_SERVER['REQUEST_TIME'] вместо функции time()Но, $_SERVER['REQUEST_TIME'] может вывести неверный формат времени (время сервера).
28. Используйте NULL вместо 0, is_null, empty1.
if ($count===null){
код
}
?>
2. $count = NULL; ?>
быстрее чем:
1. if($count==0) ?>
2. if(empty($count)) ?>
3. if(is_null($count)) ?>
4. $count = 0; ?>
29. ++i и --i быстрее чем i++ и i--30. Не плодите переменные$a = 1+1;
?>
Быстрее чем
$a = 1;
$b = 1;
$c = $a+$b;
?>
31. Не храните часто выводимые переменные в функциях$a = 'text';
echo $a;
?>
Быстрее чем
function text(){
$a = 'text';
echo $a;
}
echo text();
?>
32. SizeOf() работает быстрее чем count()33. Str_replace() работает быстрее чем preg_replace()34. Mysql_result() быстрее чем mysql_num_rows()Пример:
$a = mysql_result(mysql_query("SELECT count(id) FROM `users`"),0);
echo $a;
?>
Быстрее чем
$a = mysql_query("SELECT (id) FROM `users`");
$b = mysql_num_rows($a);
echo $b;
?>
35. Закрывайте соединение с бд после запросов, там где он не нужен36. При запросах в бд SELECT, UPDATE, DELETE указывайте LIMIT (лимит запросов)37. При селекте данных из бд указывайте интересующие колонки вместо * (всех колонок)$us = mysql_fetch_assoc(mysql_query("SELECT id,name,nick,pass from `users` where `id` = '".$id."' limit 1"));
Быстрее чем
$us = mysql_fetch_assoc(mysql_query("SELECT * from `users` where `id` = '".$id."' limit 1"));
Так же
$us = mysql_result(mysql_query("SELECT count(id) from `users`"));
быстрее чем
$us = mysql_result(mysql_query("SELECT count(*) from `users`"),0);
38. Не используйте ненужные в строке функции$num = abs(intval($_GET['num']));
Быстрее чем
$num = intval(htmlspecialchars(mysql_real_escape_string(trim($_GET['num']))));
Зачем тут столько фильтров, если мы профильтровали числовые данные с помощью intval()?
39. Используйте данные типа booleanНапример для определения если юзер онлайн лучше использовать код
if($a == true){ ... }
Вместо
if($a == 'true'){ ... }
И так далее.
Этой информации я думаю хватит для новичка, надеюсь моя статья будет для вас полезной.
Спасибо за внимание!