我刚读完这篇文章:https://developer.yahoo.com/performance/rules.html#flush并且在我的页面顶部加载(head,css,top banner / search / nav)后已经实现了刷新。
冲洗时是否有任何性能损失?是否经常这么做?什么是最佳实践?
如果我打算使用外部API来获取数据,那么在事先进行刷新是否有意义,以便用户不等待该数据返回,并且至少可以获得一些数据?
答案 0 :(得分:19)
所描述的技术看起来不错,但有几个陷阱:
1)PHP脚本开始和结束之间的时间与传输时间相比较小;此外,根据您的消息来源,这可以为用户节省大约0.5秒。那是你的大量时间吗?
2)此技术不适用于gzip输出缓冲
3)如果您经常刷新,您将在刷新时发送几乎为空的数据包,这实际上可能会增加加载时间(在缓慢,嘈杂的连接上)。
4)一旦刷新,就无法再发送标题
5)(次要问题)服务器响应将采用分块编码,这意味着客户端不会提前知道大小(因此下载文件时不会显示“x%done”)。
另一方面,如果您希望脚本运行一段时间(20秒以上),则可能需要发送一些数据(例如空格)以防止浏览器超时连接。 / p>
答案 1 :(得分:5)
缺点是你无法对内容进行gzip以及将其刷新,所以我总是喜欢gzip而不是刷新。
这使得这不明白,因为看起来填充更多数据并不是很有用。
答案 2 :(得分:3)
我认为同花顺是一种很好的调整机制。浏览器只使用大约8个线程来下载内容(取决于浏览器)。如果您有15个图像,浏览器将开始下载8个图像,并且在其中一个完成之前不会下载任何其他内容,然后它将开始下载下一个图像等。通过在标题之后刷新,您基本上告诉浏览器是什么它可以开始下载。当页面的其余部分被传递时(即.5秒后),浏览器可能已经完成了下载css和javascript文件。这将释放其他内容的下载线程。
您可能不希望在标题之后的任何其他位置使用flush。浏览器通常不会呈现未关闭的html标记,因此传递部分页面不会更快地显示内容。在收到一定数量的数据或完成页面传送之前,较早版本的IE将不会显示任何内容。
答案 3 :(得分:2)
按照Piskvor的观点 - 如果你期望20s +等待,你可能最好提供一个基本页面(可以gzip压缩),并在慢速过程结束时使用Ajax更新页面。但是,你确实开始侵犯静态html的基本用途。