」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Laravel 中程式碼優化和效能改進的技巧

Laravel 中程式碼優化和效能改進的技巧

發佈於2024-11-02
瀏覽:980

Tips for Code Optimization and Performance Improvement in Laravel

Laravel 是一个强大而优雅的框架,但随着应用程序的增长,优化其性能变得至关重要。这是一份包含提示和示例的综合指南,可帮助您提高性能并优化 Laravel 应用程序。

1. 预加载与延迟加载

问题:默认情况下,Laravel 使用延迟加载,这可能会导致“N 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 或查询生成器):

// 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如有侵犯,請聯絡[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3