「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Laravel でのコードの最適化とパフォーマンス向上のヒント

Laravel でのコードの最適化とパフォーマンス向上のヒント

2024 年 11 月 2 日に公開
ブラウズ:266

Tips for Code Optimization and Performance Improvement in Laravel

Laravel は堅牢でエレガントなフレームワークですが、アプリケーションが成長するにつれて、パフォーマンスの最適化が不可欠になります。これは、パフォーマンスを向上させ、Laravel アプリケーションを最適化するのに役立つヒントと例を含む包括的なガイドです。

1. 積極的なロードと遅延ロード

問題: デフォルトでは、Laravel は 遅延読み込み を使用します。これにより、複数のデータベース クエリが不必要に起動される「N 1 クエリの問題」が発生する可能性があります。

最適化: eagerloadingを使用して関連データを 1 つのクエリでロードし、リレーションシップを操作する際のパフォーマンスを大幅に向上させます。

前 (遅延読み込み):

// This runs multiple queries (N 1 Problem)
$users = User::all();

foreach ($users as $user) {
    $posts = $user->posts;
}

後 (熱心な読み込み):

// This loads users and their posts in just two queries
$users = User::with('posts')->get();

重要なポイント: 関連モデルが必要になることがわかっている場合は、常に積極的読み込みを使用してください。


2. 高価なクエリにはキャッシュを使用する

問題: 同じデータ (ユーザー リスト、設定、製品カタログなど) を頻繁に取得すると、パフォーマンスのボトルネックが発生する可能性があります。

最適化: 負荷の高いクエリと計算の結果をキャッシュして、読み込み時間とデータベース クエリを削減します。

前 (キャッシュなし):

// Querying the database every time
$users = User::all();

後 (キャッシュを使用):

// Caching the user data for 60 minutes
$users = Cache::remember('users', 60, function () {
    return User::all();
});

重要なポイント: Laravel のキャッシュ システム (Redis、Memcached) を使用して、不必要なデータベース クエリを削減します。


3. データベースクエリの最適化

問題: 非効率なクエリや適切なインデックス作成の欠如により、パフォーマンスが大幅に低下する可能性があります。

最適化: 頻繁にクエリされる列には常に インデックス を追加し、必要なデータのみを使用します。

前に:

// Fetching all columns (bad practice)
$orders = Order::all();

後:

// Only fetching necessary columns and applying conditions
$orders = Order::select('id', 'status', 'created_at')
    ->where('status', 'shipped')
    ->get();

重要なポイント: 必要な列を常に指定し、データベースで頻繁にクエリされるフィールドに適切なインデックスが作成されていることを確認してください。


4. ミドルウェアの使用を最小限に抑える

問題: ミドルウェアをすべてのルートにグローバルに適用すると、不要なオーバーヘッドが追加される可能性があります。

最適化: 必要な場合にのみミドルウェアを選択的に適用します。

前 (グローバルなミドルウェアの使用):

// Applying middleware to all routes
Route::middleware('logRouteAccess')->group(function () {
    Route::get('/profile', 'UserProfileController@show');
    Route::get('/settings', 'UserSettingsController@index');
});

後 (ミドルウェアの選択的使用):

// Apply middleware only to specific routes
Route::get('/profile', 'UserProfileController@show')->middleware('logRouteAccess');

重要なポイント: ミドルウェアは、パフォーマンスへの影響を避けるために必要な場合にのみ適用する必要があります。


5. 大規模なデータセットのページネーションを最適化する

問題: 大きなデータセットを一度に取得して表示すると、メモリ使用量が多くなり、応答が遅くなる可能性があります。

最適化: ページネーションを使用して、リクエストごとにフェッチされるレコードの数を制限します。

前 (すべてのレコードを取得):

// Fetching all users (potentially too much data)
$users = User::all();

後 (ページネーションを使用):

// Fetching users in chunks of 10 records per page
$users = User::paginate(10);

重要なポイント: データベースの負荷を回避し、メモリ使用量を削減するために、大規模なデータセットをページ分割します。


6. 長時間実行タスクをキューに入れる

問題: 電子メールの送信やレポートの生成などの長時間実行タスクにより、リクエストと応答の時間が遅くなります。

最適化: キューを使用してタスクをオフロードし、バックグラウンドで非同期に処理します。

