Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Mechanize在第一个get请求之后是如何快速的?_Ruby_Web Scraping_Mechanize - Fatal编程技术网

Ruby Mechanize在第一个get请求之后是如何快速的?

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

我最近第一次用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保持活动,那个么可以建立一次连接以覆盖多个请求

  • 服务器端缓存。您正在抓取的服务器使用缓存来加速多个类似的请求。例如,它可能缓存与当前会话相关的数据,甚至在第一次请求之前还没有完全编译脚本

  • 服务器端VM资源分配。如果服务器在虚拟化系统上共享空间,并且不提供高流量服务,那么在第一个请求确保所有内容都在RAM中并分配了CPU后,它可能会变得更加响应

这绝非详尽无遗。上面的例子只是为了说明这种行为——最初的响应速度慢,然后是更快的响应——在web服务中非常常见,并且有多种原因