「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > PHP 効率の向上: パフォーマンス最適化のための実証済みのテクニック

PHP 効率の向上: パフォーマンス最適化のための実証済みのテクニック

2024 年 11 月 8 日に公開
ブラウズ:510

Boosting PHP Efficiency: Proven Techniques for Performance Optimization

PHP パフォーマンスを最適化することで、Web アプリケーションがスムーズに実行され、迅速に応答し、トラフィックを効率的に処理できるようになります。以下は、PHP のパフォーマンスを効果的に最大化する方法に関する詳細なステップバイステップのガイドであり、各最適化戦略の実践例も含まれています。


パート 1: 最新の安定した PHP バージョンに更新する

ステップ 1: 現在の PHP バージョンを確認する

まず、システムにインストールされている PHP の現在のバージョンを確認してください:

php -v

バージョンが古い場合、最新の安定した PHP バージョンにアップグレードすると、多くの場合、パフォーマンスが向上し、新機能が追加されます。

ステップ 2: 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 ではさらに大幅な改善が見られます。


パート 2: オペコード キャッシュ (PHP Opcache) を使用する

ステップ 1: PHP で Opcache を有効にする

Opcache は、プリコンパイルされたスクリプトのバイトコードをメモリに保存し、PHP がリクエストごとにスクリプトをロードして解析する必要性を減らします。有効にするには:

  1. php.ini ファイルを開きます。
   sudo nano /etc/php/8.2/fpm/php.ini # Use your PHP version
  1. Opcache 設定を見つけて有効にします。
   opcache.enable=1
   opcache.memory_consumption=128
   opcache.max_accelerated_files=10000
   opcache.revalidate_freq=0
  1. PHP-FPM と Nginx を再起動します。
   sudo systemctl restart php8.2-fpm
   sudo systemctl restart nginx

なぜ?

Opcache を使用すると、リクエストごとに PHP コードをコンパイルする必要がなくなり、CPU 使用率とリクエスト時間が大幅に削減されるため、パフォーマンスが大幅に向上します。


パート 3: データベース クエリの最適化

ステップ 1: データベーステーブルのインデックスを作成する

データベースのインデックス作成が不適切であると、クエリの実行が遅くなる可能性があります。 WHERE 句または並べ替えに使用される列には必ずインデックスを付けてください。

MySQL クエリの例:

CREATE INDEX idx_user_email ON users(email);

ステップ 2: クエリ プロファイリングを使用する

データベース クエリをプロファイリングしてボトルネックを見つけます。たとえば、Laravel の Eloquent ORM ではクエリ プロファイリングが可能です:

DB::enableQueryLog();
$users = DB::table('users')->get();
dd(DB::getQueryLog());

なぜ?

データベース クエリを最適化し、重要な列のインデックスを作成することで、クエリの実行時間を大幅に短縮し、PHP アプリケーションを高速化できます。


パート 4: Gzip 圧縮を有効にする

ステップ 1: Nginx で Gzip を有効にする

Gzip はサーバーからクライアントに送信されるデータのサイズを削減し、ページの読み込みを高速化します。 Nginx で有効にするには:

  1. Nginx 構成ファイルを開きます。
   sudo nano /etc/nginx/nginx.conf
  1. 次の Gzip 設定を追加します。
   gzip on;
   gzip_comp_level 2;
   gzip_types text/css application/javascript application/json image/svg xml;
   gzip_min_length 256;
  1. 保存して Nginx を再起動します。
   sudo systemctl restart nginx

なぜ?

Gzip 圧縮を有効にすると、転送する必要があるデータの量が減り、その結果、ページの読み込み時間が短縮され、帯域幅の使用量が削減されます。


パート 5: コンテンツ配信ネットワーク (CDN) を使用する

ステップ 1: 静的アセットの CDN を構成する

Cloudflare や Amazon CloudFront などの CDN は、CSS、JavaScript、画像などの静的アセットのコピーを世界中の分散サーバーに保存し、ユーザーの近くで利用できるようにします。

例:


なぜ?

静的コンテンツを CDN にオフロードすることで、サーバーの負荷が軽減され、世界中のユーザーの応答時間が大幅に向上します。


パート 6: PHP-FPM の使用とチューニング

ステップ 1: PHP-FPM のインストールと構成

高負荷環境向けに最適化された PHP-FPM (FastCGI Process Manager) を使用していることを確認してください:

sudo apt install php8.2-fpm

ステップ 2: PHP-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 プロセスがより多くの同時リクエストを効率的に処理できるようになり、高負荷時のサーバーの応答時間が短縮されます。


パート 7: アセットの縮小とバンドル

ステップ 1: CSS、JavaScript、HTML を縮小する

不要な空白やコメントを削除して CSS、JavaScript、HTML ファイルを縮小すると、ファイル サイズが小さくなります。

Laravel MixGulp:
などのツールを使用する

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');

ステップ 2: ブラウザのキャッシュを有効にする

Nginx 構成ファイルに、静的アセットのキャッシュを追加します:

location ~* \.(css|js|jpg|jpeg|png|gif|ico|woff|woff2)$ {
    expires 1y;
    access_log off;
    add_header Cache-Control "public";
}

なぜ?

アセットの縮小とバンドルを行うとともに、ブラウザーのキャッシュを有効にすると、ファイルのサイズが削減され、読み込み時間が短縮され、アプリケーションの高速化につながります。


パート 8: キャッシュに Redis または Memcached を使用する

ステップ 1: Redis をインストールする

Redis をインストールするには:

sudo apt install redis-server

ステップ 2: Redis を使用するように Laravel を構成する

Laravel で .env ファイルを開き、Redis をキャッシュ ドライバーとして構成します:

CACHE_DRIVER=redis

ステップ 3: データベース クエリのキャッシュ

クエリ キャッシュを使用して、データベース クエリの繰り返しを高速化します:

$users = Cache::remember('users', 60, function() {
    return DB::table('users')->get();
});

なぜ?

データベース クエリをキャッシュすると、データベースの負荷が軽減され、頻繁にアクセスされるデータの応答時間が大幅に短縮されます。


パート 9: オートローダーの最適化

ステップ 1: Composer のオートローダー最適化を使用する

本番環境向けに Composer オートローダーを最適化:

composer install --optimize-autoloader --no-dev

ステップ 2: 未使用のサービスプロバイダーをクリアする

Laravel では、config/app.php で未使用のサービスプロバイダーを無効にして、メモリ使用量を削減し、アプリケーションの起動時間を短縮します。

なぜ?

自動ロードの最適化によりクラス マップがコンパイルされ、クラスの読み込みが高速化されます。使用されていないサービスを無効にすると、アプリケーションが使用するリソースが減ります。


パート 10: モニタリングとプロファイリング

ステップ 1: Laravel Telescope (または他のプロファイリング ツール) を使用する

Laravel Telescope をインストールしてアプリケーションをプロファイリングします:

composer require laravel/telescope
php artisan telescope:install
php artisan migrate
php artisan serve

ステップ 2: New Relic または Blackfire を使用して高度なプロファイリングを行う

New RelicBlackfire などのサードパーティ ツールを統合して、アプリケーションのボトルネックやデータベースのパフォーマンスなどを分析できます。

なぜ?

モニタリング ツールとプロファイリング ツールは、PHP アプリケーションの遅いクエリ、メモリ リーク、ボトルネックを特定するのに役立ち、パフォーマンスの問題をプロアクティブに修正できます。


結論:

これらの手順に従うことで、PHP アプリケーションのパフォーマンスを大幅に向上させることができます。 PHP の更新とオペコード キャッシュの有効化から、データベース クエリの最適化と PHP-FPM の構成に至るまで、各ステップはアプリケーションの応答性とスケーラビリティの向上に貢献します。

リリースステートメント この記事は、https://dev.to/mdarifulhaque/boosting-php-efficiency-proven-techniques-for-performance-optimization-4plh?1に再現されています。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3