网页高性能结构优化 flush – 网页分块处理

在打开一个大的页面比较耗时的时候,我们总希望让用户先看到一部分结果,剩下的结果再一步步地显示出来,像现在微博这样,住下拉的时候再发送请求获取下一个分块的信息,微博的处理方式是通过JS 触发AJAX进行异步请求获取新的结果,AJAX请求这个方法是可行方案,但同样增加了用户的请求数,同时JS代码量也增加了很多。

对于目前这种情况,我们还有另一个处理方法,就是服务器response 的时候对服务器内容进行块处理。

普通页面处理方法如图:



如上图所示,服务器页面处理的时候,从上往下,一块一块地执行,取得结果并写入缓存中,我们先将页面分成 header ,N块内容block块,以及页脚,假如页头页脚执行我们不需要耗时间,但每一个block 却要花费上2秒,在这里我用sleep来模拟,那么,我们的页面每多一个block块,整个页面等待就要加多2秒,这样我们的页面越大,那等待的时间也就越长。我们用firebug 查看其执行时间分析如下图:

firebug 显示整个页面等待时间为4.09S,整个等待时间占了4S,也就是服务器响应处理时间为4S。

用flush() 实现块处理,代码如下

性能分析图

如果所示,firebug 显示响应头信息多了一项:Transfer-Encoding :chunked

时间线也分成了二段,总体时间虽还是4.044秒,但等待时间却已经变成了2秒,意思就是说在2秒的时候已经接收到服务器返回的信息了。所以页面显示内容也显示出block1 的内容,这样给用户的感觉是,页面已经在执行处理了,这样大大地提高了用户的体验效果。

此条目发表在 PHP开发 分类目录。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已被标记为 *

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>