Tag: 长期运行流程

在用户等待时处理大量数据的最佳实践(在Rails中)?

我有一个bookmarklet,当使用时,将当前浏览器页面上的所有URL提交给Rails 3应用程序进行处理。 在幕后我使用Typhoeus来检查每个URL是否返回2XX状态代码。 目前,我通过对Rails服务器的AJAX请求启动此过程,并在处理并等待结果时等待。 对于一个小集合,这非常快,但是当URL的数量非常大时,用户可以等待,例如10-15秒。 我已经考虑过使用延迟作业来处理用户线程之外的内容,但这似乎不是正确的用例。 由于用户需要等到处理完成才能看到结果,并且延迟作业可能需要在作业开始之前最多五秒钟,我无法保证处理将尽快发生。 不幸的是,在这种情况下这个等待时间是不可接受的。 理想情况下,我认为应该发生的是: 用户点击bookmarklet 数据被发送到服务器进行处理 在旋转线程进行处理时,会立即返回等待页面 等待页面定期通过ajax轮询处理结果并更新等待页面(例如:“处理的567个URL中的4个…”) 一旦准备就绪,等待页面将更新结果 一些额外的细节: 我正在使用Heroku(长时间运行的进程在30秒后被杀死) 登录和匿名用户都可以使用此function 这是一种典型的方法,还是有更好的方法? 我是否应该在处理过程中滚动自己的更新数据库的线程外处理,或者是否可以使用延迟作业(可以在Heroku上使用)? 任何推动正确的方向将非常感激。