【发布时间】:2015-04-02 08:05:21
【问题描述】:
我有一个相当大的 index.php 文件(大约 500kB),其中存在大量逻辑和数据库查询(发送到客户端的 index.php 大约为 200kB)。
我想做的是首先使用 gzip 压缩文件,我只需在我的 .htaccess 文件中添加 SendOutputFilter 即可。现在,由于服务器要处理的文件很大,TTFB 可能需要一段时间,因此我想在查看查询之前将文件的标题发送给用户,以便浏览器发现图像、css和 js(它们也很大)并且将开始下载而不是空闲等待整个 index.php 在服务器上被处理(我想要像谷歌搜索那样的东西。它在整个页面加载之前开始下载 pngs (并且页面被压缩))。
我进行了一些查询,但找不到任何简单的解决方案。我发现要么我禁用 gzip 并使用刷新,要么使用 gzip 但不刷新。
但正如你在我的情况下看到的那样,我需要两者,而且我知道这可以通过某种方式完成。可能有一些解决方法。
大型现代网站已经做到了这一点,所以我想知道如何做。
【问题讨论】:
-
在我看来你优化错了。如果你的
index.php是 500kb 并且有很多逻辑,那么这并不意味着生成的 HTML 内容也很大。所有的逻辑都被丢弃了。您确定问题在于生成的 HTML 非常大而 GZIP 是解决方案吗? -
感谢您的评论,我知道原始 index.php 的大小由于逻辑原因很大,但在发送到用户浏览器时会变小(因为我们只发送输出而不发送 php 逻辑)。我说 500kB 是为了清楚地表明有相当多的逻辑要执行。实际上,当发送到浏览器时,文件大约为 200 kB。所以是的,我仍然需要 gzip。
-
好的,当您使用 GZIP 时,它突然就像
50左右?就像大幅改进一样。因为这些天在正常连接上,200kb 几乎是即时的。但无论如何,你想要的都做不到。您也许可以开始“刷新”发送数据,但浏览器需要完整的内容才能解包并开始渲染并查看需要加载的其他文件 -
看看谷歌搜索,这正是它的作用。它会压缩 html 并同时在请求到达他们的服务器后立即发送文件头(甚至在查看查询之前),如果您仔细查看(devTools)中的 10% 的 html下载其他文件,如 png start beign 并行下载。你怎么解释?这是因为浏览器不需要整个 html 来开始处理它,只要浏览器开始下载部分 html,它就会开始解析它并构造 DOM(并行)
-
再试一次,仔细查看在整个html下载之前开始下载的.png文件