Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Senior: питання на співбесіді з теми «Blade»

Питання з реальних співбесід з відповідями: Laravel і PHP, бази даних, JavaScript і фронтенд, Git, Docker, API, безпека й архітектура. Тими самими темами, що й тести.

1 питання

Blade компілює шаблони в звичайний PHP і кешує в storage/framework/views, тож сам синтаксис майже нічого не коштує. Повільними сторінки роблять інші речі.

Що зазвичай гальмує:

  • Запити з шаблонів. $post->author->name у циклі без with() - N+1, найчастіша причина. Model::preventLazyLoading() ловить це в розробці.
  • Сотні компонентів. Кожен компонент з класом - створення об'єкта через контейнер, злиття атрибутів, окремий шаблон. Таблиця на 500 рядків з п'ятьма компонентами в рядку - тисячі рендерів.
  • Вкладені Livewire-компоненти в циклі - кожен зі своїм станом і запитами.
  • @include у великих циклах і важкі обчислення в шаблоні.
  • Перший запит після деплою, якщо шаблони не прекомпільовані.

Як виміряти: Debugbar чи Telescope показують кількість і час шаблонів і запитів; профайлер (SPX, Blackfire, Xdebug) - де саме витрачено час. Корисно порівняти час до рендеру й сам рендер.

Що робити:

  • php artisan view:cache (входить в optimize) на деплої;
  • жадібно завантажувати дані в контролері й передавати в шаблон готове;
  • у великих списках - простіший HTML замість глибоко вкладених компонентів; анонімні компоненти дешевші за компоненти з класом;
  • кешувати фрагменти, що рідко змінюються (Cache::remember навколо view()->render()), або всю гостьову сторінку на рівні CDN;
  • пагінація замість виводу всього.

Після змін - знову виміряти: оптимізація без вимірювань часто прискорює не те.

Докладніше в документації: Оптимізація завантаження представлень