Авторские права на введение на английском языке принадлежат Рейнхольду Веберу, а автор китайского перевода — Янъян (он же Давидкори). Двуязычная версия может использоваться для некоммерческого распространения, но необходимо указать автора английской версии, информацию об авторских правах и автора китайского перевода. Уровень перевода ограничен, поправьте меня.
1. Если метод можно сделать статическим, объявите его статически. Скорость можно увеличить в 4 раза.
2. echo быстрее, чем печать.
3. Используйте несколько параметров echo (перевод: означает использование запятых вместо точек) вместо конкатенации строк.
4. Определите максимальное количество циклов перед выполнением цикла for и не рассчитывайте максимальное значение каждый раз, когда он выполняется.
5. Отмените регистрацию неиспользуемых переменных, особенно больших массивов, чтобы освободить память.
6. Старайтесь избегать использования __get, __set, __autoload.
7.require_once() стоит дорого.
8. При включении файлов используйте полный путь: определение пути операционной системы займет меньше времени.
9. Если вы хотите узнать время начала выполнения скрипта (примечание: сервер получает запрос клиента), лучше использовать $_SERVER['REQUEST_TIME'] чем time().
10. Функции заменяют регулярные выражения для выполнения той же функции.
11. Функция str_replace быстрее, чем функция preg_replace, но функция strtr в четыре раза эффективнее, чем функция str_replace.
12. Если функция замены строк может принимать в качестве параметров массивы или символы, а длина параметра не слишком велика, то можно подумать о написании дополнительного фрагмента кода замены, чтобы каждый передаваемый параметр был символом, а не просто писать одну строку. кода для приема массива в качестве параметров для запросов и замен.
13. Лучше использовать оператор выборочного перехода (аннотация перевода: переключатель регистра), чем использовать несколько операторов if, else if.
14. Использование @ для блокировки сообщений об ошибках очень неэффективно.
15. Откройте модуль apache mod_deflate.
16. Соединение с базой данных должно быть закрыто по завершении ее использования.
17.$row['id'] в 7 раз эффективнее, чем $row[id].
18. Сообщения об ошибках стоят дорого.
19. Старайтесь не использовать функции в циклах for. Например, for ($x=0; $x < count($array); $x) будет вызывать функцию count() каждый раз при выполнении цикла.
20. Увеличение локальных переменных в методах происходит быстрее всего. Почти так же быстро, как вызов локальных переменных в функции.
21. Увеличение глобальной переменной происходит в 2 раза медленнее, чем увеличение локальной переменной.
22. Увеличение свойства объекта (например: $this->prop++) происходит в 3 раза медленнее, чем увеличение локальной переменной.
23. Увеличение неопределенной локальной переменной происходит в 9–10 раз медленнее, чем увеличение предопределенной локальной переменной.
24. Простое определение локальной переменной без ее вызова в функции также замедлит скорость (в той же степени, что и увеличение локальной переменной). PHP, вероятно, проверит, существует ли глобальная переменная.
25. Вызовы методов кажутся независимыми от количества методов, определенных в классе, поскольку я добавил 10 методов (как до, так и после тестирования метода), и производительность не изменилась.
26. Методы в производных классах работают быстрее, чем те же методы, определенные в базовых классах.
27. Вызов пустой функции с одним параметром занимает столько же времени, сколько увеличение локальных переменных от 7 до 8 раз. Подобный вызов метода требует около 15 операций увеличения локальной переменной.
28. Для заключения строк используйте одинарные кавычки вместо двойных, так будет быстрее. Поскольку PHP будет искать переменные в строке, заключенной в двойные кавычки, одинарные кавычки — нет. Конечно, это можно сделать только в том случае, если вам не нужно включать переменные в строку.
29. При выводе нескольких строк используйте запятые вместо точек для разделения строк, что быстрее. Примечание. Это может сделать только echo. Это «функция», которая может принимать несколько строк в качестве параметров (Аннотация: в руководстве PHP говорится, что echo — это языковая структура, а не реальная функция, поэтому функция заключена в двойные кавычки.) .
30. Apache анализирует PHP-скрипт в 2–10 раз медленнее, чем анализ статической HTML-страницы. Старайтесь использовать больше статических HTML-страниц и меньше скриптов.
31. Если сценарий не кэшируется, он будет перекомпилироваться при каждом вызове. Внедрение механизма кэширования PHP обычно может повысить производительность на 25–100 % и устранить накладные расходы на компиляцию.
32. Старайтесь кэшировать как можно больше, можно использовать memcached. Memcached — это высокопроизводительная система кэширования объектов в памяти, которую можно использовать для ускорения динамических веб-приложений и снижения нагрузки на базу данных. Кэширование OP-кодов полезно, чтобы не приходилось перекомпилировать скрипты для каждого запроса.
33. При работе со строкой и необходимости проверить, соответствует ли ее длина определенным требованиям, вы, естественно, будете использовать функцию strlen(). Эта функция выполняется довольно быстро, поскольку она не выполняет никаких вычислений и просто возвращает известную длину строки, хранящейся в структуре zval (встроенная структура данных C, используемая для хранения переменных PHP). Однако, поскольку strlen() является функцией, она будет несколько медленной, поскольку вызов функции будет проходить через множество шагов, таких как строчные буквы (Аннотация: относится к имени функции в нижнем регистре, PHP не различает имена функций в верхнем и нижнем регистре). ), поиск по хешу, Будет выполняться вместе с вызываемой функцией. В некоторых случаях вы можете использовать трюк isset(), чтобы ускорить выполнение вашего кода.
(Пример ниже)
if (strlen($foo) < 5) { echo «Foo слишком короткий»$$ }
(Сравните с советами ниже)
if (!isset($foo{5})) { echo «Foo is Too Short»$$ }
Вызов isset() происходит быстрее, чем strlen(), потому что, в отличие от последнего, isset() является языковой конструкцией, то есть что его выполнение не требует поиска функции и строчных букв. То есть на самом деле вы не тратите много ресурсов на проверку длины строки в коде верхнего уровня.
34. При увеличении или уменьшении переменной $i $i++ будет работать медленнее, чем ++$i. Это различие специфично для PHP и не распространяется на другие языки, поэтому, пожалуйста, не изменяйте свой код C или Java и не ждите, что он сразу станет быстрее, это не будет работать. ++$i быстрее, поскольку требует всего 3 инструкции (кода операции), а $i++ требует 4 инструкции. Постинкремент фактически создает временную переменную, которая впоследствии увеличивается. Приращение префикса увеличивается непосредственно на исходное значение. Это самое
35. Не обязательно объектно-ориентированное (ООП). Объектно-ориентированное часто обходится дорого, и каждый вызов метода и объекта потребляет много памяти.
36. Не все структуры данных нужно реализовывать в классах, массивы тоже полезны.
37. Не разделяйте методы слишком сильно. Подумайте хорошенько, какой код вы действительно собираетесь использовать повторно?
38. При необходимости вы всегда можете разбить код на методы.
39. Старайтесь использовать большое количество встроенных функций PHP.
40. Если в вашем коде много трудоемких функций, вы можете рассмотреть возможность реализации их как расширений C.
41. Профилируйте свой код. Чекер подскажет, какие части кода сколько времени занимают. Отладчик Xdebug включает процедуры проверки, которые оценивают общую целостность вашего кода и выявляют узкие места в вашем коде.
42.mod_zip можно использовать в качестве модуля Apache для мгновенного сжатия ваших данных и уменьшения объема передачи данных на 80%.
43. Тип процесса оптимизации, выполняемый оптимизатором PHP Zend. Об этой оптимизации следует помнить, поскольку не все оптимизаторы команд выполняют одинаковую оптимизацию, и существует большое количество интернет-провайдеров (ISP) и серверов, на которых оптимизаторы команд не установлены. Еще одна замечательная статья об оптимизации PHP, написанная Джоном Лимом.