23

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

冲洗是否有任何性能影响?是否有经常这样做的事情?最佳实践是什么?

如果我要使用外部 API 获取数据,那么提前刷新是否有意义,这样用户就不会等待该数据返回,并且至少可以事先获取一些数据?

4

4 回答 4

19

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

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

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

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

4)一旦你刷新,你不能再发送任何标题

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

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

于 2008-12-09T14:10:31.390 回答
5

不利的一面是你不能 gzip 内容以及刷新它,所以我一直更喜欢 gzip 而不是刷新。

某些版本的 Microsoft Internet Explorer 仅在收到 256 字节的输出后才开始显示页面,因此您可能需要在刷新之前发送额外的空格以使这些浏览器显示页面。

这使得这不是想法,因为填充更多数据似乎不是很有用。

于 2008-12-09T13:58:28.560 回答
3

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

除了标题之后,您可能不想在任何其他地方使用刷新。浏览器通常不会呈现未关闭的 html 标记,因此提供部分页面不会更快地显示内容。在接收到一定数量的数据或页面交付完成之前,旧版本的 IE 根本不会显示任何内容。

于 2010-03-30T13:11:41.820 回答
2

按照 Piskvor 的观点 - 如果您期望等待 20 多秒,最好提供一个基本页面(可以压缩)并在缓慢的过程完成后使用 Ajax 更新页面。不过,您确实开始侵犯静态 html 的基本用途。

于 2008-12-09T14:17:21.533 回答