为什么本地请求几乎不是即时的?

这完全是出于好奇,但对于我所设置的每个本地服务器来说,在显示页面之前总是存在0.5-2秒的延迟。

只是作为一个例子,我已经build立了一个完全空白的Ubuntu服务器运行Apache,MySQL和PHP。 如果我有一个文件phpinfo(); 并且从位于服务器旁边的机器请求,页面仍然需要一两秒钟才能加载。 为什么不是[几乎]瞬间?

两台机器都使用千兆交换机运行四核处理器,8GB内存等。 为什么像phpinfo这样的简单请求需要这么长时间才能“发生”?

可能会有许多事情影响显示它的时间。 如果有任何代码,它仍然需要解释和运行。 DNS查找仍然发生,所以有一个延迟(除非你有他们所有的本地主机查找。)由浏览器渲染。 协议的开销。

如果你感兴趣,你可以运行wireshark并查看networking端查找和协议的开销。

其他的一切都来自服务器处理请求和客户端来呈现响应的时间。

尝试使用ab进行基准testing:

ab -c 1 -n 1 http://your.server/page/ 

phpinfo()使用一些资源,需要一些时间,浏览器渲染也需要一些时间。 在一个静态的(短的)html页面上,我花了5ms在一个千兆局域网上。

PS:现代浏览器真的很慢:/

1.)服务器上的第一次命中和第一次调用PHP脚本实际上是导致一些configuration被parsing,解释器(可能)加载,脚本加载,Web服务器中的模块联机等。后续的查询几乎总是更快。

2.)即使在理想条件下,在你的机器进行几个TCP会话(每个会话需要几毫秒的握手),你的浏览器识别自己和工作你的浏览器最终提交请求,然后服务器不得不parsing这些信息,并把它传递给堆栈,最后把它格式化成HTML,然后发回给你。

现代脚本/networking平台的实现有相当多的复杂性。 与ping一个服务器或build立一个静态的“Hello world!”相比,这看起来有点沉重。 HTML页面,但广义的function是相当令人印象深刻的。

另一点,当然是,你描述的是一个完整的股票系统。 几乎总是可以通过调整它来更好地响应您的特定工作负载。