Ruby Mechanize在第一个get请求之后是如何快速的?
我最近第一次用Ruby的Mechanize gem编程了一个刮刀。它必须点击服务器(一些'xyz.com/a/number'),该服务器上的数字将由脚本生成。例如'xyz.com/a/2'和'xyz.com/a/3'。 结果表明,第一个请求花费了很多时间——在512kbps的连接上大约需要1.5秒。但下一个请求在0.3毫秒内完成Ruby Mechanize在第一个get请求之后是如何快速的?,ruby,web-scraping,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.4
怎么能做得这么快?它有缓存机制吗?请求之间的速度变化可能有很多原因。我立刻想到了几个:
- DNS查找缓存在客户端上。第一个调用必须将“xyz.com”转换为“123.45.67.89”,涉及DNS查找,这可能很慢
- HTTP保持活动状态。客户机和服务器之间有一个初始对话,用于启动HTTP数据传输。在高延迟连接上,您会注意到这一点。若服务器和客户端都遵守HTTP保持活动,那个么可以建立一次连接以覆盖多个请求
- 服务器端缓存。您正在抓取的服务器使用缓存来加速多个类似的请求。例如,它可能缓存与当前会话相关的数据,甚至在第一次请求之前还没有完全编译脚本
- 服务器端VM资源分配。如果服务器在虚拟化系统上共享空间,并且不提供高流量服务,那么在第一个请求确保所有内容都在RAM中并分配了CPU后,它可能会变得更加响应