Каталог открывается...
 
Уведомления
Очистить всё

Каталог открывается 2,5 секунды, bullet молчит. Куда смотреть?

4 Сообщения
3 Пользователи
2 Реакции
409 Просмотры
Улугбек Е.
Сообщения: 10
Автор темы
Разобрался с блоками junior-разработчик
Присоединился: 1 год назад
[#103]

джун, первый год. страница каталога, 48 товаров, на проде открывается 2,5 секунды. bullet поставил, N+1 не находит. в логе:

Completed 200 OK in 2480ms (Views: 2310.4ms | ActiveRecord: 96.2ms)

база вроде быстрая, а что тогда медленное? Rails 8.1, Hotwire


3 ответа
TimurK62
Сообщения: 31
Читает чужие PR бэкенд-разработчик
Присоединился: 3 года назад

Раз Views 2,3 секунды, а база 96 мс, смотрите в рендер. Поставьте rack-mini-profiler вместе с stackprof и откройте страницу с ?pp=flamegraph, станет видно, какой partial и какой хелпер едят время. Частые причины: partial рендерится в цикле по одному, хелпер внутри карточки что-то читает с диска или ходит в кэш на каждый товар, варианты картинок генерируются прямо при рендере.


Ответ
Улугбек Е.
Сообщения: 10
Автор темы
Разобрался с блоками junior-разработчик
Присоединился: 1 год назад

нашёл. в карточке хелпер для цены каждый раз заново читал и парсил yaml со справочником валют, 48 раз на страницу. вынес загрузку в константу при старте и ещё перевёл рендер на коллекцию с кэшем:

<%= render partial: "products/product", collection: @products, cached: true %>

теперь 180 мс холодная, 60 мс из кэша


Ответ
Валерий40
Сообщения: 33
Читает чужие PR фулстек-разработчик
Присоединился: 4 года назад

cached: true для коллекции вообще недооценённая штука: все ключи читаются из кэша одним запросом, а не по одному на товар.


Ответ