ruby - 第一次获取请求后,Ruby Mechanize 的速度如何?

标签 ruby web-scraping mechanize

我最近第一次用 Ruby 的 Mechanize gem 编写了一个刮刀。它必须访问服务器(一些“xyz.com/a/number”),在那里脚本会生成数字。像“xyz.com/a/2”和“xyz.com/a/3”。
结果证明第一个请求花费了很多时间——在 512kbps 连接上大约需要 1.5 秒。但是下一个请求是在 0.3 毫秒内完成的。

怎么可能做的这么快?它有一些缓存机制吗?

最佳答案

请求之间的速度变化有很多可能的来源。一些立即浮现在脑海的:

  • DNS 查找缓存在您的客户端上。第一次调用必须将“xyz.com”转换为“123.45.67.89”,这涉及可能很慢的 DNS 查找。
  • HTTP 保持事件状态。客户端和服务器之间存在初始对话以启动 HTTP 数据传输。在高延迟连接上,您会注意到这一点。如果服务器和客户端都遵守 HTTP keep-alive,则可以建立一次连接以覆盖多个请求。
  • 服务器端缓存。您正在抓取的服务器使用缓存来加速多个类似的请求。例如,它可能正在缓存与您当前 session 有关的数据,或者甚至在您的第一个请求之前还没有完全编译脚本。
  • 服务器端虚拟机资源分配。如果服务器在虚拟化系统上共享空间,并且不提供高流量,那么在第一个请求确保所有内容都在 RAM 中并分配了 CPU 后,它可能会变得更加敏感。

  • 这绝不是详尽无遗的。上面的例子只是为了说明这种行为 - 最初的响应缓慢,然后是更快的响应 - 对于 Web 服务来说非常普遍,并且有多种原因。

    关于ruby - 第一次获取请求后,Ruby Mechanize 的速度如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30474503/

    相关文章:

    python - 如何抓取实时计算的值

    python - Scrapy - 连接以非干净的方式丢失。跨单个域不一致

    python - 需要帮助指定结束 while 条件

    ruby - Mechanize 在登录页面找不到表单

    ruby - 安装iruby时出现rbczmq错误

    ruby - 如何转换法语字符的大小写

    ruby-on-rails - Sidekiq 的提醒通知

    javascript - form_for 表单的字符计数器未实时更新计数

    java - 获取span标签的标题

    Python,使用 mechanize 时出现 "Out of memory"错误