Как / когда 'after_filter' работает / работает? - PullRequest
19 голосов
/ 25 февраля 2012

Я использую Ruby on Rails 3.1, и я хотел бы знать (по соображениям производительности ), запускается ли after_filter после визуализации файлов этого представления. То есть, когда пользователь обращается к URL-адресу моего приложения, соответствующий файл представления, который он / она должен отобразить, отображается перед запуском after_filter или after_filter до отображения файла представления?

Другими словами , приложение сервер начинает отправлять визуализированные данные вида пользователю перед запуском after_filter или ожидает запуска after_filter метод и только тогда он отправляет эти данные представления?

PS : я открыл этот вопрос, потому что хотел бы запустить некоторые системные обновления ( note : эти обновления не влияют на представление выходных данных и не «используются»). / "необходимо" для представления вообще) без влияния на работу конечного пользователя (например: медленная загрузка веб-страниц моего приложения).

Ответы [ 2 ]

12 голосов
/ 25 февраля 2012

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

Если вы поместите код в after_filter, это задержит весь запрос: для суммированияплохо, если поток жив, страница не доставляется.

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


Чтобы ответить на ваш первоначальный вопрос, after_filter запускается после обработки представления.

Иногда возникают проблемы, поэтому люди создали несколько фильтров before_render.

5 голосов
/ 25 февраля 2012

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

After_filters - неподходящие места для длинных задач, так как они определенно влияют на работу пользователей. Вместо этого рассмотрите использование фильтра after_filter для запуска длительной задачи delayed_job или resque для выполнения фоновой работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...