Задать вопрос

Как ускорить рендеринг вложенных полей simple_fields_for?

Есть две модели (товар и характеристики товара), связянные ассоциацией has_one
Есть форма - делится на две логические части
1 Для редактирования общих для всех товаров полей
2 Специфичных для данной категории полей
С первой частью вопросов нет. Пользуемся simple_form_for для вытащенной из базы записи и рендерим f.inputы. Все достаточно шустро.
Но как доходим до паршиала дополнительных полей появляются большие тормоза
Объявляю блок simple_fields_for в котором для вытащенной из базы связанной записи характеристик рендерим все те же инпуты. Так вот серверу требуется около ~100мс на рендер одного чекбокса. Я уже выбросил все лишнее из кода паршиала дополнительных полей. Оставив только рендер 20 чекбоксов. Но не тут то было WebRick утверждает, что на рендер этого паршиала уходит 2 секунды. А боевая форма висит все 6 секунд только на этом месте. Что здесь может крыться не то? (По поводу приведения кода даже не знаю - там особо смотреть не на что).
Такое ощущение, что для того, чтобы выяснить состояние чекбокса для отображения simple_form делает новый запрос к базе для каждого инпута. Лог сервера говорит, что при загрузке страницы происходит три запроса к базе: выбираем пользователя, товар, характеристики, потом идут рендеринги паршиалов...
Rails 4.2.1, simple_form_for 3.1.0
  • Вопрос задан
  • 351 просмотр
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@sunnmas Автор вопроса
Ruby
В общем я нашел решение!! Оно было на гитхабе в разделе bug reports репозитория simple_form.
What is the expected slowdown of using SimpleForm?
Там мистер nashby в марте этого года написал примерно следующее:
SimpleForm spends a lot of time for trying to translate hints and placeholders for inputs

Соответственно подставив везде placeholder: false, hint: false где только можно. Получил ускорение с 6 секунд до 780ms.
Имейте ввиду у себя в приложениях ;)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Jeiwan
@Jeiwan
Не видя кода, можно только ванговать.
6 секунд — очень много для одной формы. Причины могут быть такие:
1. Плохо составлены запросы к БД, из-за чего загрузка данных занимает слишком много времени (проблема N+1)
2. Плохо составлена структура страницы/паршиалов. Паршалы сильно замедляют рендеринг страницы, поэтому стоит оптимизировать структуру страницы и сократить количество паршиалов
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы