Головна PHP 40 порад щодо оптимізації вашого php-коду
40 порад щодо оптимізації вашого php-коду

Переклад замітки "40 Tips for optimizing your php code". Автор - Reinhold Weber.

Почнемо:
1. Якщо метод може бути статичним, оголошуйте його статичним.
2. echo швидше, ніж print.
3. Передавайте в echo декілька параметрів, замість того, щоб використовувати конкатенацію рядків.

4. Встановлюйте максимальну кількість проходів ваших циклів for до циклу, а не під час його виконання.
5. Видаляйте свої змінні для звільнення пам'яті, тим більше, якщо це великі масиви.
6. Остерігайтеся магічних методів, таких як __set, __get, __autoload. require_once, вони дорого обходяться.
7. Вказуйте повні шляхи в конструкціях include/require, менше часу буде витрачається на пошук файлу.
8. Якщо вам необхідно визначити час, коли скрипт був запущений, використовуйте $_SERVER[’Request_time’] замість time().
9. Використовуйте strncasecmp, strpbrk і stripos замість регулярних виразів.
10. str_replace швидший, ніж preg_replace, але strtr швидший, ніж str_replace.
11. Якщо функція, як і функції заміни рядків, може приймати в аргументи як масиви, так і одиночні символи, і якщо ваш список аргументів не дуже довгий, подумайте над тим, щоб записати декілька однакових виразів заміни, проходчи один символ за раз, замість одного рядка коду, який приймає масив як аргумент пошуку і заміни.
12. Краще вибирати конструкцію else if, чим використовувати декілька конструкцій if.
13. Придушення помилок при використанні @ працює дуже повільно.
14. Використовуйте модуль Apache mod_deflate.
15. Закривайте свої з'єднання з БД, коли закінчите працювати з ними.
16. $row[`id`] у сім разів швидше, за $row[id].
17. Повідомлення про помилки дуже сповільнюють сценарій
18. Не використовуйте функції всередині умови цикла fo.
19. Інкремент локальної змінної в методі - найшвидший.
20. Майже також працює інкремент локальної змінної у функції.
21. Інкремент глобальної змінної в два рази повільніший, за інкремент локальної.
22. Інкремент властивості об'єкту (тобто $this->prop++) в три рази повільніший, ніж з локальною змінною.
23. Інкремент невизначеної змінної в 9-10 разів повільніший, за заздалегідь ініціалізовану.
24. Оголошення глобальної змінної, без використання її у функції, також уповільнює роботу (приблизно на ту ж величину, що і інкремент локальної змінної). Ймовірно, PHP здійснює перевірку на існування змінної.
25. Швидкість виклику методу, судячи з усього, не залежить від кількості методів, визначених в класі. Я додав 10 методів в тестовий клас (до і після тестового методу), без зміни продуктивності.
26. Методи в похідних класах працюють швидше, чим вони ж, визначені в базовому класі.
27. Виклик функції з одним параметром і порожнім тілом функції в середньому дорівнює 7-8 інкрементам локальної змінної ($localvar++).
28. Виклик схожого методу, зрозуміло, близько 15 інкрементів.
29. Ваші рядки, визначені при допомозі `, а не ", інтерпретуватимуться трохи швидше, оскільки PHP шукає змінні усередині "..", але не `...`. Звичайно, ви можете використовувати це лише тоді, коли у вашому рядку немає змінних.
30. Рядки, розділені комами, виводяться швидше, ніж рядки, розділені крапкою. Примітка: це працює лише з функцією echo, яка може приймати декілька рядків як аргументи.
31. Php-скрипти оброблятимуться, як мінімум, в 2-10 разів повільніше, ніж статичні html-сторінки. Спробуйте використовувати більше статичних html-сторінок і менше скриптів.
32. Ваші php-скрипти перекомпілюються кожного разу, якщо скрипти не кешуются. Кешування скриптів зазвичай збільшує продуктивність на 25-100% за рахунок видалення часу на компіляцію. Кешуйте, наскільки це можливо.
Використовуйте memcached — це високопродуктивна система кешування об'єктів в пам'яті, яка підвищує швидкість за рахунок полегшення завантаження БД. Кешований мікрокод корисний тим, що дозволяє вашому скрипту не компілюватися знову для кожного запиту.
33. При роботі з рядками, коли вам знадобиться переконатися в тому, що рядок певної довжини, ви, зрозуміло, захочете використовувати функцію strlen(). Ця функція працює дуже швидко, адже вона не виконує яких-небудь обчислень, а лише повертає вже відому довжину рядка, доступну в zval-структурі (внутрішня структура C, використовувана при роботі із змінними в PHP). Проте тому, що strlen() — функція, вона працюватиме повільно за рахунок виклику деяких операцій, таких як приведення рядка в нижній регістр і пошуку в хеш-табліці, лише після яких будуть виконані основні дії функції.
34. В деяких випадках ви зможете прискорити свій код за рахунок використання хитрості з isset().
35. Було: if (strlen($foo)< 5) { echo "Foo is too short"; } Стало: if (!isset($foo{5})) { echo "Foo is too short"; } Виклик isset() швидше, ніж strlen() тому, що, на відміну від strlen(), isset() - не функція, а мовна конструкція. За рахунок цього isset() не має практично жодних накладних витрат на визначення довжини рядка.
36. Інкремент або декремент змінної при допомозі $i++ повільніший, ніж ++$i. Це особлива специфіка PHP, і не потрібно таким чином модифікувати свій C і java-код думаючи, що він працюватиме швидше, цього не станеться. ++$i буде швидше в PHP тому, що замість чотирьох команд, як у випадку з $i++, вам знадобиться лише три. Пост-інкремент зазвичай використовується при створенні тимчасових змінних, які потім збільшуються. В той час, як префіксний інкремент збільшує значення оригінальної змінної.
37. Один із способів оптимізації php-кодіув байт-код утилітою Zend Optimizer.
38. Не все повинно бути ООП, часто це зайве, оскільки кожен метод і об'єкт займає багато пам'яті. Не визначайте кожну структуру даних як клас.
39. Не сильно розбивайте методи. Думайте, що ви дійсно повторно використовуватимете. Ви завжди можете розбити код на методи пізніше, при потребі.
40. Якщо у вашому коді є функції, що виконуються дуже довго, обдумайте їх написання на C у вигляді розширення. Профілюйте свій код, профілізація покаже вам, як багато часу виконуються частини вашого коду. mod_gzip — модуль Apache, який дозволяє стискувати ваші дані на льоту і може зменшити об'єм передаваних даних до 80%.

Від себе додам, що не з усіма приведеними тут порадами я погоджуюсь.

 

 

Коментарі  

 
0 #1 KOPIHb 24.04.2012 11:45
корисна інформація
Цитувати
 

Додати коментар


Захисний код
Оновити

© 2008-2013 PHPist