Как заставить PHP работать быстрее, еще до того как создать продукт, несколько правил

Некоторые условные правила, которые помогут оптимизировать ваш код еще до того как вы начали «калацать» по своим кнопочкам.

php-personal-home-pages-speedup-optimizing

Для ускорения отработки PHP

  • Если метод может быть статичным, делайте его статичным. Скорость увеличиться в 4 раза
  • echo быстрее чем print
  • Используйте echo без точек (без конкатенации), используйте так : echo «some», «some»; мультипараметр
  • Установите максимальное значение для ваших циклов for до, а не в цикле.
  • Сбросьте ваши переменные, чтобы освободить память, особенно большие массивы. (unset)
  • Избегайте магии, как __get, __set, __autoload
  • require_once () затратный
  • Использование полных путей включает и требует меньше времени, затрачиваемого на разрешение путей ОС
  • Если вам нужно выяснить время, когда скрипт начал выполняться, $_SERVER [REQUEST_TIME] предпочтительнее time ()
  • Посмотрите, можете ли вы использовать strncasecmp, strpbrk и stripos вместо regex
  • str_replace быстрее, чем preg_replace, но strtr быстрее, чем str_replace, в 4 раза
  • Если функция, такая как функция замены строк, принимает в качестве аргументов как массивы, так и отдельные символы, и если список аргументов не слишком длинный, попробуйте написать несколько избыточных операторов замены, пропуская по одному символу за раз вместо одной строки кода. который принимает массивы в качестве аргументов поиска и замены.
  • Лучше использовать операторы условий select вместо multi if, else if, условий.
  • Подавление ошибок с помощью @ очень медленно.
  • Включите apache mod_deflate
  • Закройте соединения с базой данных, когда вы закончите с ними
  • $row[’id’] в 7 раз быстрее чем $row[id]
  • Сообщения об ошибках стоят дорого
  • Не используйте функции внутри цикла for, такие как for ($ x=0; $x < count ($ array); $ x) Функция count () вызывается каждый раз.
  • Увеличение локальной переменной в методе является самым быстрым. Почти так же, как вызов локальной переменной в функции.
  • Увеличение глобальной переменной в 2 раза медленнее, чем локальной переменной.
  • Увеличение свойства объекта (например, $ this->prop ++) в 3 раза медленнее, чем локальной переменной.
  • Увеличение неопределенной локальной переменной в 9-10 раз медленнее, чем предварительно инициализированная.
  • Простое объявление глобальной переменной без ее использования в функции также замедляет процесс (примерно на столько же, сколько увеличивается локальная переменная). PHP, вероятно, проверяет, существует ли глобальный объект.
  • Вызов метода, кажется, не зависит от количества методов, определенных в классе, потому что я добавил еще 10 методов в класс теста (до и после метода теста) без изменений в производительности.
  • Методы в производных классах работают быстрее, чем те, которые определены в базовом классе.
  • Вызов функции с одним параметром и пустым телом функции занимает примерно то же время, что и операции 7-8 $localvar++. Подобный вызов метода, конечно, около 15 $localvar++ операций.
  • Окружение вашей строки символом ‘ заставит вещи интерпретироваться немного быстрее вместо «, поскольку php ищет переменные внутри «, но не внутри ‘. Конечно, вы можете сделать это только тогда, когда вам не нужны переменные в строке.
  • При отражении строк быстрее разделять их запятой, а не точкой. Примечание: это работает только с echo, который может принимать несколько строк в качестве аргументов.
  • PHP-скрипт будет обслуживаться Apache как минимум в 2-10 раз медленнее, чем статическая HTML-страница. Попробуйте использовать больше статических HTML-страниц и меньше скриптов.
  • Ваши PHP-скрипты перекомпилируются каждый раз, если они не кэшированы. Установите продукт для кэширования PHP, чтобы увеличить производительность на 25-100% за счет сокращения времени компиляции.
  • Кеш как можно больше. Используйте memcached — memcached — это высокопроизводительная система кэширования объектов памяти, предназначенная для ускорения динамических веб-приложений за счет снижения нагрузки на базу данных. Кеши OP-кода полезны для того, чтобы ваш скрипт не компилировался при каждом запросе.
  • При работе со строками вам необходимо убедиться, что строка имеет определенную длину, и вам вполне понятно, что вы захотите использовать функцию strlen (). Эта функция довольно быстрая, поскольку она не выполняет никаких вычислений, а просто возвращает уже известную длину строки, доступную в структуре zval (внутренняя структура C, используемая для хранения переменных в PHP). Однако, поскольку strlen () является функцией, она все еще несколько медленная, потому что вызов функции требует нескольких операций, таких как поиск в нижнем регистре и хеш-таблица, с последующим выполнением указанной функции. В некоторых случаях вы можете повысить скорость вашего кода с помощью трюка isset ().
    1.if (strlen($foo) < 5) { echo "Foo is too short"; }
    vs.
    1.if (!isset($foo{5})) { echo "Foo is too short"; }

    Вызов isset () происходит быстрее, чем strlen (), потому что, в отличие от strlen (), isset () является языковой конструкцией, а не функцией, что означает, что для ее выполнения не требуется поиск функций и строчные буквы. Это означает, что у вас практически нет накладных расходов поверх реального кода, который определяет длину строки.

  • При увеличении или уменьшении значения переменной $i++ оказывается немного медленнее, чем ++$ i. Это что-то специфичное для PHP и не применимо к другим языкам, поэтому не стоит модифицировать ваш код на C или Java, думая, что он внезапно станет быстрее, это не будет. ++$i в PHP работает быстрее, потому что вместо 4 опкодов, используемых для $i++, вам нужно только 3. Постинкремент фактически приводит к созданию временного var, который затем увеличивается. При предварительном увеличении увеличивается исходное значение напрямую. Это одна из оптимизаций, оптимизированных для кода операции, как оптимизатор PHP Zend. Это все еще хорошая идея, чтобы иметь в виду, так как не все оптимизаторы кода операции выполняют эту оптимизацию, и есть много интернет-провайдеров и серверов, работающих без оптимизатора кода операции.
  • Не все должно быть ООП, часто это слишком много накладных расходов, каждый вызов метода и объекта занимает много памяти.
  • Не реализуйте каждую структуру данных как класс, массивы тоже полезны
  • Не разбивайте слишком много методов, подумайте, какой код вы действительно будете использовать повторно
  • Вы всегда можете разделить код метода позже, когда это необходимо
  • Используйте бесчисленные предопределенные функции
  • Если в вашем коде есть очень трудоемкие функции, подумайте о том, чтобы написать их как расширения C
  • Профилируйте свой код. Профилировщик показывает вам, какие части вашего кода занимают сколько времени. Отладчик Xdebug уже содержит профилировщик. Профилирование показывает узкие места в обзоре
  • mod_gzip, доступный в виде модуля Apache, сжимает ваши данные на лету и может сократить объем передаваемых данных до 80%.

