首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么第一次请求所花费的时间总是比随后的请求多10%?

为什么第一次请求所花费的时间总是比随后的请求多10%?
EN

Server Fault用户
提问于 2014-05-21 07:38:44
回答 2查看 1.6K关注 0票数 -1

示例:如果第一个请求花费大约1.32秒,那么随后的请求将大约需要1.18到1.2秒。

根据我的研究,可以通过在StartServersMinSpareThreadsMaxSpareThreads中设置apache\conf\extra\httpd-mpm.conf来改进第一个请求。

然而,没有准则提到什么数字能够真正帮助提高第一次请求的速度。

另外,一些人建议在服务器上使用以下脚本在网页上保持刷新的页面:

代码语言:javascript
复制
<html>
<head>

<script>
setTimeout(function(){
   window.location.reload(1);
}, 2000);

</script>

</head>
<body>
<iframe name="iframe" id="iframe" src="http://mywebsite:8080"></iframe> 

</body>
</html>

此页面虽然使apache忙碌,但它增加apache日志的速度更快。

因此,我是否可以知道我可以做什么操作,以便我可以有第一个请求具有相同的响应时间,甚至比随后的请求更快的响应时间?

以下是第一次请求和随后请求的情况:

代码语言:javascript
复制
10:00:01 AM Access URL http://mywebsite.com (Response time: 1.32s - First Request)

10:00:07 AM Access URL http://mywebsite.com (Response time: 1.2s - 2nd Request)

10:00:37 AM Access URL http://mywebsite.com (Response time: 1.19s - 3rd Request)

10:01:07 AM Access URL http://mywebsite.com (Response time: 1.21s - 4th Request)

10:35:35 AM Access URL http://mywebsite.com (Response time: 1.35s - First Request)

10:35:48 AM Access URL http://mywebsite.com (Response time: 1.2s - 2nd Request)

10:51:08 AM Access URL http://mywebsite.com (Response time: 1.36s - First Request)

10:51:13 AM Access URL http://mywebsite.com (Response time: 1.2s - 2nd Request)

10:51:38 AM Access URL http://mywebsite.com (Response time: 1.19s - 3rd Request)

10:52:07 AM Access URL http://mywebsite.com (Response time: 1.23s - 4th Request)

注意,在短暂的不活动时间之后,会发出一个first请求,并且响应时间会延迟。但是,随后在一分钟左右提出的请求不会有这种拖延。

谢谢。

EN

回答 2

Server Fault用户

发布于 2014-05-21 07:56:36

第一:定义第一时间。什么时候以来的第一次?

除此之外,这可能有很多原因,其中大多数是正常的,没有理由担心:

  • 文件第一次从磁盘读取,在随后的请求中从缓存中读取。
  • 例如,PHP文件由APC等进行缓存,不需要再编译

同样,这是正常和预期的,在大多数情况下没有理由去尝试。

至于StartServers等:您需要的值取决于站点的负载,但您所要完成的只是客户端不必等待一个新进程或线程被分叉。对于非常低容量的站点,这可能意味着只有一个线程/进程可用。

票数 3
EN

Server Fault用户

发布于 2014-05-21 08:08:26

服务器通常需要经历不同的处理阶段,每个处理阶段都需要时间来“旋转”。

据我的一般理解,我不确定第一次请求是否比后一次请求更快.这种推理的用例是什么?查看您的代码和您的问题,您没有引用MySQL或PHP (它们通常是在任何web服务器上旋转时间的主要贡献者)。

忽略上面的内容:通常,当流量涌入您的will服务器/网站时,您的页面加载速度会更快。这是因为Apache能够获得处于等待状态的线程,以服务下一个请求。此外,操作系统将对文件句柄等进行缓存。随着时间的推移,它将释放这些,一切将恢复正常。

如果收到过多的通信量,显然会注意到由于连接被重新记录、线程或进程争用资源或磁盘交换而导致的速度减慢。

根据我的研究,第一个请求可以通过在apache\conf\ StartServers \\httpd-mpm.conf中设置MinSpareThreads和MaxSpareThreads来改进。

同样,据我所知,StartServersMinSpareThreadsMaxSpareThreads只会在高峰负载时间下帮助增加负载时间。

通常,您应该将StartServers & MinSpareThreads设置为每天满足平均负载需求的数字。

MaxSpareThreads应该用作一种“缓冲区”,用于在负载高的时候保持打开的线程。

特别是要解决你的问题:

您可以使用Apache的磁盘缓存模块、内存缓存模块或文件缓存模块来减少旋转和服务静态内容所需的时间。

票数 -2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/597418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档