Laravel красивый, но жрёт ресурсы как не в себя, если писать говнокод. Eloquent превращает простую выборку в карнавал запросов, Blade — в тормознутый шаблонизатор с логикой уровня бизнес-правил. Давай разберём, где всё ломается и что делать, чтобы не превратить проект в печку для сжигания серверных ядер.
Eloquent: красиво, но медленно, если не думать
1. N+1 — классика жанра
Самый популярный способ положить базу. Ты берёшь список пользователей, а для каждого дергаешь ещё и профиль. В итоге вместо одного запроса у тебя сотня.
// Плохо — N+1 $users = User::all();
foreach ($users as $user) {
echo $user->profile->name;
}
// Хорошо — eager loading $users = User::with('profile')->get();
foreach ($users as $user) {
echo $user->profile->name;
}
Без with() база умирает медленно и мучительно.
2. Query Builder вместо «магии»
Eloquent крут, пока запросы простые. Но как только начинается «пять джойнов и фильтр по подзапросу» — ORM рожает монстра.
$users = DB::table('users')
->join('profiles', 'users.id', '=', 'profiles.user_id')
->select('users.*', 'profiles.name')
->get();
Да, выглядит скучно, но работает быстрее и без сюрпризов.
3. Кэшируй или умри
Если у тебя админка каждый раз грузит список пользователей с фильтрацией, ты сам себе враг. Вынеси это в кэш.
$users = Cache::remember('users', 60, fn () => User::all());
Секунда экономии на каждом запросе превращается в часы экономии серверного времени.
Blade: не превращай шаблон в контроллер
1. Компоненты вместо копипаста
Вместо того чтобы копировать 20 строк для юзера везде, сделай компонент:
<x-user :user="$user" />
Менять код потом будешь в одном месте, а не бегать по всем шаблонам.
2. Не лепи логику в шаблон
Blade позволяет написать хоть SQL прямо в фигурных скобках, но ты же не идиот.
{{-- Плохо --}}
{{ $user->posts->count() }}3. @once — но осторожно
Полезная директива, чтобы не дублировать куски. Но если начинаешь городить в ней счётчики и бизнес-логику — значит, делаешь что-то не там.
@once
@php $total = 0; @endphp
@endonce
@foreach ($items as $item)
@php $total += $item->price; @endphp
@endforeach
<p>Total: {{ $total }}</p>
Итог
Laravel — удобный, но из коробки он медленный, если относиться к нему как к магии.
- Eloquent без
with()— это пуля в голову базе. - Query Builder — не стыдно, а спасение.
- Blade — это шаблон, а не место для бизнес-логики.
Хочешь, чтобы проект жил долго и не падал от первой же нагрузки? Оптимизируй. Не потому что «так правильно», а потому что серверы не бесплатные, а пользователи не будут ждать, пока твой Blade родит страницу.
0 комментариев