Оптимизация PHP кода | 16.03.2017. Оптимизация php кода


10 советов по оптимизации PHP-кода — Записки Web-разработчика

Для обеспечения максимальной производительности PHP-скриптов необходимо учитывать несколько особенностей языка. В этом посте я предлагаю некоторые практические советы по PHP оптимизации, которые вам могут пригодиться.

10 советов по оптимизации PHP-кода:

  1. echo работает быстрей printEcho работает немного быстрее print, потому что конструкция echo не предполагает установку возвращаемого значения. Print ведёт себя как функция, хотя и не является «настоящей» функцией (это конструкция языка), и всегда возвращает значение 1.
  2. Оптимизируйте вывод черезНе используйте конкатенацию при выводе через echo. Заключайте строки в одинарные кавычки, когда в ней нет переменных. Используйтеecho 'var1=',$var1, ' var2=',$var2;вместоecho "var1=$var1 var2= $var2";
  3. ++$I работает быстрее, чем $I++Это связано с особенностями реализации языка PHP. Постинкремент ($I++) создает одну временную переменную, в то время как преинкремент (++$I) непосредственно изменяет саму переменную.
  4. Закрывайте неиспользуемые соединения с базой данных.Зачем оставлять соединение с базой, если Вы получили все необходимые данные? Если вовремя не закрывать неиспользуемые соединения, можно исчерпать лимит соединений. Конечно же речь идет о высоконагруженных проектах.
  5. Используйте require() вместо require_once() где это возможно.Использование require() вместо require_once() хоть и позволяет выиграть в скорости, но может оказаться лишней головной болью, если Вам потребуется в большом проекте отслеживать не подключен где-либо уже этот файл.
  6. ELSE IF работает быстрей,чем SWITCH
  7. Указывайте полные пути к файламПри подключении файлов указывайте абсолютный путь к файлам – при этом не тратится время на преобразование относительного пути.
  8. Подавления ошибок с помощью @ идет очень медленноСтарайтесь исключить все возможные ошибки.
  9. Удаляйте свои переменные для освобождения памятиНесомненно необходимо удалять ненужные переменные для освобождения памяти, тем более, если это большие массивы. Тут не все однозначно и зависит от ситуации.
  10. Используйте кеширование 90% работы вашего приложения – это рутинное, повторяющееся извлечение данных. Используйте кеширование (например, memcached или eAccelerator).

Вот такие простые советы по оптимизации PHP-кода, которые должен знать каждый.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

web-profi.by

40 советов по оптимизации вашего PHP-кода


  Навигация

  Наши темы