Еще хочу добавить не испозуйте Apache, когда есть Nginx

Альтернативная версия данных правил

  • Используйте одинарные кавычки над двойными.
  • Использовать переключение много операторов if
  • Избегайте тестирования условий цикла с помощью функциональных тестов на каждой итерации, например. for($i=0;i=count($x);$i++){…
  • Используйте foreach для циклического сбора коллекций / массивов. Элементы PHP4 являются byval, больше чем элементы PHP5 byref
  • Не забудьте использовать метод Singleton при создании сложных классов PHP.
  • Используйте POST over GET для всех значений, которые попадут в базу данных по причинам производительности пакетов TCP / IP.
  • Используйте ctype_alnum, ctype_alpha и ctype_digit над регулярным выражением для проверки типов значений формы по соображениям производительности.
  • Используйте полные пути к файлам в производственной среде через basename / fileexists / open_basedir, чтобы избежать снижения производительности для файловой системы, вынужденной искать путь к файлу. После определения сериализуйте и / или кэшируйте значения пути в массиве $ _SETTINGS. $_SETTINGS[«cwd»]=cwd(./);
  • Использовать require / include поверх require_once / include_once для обеспечения правильного кэширования кода операции.
  • Используйте tmpfile или tempnam для создания временных файлов / имен файлов
  • Используйте прокси для доступа к веб-службам (XML или JSON) на чужих доменах, используя XMLHTTP, чтобы избежать междоменных ошибок.
  • Используйте error_reporting (E_ALL); во время отладки.
  • Установите Apache allowoverride равным «none», чтобы улучшить производительность Apache при доступе к файлам / каталогам.
  • Используйте быстрый файловый сервер для обслуживания статического контента (thttpd). static.mydomain.com, dynamic.mydomain.com
  • Выполняйте сериализацию параметров приложения, таких как пути, в ассоциативный массив и кэшируйте или сериализуйте этот массив после первого выполнения.
  • Используйте кеширование контроля вывода PHP для кэширования страниц с интенсивным доступом
  • Используй PDO prepare over native db prepare для заявлений. mysql_attr_direct_query => 1
  • НЕ используйте подстановочный знак SQL. например. SELECT *
  • Используйте логику базы данных (запросы, объединения, представления, процедуры) поверх зацикленного PHP.
  • Используйте сокращенный синтаксис для вставок SQL, если не используются параметры параметров PDO. например. INSERT INTO MYTABLE (FIELD1,FIELD2) VALUES ((“x”,”y”),(“p”,”q”));