PHP Flush:多久和最佳实践

时间:2008-12-09 13:51:45

标签: php optimization flush

我刚读完这篇文章:https://developer.yahoo.com/performance/rules.html#flush并且在我的页面顶部加载(head,css,top banner / search / nav)后已经实现了刷新。

冲洗时是否有任何性能损失?是否经常这么做?什么是最佳实践?

如果我打算使用外部API来获取数据,那么在事先进行刷新是否有意义,以便用户不等待该数据返回,并且至少可以获得一些数据?

4 个答案:

答案 0 :(得分:19)

所描述的技术看起来不错,但有几个陷阱:

1)PHP脚本开始和结束之间的时间与传输时间相比较小;此外,根据您的消息来源,这可以为用户节省大约0.5秒。那是你的大量时间吗?

2)此技术不适用于gzip输出缓冲

3)如果您经常刷新,您将在刷新时发送几乎为空的数据包,这实际上可能会增加加载时间(在缓慢,嘈杂的连接上)。

4)一旦刷新,就无法再发送标题

5)(次要问题)服务器响应将采用分块编码,这意味着客户端不会提前知道大小(因此下载文件时不会显示“x%done”)。

另一方面,如果您希望脚本运行一段时间(20秒以上),则可能需要发送一些数据(例如空格)以防止浏览器超时连接。 / p>

答案 1 :(得分:5)

缺点是你无法对内容进行gzip以及将其刷新,所以我总是喜欢gzip而不是刷新。

  

Some versions of Microsoft Internet Explorer will only start to display the page after they have received 256 bytes of output, so you may need to send extra whitespace before flushing to get those browsers to display the page.

这使得这不明白,因为看起来填充更多数据并不是很有用。

答案 2 :(得分:3)

我认为同花顺是一种很好的调整机制。浏览器只使用大约8个线程来下载内容(取决于浏览器)。如果您有15个图像,浏览器将开始下载8个图像,并且在其中一个完成之前不会下载任何其他内容,然后它将开始下载下一个图像等。通过在标题之后刷新,您基本上告诉浏览器是什么它可以开始下载。当页面的其余部分被传递时(即.5秒后),浏览器可能已经完成了下载css和javascript文件。这将释放其他内容的下载线程。

您可能不希望在标题之后的任何其他位置使用flush。浏览器通常不会呈现未关闭的html标记,因此传递部分页面不会更快地显示内容。在收到一定数量的数据或完成页面传送之前,较早版本的IE将不会显示任何内容。

答案 3 :(得分:2)

按照Piskvor的观点 - 如果你期望20s +等待,你可能最好提供一个基本页面(可以gzip压缩),并在慢速过程结束时使用Ajax更新页面。但是,你确实开始侵犯静态html的基本用途。