Мой сайт имеет панель навигации с виджетом расширенного поиска (рядом с полем поиска), который отображается на каждой странице.Для каждого запроса context_processor
создает форму, чтобы она была доступна на этой странице в панели навигации.Эта форма имеет около десятка вариантов выбора, в общей сложности несколько сотен вариантов.Большинство из этих опций предназначены для выбора валюты и страны, а также около 80 других опций.Существует еще больший список для «магазинов», но он загружается через AJAX, поэтому здесь это не должно быть фактором.
Производительность была хорошей на Django 1.8, но после обновления до 1.11 (Pyton 2.7.15),В NewRelic я заметил, что в моем наиболее частом запросе теперь используется более 500 мс:
- Render / django / forms / widgets / select_option.html
- Render / django/forms/widgets/select.html
- Визуализация / django / forms / widgets / attrs.html

ThisПохоже, что это связано с изменением 1.11 в Визуализация виджетов на основе шаблонов ( docs ), однако единственные страницы, на которых я мог найти информацию о связанных проблемах, были о панели инструментов Django, которой я не занимаюсьзапустить в производстве.
Я уже использую Cached Template Loader (который теперь используется по умолчанию), однако я не знаю, поможет ли это здесь.Я не могу легко кэшировать эту форму, потому что, как вы можете видеть из кода, я установил ряд значений по умолчанию на основе запроса.
Почему моя форма так сильно страдает от этого изменения?Избавление от двух самых больших выборок помогает, но, конечно, несколько сотен опций не должны занимать так много времени для рендеринга, поэтому мне кажется, что есть основная проблема, заключающаяся в том, что количество просто усугубляется.
Вот ссылки на код дляполная форма и HTML.(Я включу фрагменты в вопрос позже, когда мы определим проблему, для будущих читателей).