after_filter
запускается после того, как шаблон был преобразованный в html, но до, что html отправляется как ответ клиенту. Итак, если вы делаете что-то медленное, например, делая удаленный HTTP-запрос, это замедлит ваш ответ, так как ему нужно дождаться завершения этого удаленного запроса: другими словами, удаленный запрос заблокирует ваш ответ.
Чтобы избежать блокировки, можно раскошелиться от другого потока: взглянуть на
https://github.com/tra/spawnling
Используя это, вы бы просто изменить свой код
def remote_action
Spawnling.new do
# There is remote http request
end
end
Удаленный вызов все еще запускается до того, как ответ будет отправлен обратно, но поскольку он был разветвлен в новый поток, ответ не будет ждать возвращения удаленного запроса, это просто произойдет сразу.
Вы также можете посмотреть https://github.com/collectiveidea/delayed_job, который помещает задания в таблицу базы данных, где отдельный процесс вытащит их и выполнит их.
Не знаете, зачем вам это нужно? Можете ли вы дать больше информации о том, почему его нужно вызывать после, а не во время? Вы можете сделать api-вызов через js, который запускает это действие после того, как страница отобразится на стороне клиента. – penner
Требуется некоторое время, чтобы сделать запрос на удаленном сервере, и мне нужно вызвать это действие в фоновом режиме, например: отправка твитов через twitter api –