PHP パフォーマンスを最適化することで、Web アプリケーションがスムーズに実行され、迅速に応答し、トラフィックを効率的に処理できるようになります。以下は、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 では、PHP 5.x と比較して実行時間が 50% 近く改善されており、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 コードをコンパイルする必要がなくなり、CPU 使用率とリクエスト時間が大幅に削減されるため、パフォーマンスが大幅に向上します。
データベースのインデックス作成が不適切であると、クエリの実行が遅くなる可能性があります。 WHERE 句または並べ替えに使用される列には必ずインデックスを付けてください。
MySQL クエリの例:
CREATE INDEX idx_user_email ON users(email);
データベース クエリをプロファイリングしてボトルネックを見つけます。たとえば、Laravel の Eloquent ORM ではクエリ プロファイリングが可能です:
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 圧縮を有効にすると、転送する必要があるデータの量が減り、その結果、ページの読み込み時間が短縮され、帯域幅の使用量が削減されます。
Cloudflare や Amazon CloudFront などの CDN は、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
Laravel の webpack.mix.js ファイルの例:
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