前 (同期タスク):

// Sending email directly (slows down response)
Mail::to($user->email)->send(new OrderShipped($order));

後 (キューに入れられたタスク):

// Queuing the email for background processing
Mail::to($user->email)->queue(new OrderShipped($order));

重要なポイント: 応答時間を短縮するために、時間に依存しないタスクにはキューを使用します。


7. ルート、構成、およびビューのキャッシュを使用する

問題: ルート、構成、またはビューをキャッシュしないと、特に実稼働環境でパフォーマンスが低下する可能性があります。

最適化: 実稼働環境でのパフォーマンスを高速化するためにルート、構成ファイル、ビューをキャッシュします。

コマンドの例:

# Cache routes
php artisan route:cache

# Cache configuration files
php artisan config:cache

# Cache compiled views
php artisan view:cache

重要なポイント: アプリケーションのパフォーマンスを高速化するために、運用環境では構成、ルート、ビューを常にキャッシュします。


8.compact() を使用してコードをクリーンアップする

問題: 複数の変数を手動でビューに渡すと、コードが冗長で管理が難しくなる可能性があります。

最適化: compact() を使用して、複数の変数をビューに渡すプロセスを簡素化します。

前に:

return view('profile', [
    'user' => $user,
    'posts' => $posts,
    'comments' => $comments,
]);

後:

return view('profile', compact('user', 'posts', 'comments'));

重要なポイント: Compact() を使用すると、コードがより簡潔になり、保守が容易になります。


9. セッションおよびキャッシュストレージに Redis または Memcached を使用する

問題: セッションとキャッシュ データをファイル システムに保存すると、トラフィックの多い環境ではアプリケーションの速度が低下します。

最適化: パフォーマンスを向上させるには、RedisMemcached などの高速なメモリ内ストレージ ソリューションを使用します。

Redis の設定例:

// In config/cache.php
'default' => env('CACHE_DRIVER', 'redis'),

// In config/session.php
'driver' => env('SESSION_DRIVER', 'redis'),

重要なポイント: 本番環境、特にトラフィックの多いアプリケーションでは、セッションとキャッシュにファイル ドライバーを使用しないでください。


10. 必要な場合を除き、生のクエリの使用を避ける

問題: 生の SQL クエリを使用すると、コードが読みにくくなり、保守が困難になる可能性があります。

最適化: 可能な限り Laravel の Eloquent ORM またはクエリ ビルダーを使用しますが、生のクエリが必要な場合は、それらが最適化されていることを確認してください。

前 (生のクエリ):

// Using raw query directly
$users = DB::select('SELECT * FROM users WHERE status = ?', ['active']);

後 (Eloquent または Query Builder を使用):

// Using Eloquent ORM for better readability and maintainability
$users = User::where('status', 'active')->get();

重要なポイント: 絶対に必要な場合を除き、生のクエリよりも Eloquent ORM を優先します。


11. 効率的なログレベルの使用

問題: 常にすべてをログに記録すると、パフォーマンスが低下し、ストレージがいっぱいになる可能性があります。

最適化: 運用環境で適切なログ レベルを設定し、必要なもの (エラーや重要なメッセージなど) のみをキャプチャします。

例:

// In .env file, set log level to 'error' in production
LOG_LEVEL=error

重要なポイント: 不必要なストレージ使用量やパフォーマンスへの影響を避けるために、運用環境で必要なものだけをログに記録します。


最終的な考え

Laravel のパフォーマンスを最適化することは、スケーラブルで効率的なアプリケーションにとって非常に重要です。これらのベストプラクティスを実装することで、Laravel アプリの実行速度が向上し、より多くのトラフィックを処理し、より良いユーザー エクスペリエンスを提供できるようになります。

ご意見をお聞かせください。または、Laravel アプリケーションを最適化するための独自のヒントやコツを遠慮なく共有してください。

コーディングを楽しんでください! ?

リリースステートメント この記事は次の場所に転載されています: https://dev.to/harish_kumars_9c58df6fcc/10-tips-for-code-optimization-and-performance-improvement-in-laravel-1e99?1 侵害がある場合は、study_golang@163 までご連絡ください。 .comを削除してください
最新のチュートリアル もっと>

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

Copyright© 2022 湘ICP备2022001581号-3