Может войдёшь?
Черновики Написать статью Профиль

«Blade»

Eloquent и Blade: советы по повышению производительности

перевод Eloquent blade

Одна из самых распространенных проблем с производительностью, которую я видел в Laravel - это использование методов Eloquent и отношений из шаблонов Blade, создание ненужных дополнительных циклов и запросов. В этой статье я покажу различные сценарии и способы их эффективного использования.

Сценарий 1. Загрузка отношения belongsTo(): не забудьте про «жадную загрузку»

Типичный случай — вы перебираете записи через @foreach, и, в каком-то столбце, вам нужно показать родительскую запись с определенным полем.

@foreach ($sessions as $session)
<tr>
  <td>{{ $session->created_at }}</td>
  <td>{{ $session->user->name }}</td>
</tr>
@endforeach

И, конечно, Session принадлежит User, в app/Session.php :

public function user()
{
    return $this->belongsTo(User::class)…
OlegD

по всех примерах прохого кода одна проблема — получение данных прямо в представлении, т.е. вроде бы ты уже пытаешься писать на MVC, у тебя часть логики отдельно, но упущение основ, отсутствие практики и т.п., вынуждают писать такой код, тем самым увеличивая время генерации страницы и данных.

Если говорить про представление или генерацию шаблонов, то в идеале там вообще не должно быть никакой обработки данных (манипуляции с данными), только ее отображение, на то оно и представление и не должно знать о данных.

В итоге в шаблоне остаются только данные и логика отображения, циклы данных. И одна проблема: тип используемых данных.

Работая с моделями на выходе всегда стоит коллекция и объект(ы). Мы обращаемся через →. Но если по каким-то причинам мы изменим их на другой вид, например массив, или наоборот, то придется переделывать логику отображение данных, точнее ее работу.

Если ли разница в производительности при работе с коллекциями и объектами и и работе с массивами?

Конечно, преимущества работы будет в работе с объектами, т.к. мы может предопределить/переопределить их логику работы и это не отобразится на представлении. Кроме того, мы можем сократить кусок трудновоспринимаемого кода из представлений.

← Назад | Дальше → Движется на Habravel