我以 Typhoeus 为例,但代码可以是 Ruby 中的任何内容。假设有 10000 个 url,如下所示:
http://example.com/somerandomstringwithoutextension
- url 可以是任何内容类型——视频、html、图像,任何东西。
- 我只需要加载 html 文档并忽略其余的以提高速度和内存效率。
如果我在 5 GB 视频上运行以下代码,它会导致应用程序崩溃,因为它会尝试将整个视频加载到内存中。
res = Typhoeus::Request.new(url, timeout: 15, followlocation: true).run
如果我首先在每个 url 上发出 HEAD 请求以确定它的内容类型和内容大小,它将有助于解决内存问题,但它将花费几乎两倍的时间(头部请求为 0.7 秒,实际请求为 0.7 秒)
有什么方法可以在 Ruby 中发出 http 请求,观察它当前传输的内容大小并在达到一定限制时丢弃它?例如,如果请求大于 5 MB,则丢弃请求?或者,根据它的内容类型删除它。