Размещено 07/04/2008
Всем доброго времени суток.
  1. Если метод может быть статическим, объявляйте его статическим.
  2. echo быстрее, чем print.
  3. Передавайте в echo несколько параметров, вместо того, чтобы использовать конкатенацию строк.
  4. Устанавливайте максимальное количество проходов ваших циклов for до цикла, а не во время его выполнения.
  5. Удаляйте свои переменные для освобождения памяти, тем более, если это большие массивы.
  6. Остерегайтесь магических методов, таких как __set, __get, __autoload.
  7. require_once дорого обходится.
  8. Указывайте полные пути в конструкциях include/require, меньше времени будет тратится на поиск файла.
  9. Если вам необходимо определить время, когда скрипт был запущен, используйте $_SERVER[’REQUEST_TIME’] вместо time().
  10. Старайтесь использовать strncasecmp, strpbrk и stripos вместо регулярных выражений.
  11. str_replace быстрее, чем preg_replace, но strtr быстрее, чем str_replace.
  12. Если функция, как и функции замены строк, может принимать в аргументы как массивы, так и одиночные символы, и если ваш список аргументов не слишком длинный, подумайте над тем, чтобы записать несколько одинаковых выражений замены, проходя один символ за раз, вместо одной строки кода, которая принимает массив как аргумент поиска и замены
  13. Лучше выбирать утверждения при помощи конструкции else if, чем использовать несколько конструкций if.
  14. Подавление ошибок при использовании @ работает очень медленно.
  15. Используйте модуль Apache mod_deflate.
  16. Закрывайте свои соединения с БД, когда закончите работать с ними.
  17. $row[`id`] в семь раз быстрее, чем $row[id].
  18. Сообщения об ошибках дорого стоят
  19. Не используйте функции внутри условия цикла for, например как здесь: for ($x=0; $x
  20. Инкремент локальной переменной в методе - самый быстрый. Почти также работает инкремент локальной переменной в функции.
  21. Инкремент глобальной переменной в два раза медленее, чем локальной.
  22. Инкремент свойства объекта (т.е. $this->prop++) в три раза медленнее, чем локальной переменной.
  23. Инкремент неопределённой переменной в 9-10 раз медленнее, чем заранее инициализированной.
  24. Объявление глобальной переменной, без использования её в функции, также замедляет работу (примерно на ту же величину, что и инкремент локальной переменной). Вероятно, PHP осуществляет проверку на существование переменной.
  25. Скорость вызов метода, судя по всему, не зависит от количества методов, определённых в классе. Я добавил 10 методов в тестовый класс (до и после тестового метода), без изменения производительности.
  26. Методы в производных классах работают быстрее, чем они же, определённые в базовом классе.
  27. Вызов функции с одним параметром и пустым телом функции в среднем равняется 7-8 инкрементам локальной переменной ($localvar++). Вызов похожего метода, разумеется, около 15 инкрементов.
  28. Ваши строки, определённые при помощи `, а не ", будут интерпретироваться чуть быстрее, т.к. PHP ищет переменные внутри "..", но не `...`. Конечно, вы можете использовать это только тогда, когда в вашей строке нет переменных.
  29. Строки, разделённые запятыми, выводятся быстрее, чем строки, разделённые точкой. Примечание: это работает только с функцией echo, которая может принимать несколько строк в качестве аргументов.
  30. PHP-скрипты будут обрабатываться, как минимум, в 2-10 раз медленнее, чем статические HTML-страницы. Попробуйте использовать больше статических HTML-страниц и меньше скриптов.
  31. Ваши PHP-скрипты перекомпилируются каждый раз, если скрипты не кэшируются. Кэширование скриптов обычно увеличивает производительность на 25-100% за счёт удаления времени на компиляцию.
  32. Кэшируйте, насколько это возможно. Используйте memcached — это высокопроизводительная система кэширования объектов в памяти, которая повышает скорость динамических веб-приложений за счёт облегчения загрузки БД. Кэшированный микрокод полезен тем, что позволяет вашему скрипту не компилироваться снова для каждого запроса.
  33. При работе со строками, когда вам понадобится убедиться в том, что строка определённой длины, вы, разумеется, захотите использовать функцию strlen(). Эта функция работает очень быстро, ведь она не выполняет каких-либо вычислений, а лишь возвращает уже известную длину строки, доступную в zval-структуре (внутренняя структура C, используемая при работе с переменными в PHP). Однако потому, что strlen() — функция, она будет работать медленно за счёт вызова некоторых операций, таких как приведение строки в нижний регистр и поиска в хэш-таблице, только после которых будут выполнены основные действия функции. В некоторых случаях вы сможете ускорить свой код за счёт использования хитрости с isset().Было: if (strlen($foo) Стало: if (!isset($foo{5})) { echo "Foo is too short"; }Вызов isset() быстрее, чем strlen() потому, что, в отличие от strlen(), isset() - не функция, а языковая конструкция. За счёт этого isset() не имеет практически никаких накладных расходов на определение длины строки.
  34. Инкремент или декремент переменной при помощи $i++ происходит немного медленнее, чем ++$i. Это особая специфика PHP, и не нужно таким образом модифицировать свой C и Java-код думая, что он будет работать быстрее, этого не произойдёт. ++$i будет быстрее в PHP потому, что вместо четырёх команд, как в случае с $i++, вам понадобится только три. Пост-инкремент обычно используется при создании временных переменных, которые затем увеличиваются. В то время, как пре-инкремент увеличивает значение оригинальной переменной. Это один из способов оптимизации PHP-кода в байт-код утилитой Zend Optimizer. Тем не менее, это хорошая идея, поскольку не все байткод-оптимизаторы оптимизируют это, также остаётся немало скриптов, работающих без оптимизации в байткод.
  35. Не всё должно быть ООП, часто это излишне, поскольку каждый метод и объект занимает много памяти.
  36. Не определяйте каждую структуру данных как класс, массивы бывают очень полезны
  37. Не слишком разбивайте методы. Думайте, что вы действительно будете повторно использовать.
  38. Вы всегда можете разбить код на методы позже, по необходимости.
  39. Используйте бесчисленное количество предопределённых функций.
  40. Если в вашем коде есть функции, выполняющиеся очень долго, обдумайте их написание на C в виде расширения
  41. Профилируйте свой код. Профилирование покажет вам, как много времени выполняются части вашего кода.
  42. mod_gzip — модуль Apache, который позволяет сжимать ваши данные на лету и может уменьшить объем передаваемых данных до 80%.
  43. Расширенная статья об оптимизации, автор John Lim.

    От себя добавлю, что не со всеми из приведённых здесь советов я согласен. Но перевод есть перевод.

Автор: serkysИсточник: habrahabr

 
  Логин
Не зарегистрировались? Вы можете сделать это, нажав здесь. Когда Вы зарегистрируетесь, Вы получите полный доступ ко всем разделам сайта.

docwin.ru

Оптимизация PHP кода | SEM NEWS

Как не горько это говорить, однако в документации по PHP часто замечается одна ошибка, которую почти все перенимают: повсюду используются двойные кавычки для работы со строками. В чем отличие между одинарными и двойными кавычками? Одинарные кавычки рассматриваются как однородный текст, и что находится между открывающей, и закрывающей кавычкой интерпретатор даже не хочет знать. В двойных кавычках могут находиться, так сказать, интерпретируемые символы: переменные, символы табуляции, перевод каретки и тому подобное. Понятное дело, такую строку перед выполнением любых действий с ней необходимо разбирать на наличие в ней таких элементов, проверяя каждый символ. Понятно, что проверять каждый символ не самое лучшее в плане быстродействия решение.

Оптимизация PHP кода также включает:

* Экономия переменных. Эта рекомендация касается любого языка программирования. Не нужно создавать переменные, которые не являются крайне необходимыми. Однако, если одна и та же строка будет неким образом сгенерирована программой, или выводиться в нескольких местах, тогда, понятное дело, не следует использовать переменную. Причем не следует забывать о том, что эту переменную, после последнего ее использования, таким образом, можно использовать для других целей. Еще один пример: вычислить сумму нескольких чисел, переданных пользователем. Вообще достаточно одной переменной, которая будет хранить в себе сумму, однако в некоторых случаях с точки зрения безопасности функциональности можно использовать дополнительную переменную, для проверки корректности значений, или их предварительной обработки;

* Функции вывода. В PHP существует несколько способов вывода информации в консоль, или браузер: Echo, Print, Printf. Оптимальным по быстродействию вариантом считается использование Echo. Printf – вообще очень неспешный товарищ, так как предназначен для форматного вывода информации, также как и двойные кавычки вместо одинарных требует дополнительных операций во время работы. Относительно Print, то в результате того, что возвращается как результат вызова или если был успешным вывод, он немножко отстает от Echo;

* Статический текст. Если необходимо выводить статический текст, особенно в больших количествах, то оптимальным вариантом является его размещение за пределами тегов, так как известно, что такой текст не обрабатывается процессором PHP, да и передается без изменений и максимально быстро. Однако, следует остерегаться слишком большого количества переходов к статическому тексту, так как для небольших фрагментов текста, которые будут выводиться статически с большим количеством дополнительного PHP -кода, возможна даже потеря быстродействия;

* Лишние символы. Как показывают результаты тестов, уменьшение длины имен переменных может улучшить быстродействие. Особенно заметным является переход между именами длиной до 7 символов и длиннее 7 символов. Поэтому можно рекомендовать, где это только возможно без потери понимания написанного в коде, пользоваться именами переменных короче 7 символов. Следует также избегать лишних пробелов и пустых строк в тексте программы, так как это хоть и не значительно, однако влияет на быстродействие. Однако, понятно, что наличие не только комментариев, но и форматирование текста программы во время разработки и для дальнейшей поддержки могут быть крайне необходимыми.

sem-news.ru


Prostoy-Site | Все права защищены © 2018 | Карта сайта