gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:51:13 24 4
gpt4 key购买 nike

我有一个书签,使用时会将当前浏览器页面上的所有 URL 提交给 Rails 3 应用程序进行处理。我在幕后使用 Typhoeus检查每个 URL 是否返回 2XX 状态代码。目前,我通过对 Rails 服务器的 AJAX 请求启动此过程,然后等待它处理并返回结果。对于一个小集合,这非常快,但是当 URL 的数量非常大时,用户可能需要等待 10-15 秒。

我曾考虑使用延迟作业在用户线程之外处理此问题,但这似乎不是一个正确的用例。由于用户需要等到处理完成才能看到结果,而延迟作业可能需要长达五秒钟的时间才能开始作业,因此我不能保证处理会尽快发生。不幸的是,在这种情况下,这个等待时间是 Not Acceptable 。

理想情况下,我认为应该发生的是:

  • 用户点击书签
  • 数据发送到服务器进行处理
  • 一个等待页面被立即返回,同时分离一个线程来进行处理
  • 等待页面通过 ajax 定期轮询处理结果并更新等待页面(例如:“处理 567 个 URL 中的 4 个...”)
  • 一旦结果准备好,等待页面就会更新结果

  • 一些额外的细节:
  • 我正在使用 Heroku(长时间运行的进程在 30 秒后被杀死)
  • 登录用户和匿名用户都可以使用此功能

  • 这是一种典型的方法,还是有更好的方法?我应该只推出我自己的线程外处理来在处理过程中更新数据库,还是有类似 Delayed Job 之类的东西可以用于此目的(并且适用于 Heroku)?任何朝着正确方向的插入将不胜感激。

    最佳答案

    我认为你的后一个想法最有意义。我只是将每个 url-check 的处理卸载到它自己的线程(所以所有 url 检查同时运行——这应该比顺序检查快得多)。每次完成后,它都会更新数据库(确保线程不会干扰彼此的写入)。一个 AJAX 端点——正如你所说,你在客户端定期轮询——将从数据库中获取并返回已完成进程的计数。这是一个足够简单的方法,我真的不认为需要任何额外的组件。

    关于ruby-on-rails - 在用户等待时处理大量数据的最佳实践(在 Rails 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4138537/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com