性能黄金守则提醒我们,对于大多数网站, 80-90%的加载时间浪费在前端。然而,对于一些网页,服务器生成HTML文件所花费的时间超过了网页整体加载时间的10-20%。即使HTML文件在服务器快速生成,由于用户过远或网速过慢,在浏览器收到HTML之前可能仍然需要很长的时间。当HTML文件在服务器产生和通过线缆传输时,浏览器还在空闲的等待。这是浪费!为了不让浏览器在这段时间什么都不做, Web开发人员可以Flushing页面,从而在页面完全接收之前触发页面加载事件。
Flushing就是在整个HTTP响应准备好之前,服务器返回开头的部分HTML文件到客户端。所有的主流浏览器都是在收到部分响应后即可以解析。当解析正确就会在页面内显示结果,这会导致用户感觉页面加载更快。关键是如何正确选择Flush HTML文档的位置点。应该在昂贵的后端工作之前进行flush操作, 例如数据库查询、web service 调用等。应该在有足够的内容可以使浏览器保持加载状态之后进行flush操作。被Flush的HTML文档部分应该包含一些可视的内容,如果包含下载资源(例如样式表文件、外部脚本、图片),浏览器会尽可能早的进行下载工作。如果包括了可视内容,用户会尽快的收到"页面正在加载"的反馈信息。
绝大多数HTML模板语言, 包括PHP, Perl, Python, Ruby, 都有一个flush
函数. 让flushing工作起来可能十分棘手,当输出被缓存、 chunked
编码方式被禁用、代理或防病毒软件干扰、flush的响应头太小时,问题就会凸显出来。PHP flush 文档 里面的评论显示了让所有细节都正确可能是比较困难的。也许这就是为什么绝大多数美国前10名的网站都没有正确flush文档的原因. google搜索做了flushing.
Google尽早的flushing
google搜索的HTTP瀑布图展示了尽早flushing文档的好处。当HTML文档(第一个横条)还在接收的时候, 浏览器已经开始下载页面内的图片, nav_logo4.png (第2个横条)。通过尽早的flushing文档, 你可以更快的下载和渲染文档。
转载于:https://www.cnblogs.com/yslow/archive/2009/05/20/1467476.html