【问题标题】:PHP Flush: How Often and Best PracticesPHP 刷新:频率和最佳实践
【发布时间】:2010-09-26 01:11:19
【问题描述】:

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

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

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

【问题讨论】:

  • 因为这仍在阅读中:考虑通过例如结果通知进行一些异步处理。网络套接字。 (当问题被问到时,这不是一件事)

标签: php optimization flush


【解决方案1】:

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

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

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

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

4) 刷新后,您将无法再发送任何标头

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

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

【讨论】:

    【解决方案2】:

    缺点是你不能 gzip 内容以及刷新它 afaik,所以我一直更喜欢 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.

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

    【讨论】:

    • 我同意,但是,大多数人的头部标签中的元数据超过 256 个字符。如果你仔细想想,其实并没有那么多。不过 GZip 是个好主意。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-09
        • 1970-01-01
        • 1970-01-01
        • 2015-05-24
        • 2018-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多