Как работает/работает "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 для выполнения фоновой работы.