Как работает/работает "after_filter"?

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

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

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

Ответы

Ответ 1

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

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

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


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

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

Ответ 2

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

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