Оптимизация производительности PHP обеспечивает бесперебойную работу наших веб-приложений, быстрое реагирование и эффективную обработку трафика. Ниже приведено подробное пошаговое руководство о том, как эффективно максимизировать производительность PHP, с практическими примерами для каждой стратегии оптимизации.
Начните с проверки текущей версии PHP, установленной в вашей системе:
php -v
Если ваша версия устарела, обновление до последней стабильной версии PHP часто сопровождается повышением производительности и появлением новых функций.
Чтобы установить последнюю версию PHP, выполните следующие команды для Ubuntu:
sudo apt update sudo apt install software-properties-common sudo add-apt-repository ppa:ondrej/php sudo apt install php8.2 # Replace with the latest version
Каждая новая версия PHP повышает производительность. Например, PHP 7.x обеспечивает почти 50-процентное улучшение времени выполнения по сравнению с PHP 5.x, а PHP 8.x имеет и другие значительные улучшения.
Opcache хранит предварительно скомпилированный байт-код скрипта в памяти, что снижает необходимость PHP загружать и анализировать скрипты при каждом запросе. Чтобы включить его:
sudo nano /etc/php/8.2/fpm/php.ini # Use your PHP version
opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=10000 opcache.revalidate_freq=0
sudo systemctl restart php8.2-fpm sudo systemctl restart nginx
Opcache может значительно повысить производительность, устраняя необходимость компилировать PHP-код при каждом запросе, что значительно снижает загрузку ЦП и время выполнения запроса.
Неправильная индексация базы данных может замедлить выполнение запроса. Убедитесь, что вы индексируете столбцы, используемые в предложениях WHERE или для сортировки.
Пример запроса MySQL:
CREATE INDEX idx_user_email ON users(email);
Профилируйте запросы к базе данных, чтобы найти узкие места. Например, Eloquent ORM от Laravel позволяет профилировать запросы:
DB::enableQueryLog(); $users = DB::table('users')->get(); dd(DB::getQueryLog());
Оптимизируя запросы к базе данных и индексируя критические столбцы, вы можете значительно сократить время выполнения запроса и тем самым ускорить работу PHP-приложения.
Gzip уменьшает размер данных, отправляемых с вашего сервера клиенту, ускоряя загрузку страницы. Чтобы включить его в Nginx:
sudo nano /etc/nginx/nginx.conf
gzip on; gzip_comp_level 2; gzip_types text/css application/javascript application/json image/svg xml; gzip_min_length 256;
sudo systemctl restart nginx
Включение сжатия Gzip уменьшает объем данных, которые необходимо передать, что приводит к ускорению загрузки страниц и снижению использования полосы пропускания.
CDN, такие как Cloudflare или Amazon CloudFront, хранят копии статических ресурсов, таких как CSS, JavaScript и изображения, на распределенных серверах по всему миру, что делает их доступными ближе к пользователю.
Пример:
Выгружая статический контент в CDN, вы снижаете нагрузку на свой сервер и значительно сокращаете время отклика для пользователей по всему миру.
Убедитесь, что вы используете PHP-FPM (FastCGI Process Manager), который лучше оптимизирован для сред с высокой нагрузкой:
sudo apt install php8.2-fpm
Вы можете настроить параметры PHP-FPM для эффективной обработки большего количества запросов, изменив настройки pm.max_children, pm.start_servers, pm.min_spare_servers и pm.max_spare_servers в файле конфигурации пула PHP-FPM.
Отредактируйте файл конфигурации пула:
sudo nano /etc/php/8.2/fpm/pool.d/www.conf
Увеличьте pm.max_children в зависимости от доступной памяти и трафика:
pm.max_children = 50 pm.start_servers = 10 pm.min_spare_servers = 5 pm.max_spare_servers = 20
Перезапустите PHP-FPM и Nginx:
sudo systemctl restart php8.2-fpm sudo systemctl restart nginx
PHP-FPM позволяет вашим PHP-процессам эффективно обрабатывать больше одновременных запросов, сокращая время ответа сервера при большой нагрузке.
Минимизация файлов CSS, JavaScript и HTML путем удаления ненужных пробелов и комментариев уменьшает размер файла.
Используйте такие инструменты, как Laravel Mix или Gulp:
npm install laravel-mix --save-dev
Пример файла webpack.mix.js для Laravel:
const mix = require('laravel-mix'); mix.js('resources/js/app.js', 'public/js') .sass('resources/sass/app.scss', 'public/css') .minify('public/js/app.js') .minify('public/css/app.css');
В файле конфигурации Nginx добавьте кеширование для статических ресурсов:
location ~* \.(css|js|jpg|jpeg|png|gif|ico|woff|woff2)$ { expires 1y; access_log off; add_header Cache-Control "public"; }
Минимизация и объединение ресурсов, а также включение кэширования в браузере уменьшают размер ваших файлов и сокращают время загрузки, что приводит к более быстрому приложению.
Чтобы установить Redis:
sudo apt install redis-server
В Laravel откройте файл .env и настройте Redis в качестве драйвера кэша:
CACHE_DRIVER=redis
Используйте кэширование запросов, чтобы ускорить повторные запросы к базе данных:
$users = Cache::remember('users', 60, function() { return DB::table('users')->get(); });
Кэшируя запросы к базе данных, вы снижаете нагрузку на базу данных и значительно сокращаете время ответа для часто используемых данных.
Оптимизация автозагрузчиков Composer для работы:
composer install --optimize-autoloader --no-dev
В Laravel отключите всех неиспользуемых поставщиков услуг в config/app.php, чтобы уменьшить использование памяти и ускорить загрузку приложения.
Оптимизация автозагрузки компилирует карты классов, ускоряя загрузку классов. Отключение неиспользуемых служб помогает приложению использовать меньше ресурсов.
Установите Laravel Telescope для профилирования вашего приложения:
composer require laravel/telescope php artisan telescope:install php artisan migrate php artisan serve
Вы можете интегрировать сторонние инструменты, такие как New Relic или Blackfire для анализа узких мест приложений, производительности базы данных и многого другого.
Инструменты мониторинга и профилирования помогают выявлять медленные запросы, утечки памяти и узкие места в вашем PHP-приложении, позволяя заблаговременно устранять проблемы с производительностью.
Следуя этим шагам, вы сможете значительно повысить производительность вашего PHP-приложения. От обновления PHP и включения кэширования кода операции до оптимизации запросов к базе данных и настройки PHP-FPM — каждый шаг способствует созданию более гибкого и масштабируемого приложения.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3