«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Советы по оптимизации кода и повышению производительности в Laravel

Советы по оптимизации кода и повышению производительности в Laravel

Опубликовано 2 ноября 2024 г.
Просматривать:511

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 для хранения сеансов и кэша.

Проблема: хранение сеансов и данных кэша в файловой системе замедляет работу приложения в средах с высоким трафиком.

Оптимизация: используйте быстрые решения для хранения данных в памяти, такие как Redis или Memcached для повышения производительности.

Пример конфигурации для Redis:

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

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

Ключевой вывод: избегайте использования файлового драйвера для сеансов и кэширования в рабочей среде, особенно в приложениях с высоким трафиком.


10. Избегайте использования необработанных запросов без необходимости

Проблема: использование необработанных SQL-запросов может сделать ваш код менее читабельным и усложнить поддержку.

Оптимизация: по возможности используйте Laravel Eloquent ORM или Query Builder, но если необходимы необработанные запросы, убедитесь, что они оптимизированы.

До (необработанный запрос):

// 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