PHP:加载gzipped javascript文件

时间:2011-03-23 08:03:04

标签: php javascript file gzip

将一组20-30个.js文件连接成一个大文件是一个好主意,用gzip压缩这个文件,保存为somebigjsfile.js.gz,然后加载{{1 }

当至少修改了一个.js文件时,将再次生成此文件(使用php的filemtime检查)。

此外,如果相关,则适用于公共应用。

3 个答案:

答案 0 :(得分:5)

我假设您正在尝试节省服务器上的开销,因为每次请求都必须gzip javascript包?如果这是意图,这不是实现这一目标的正确方法。您需要在标头中指示文件正在使用gzip压缩进行传输,如下所示:

HTTP/1.1 200 OK
Date: Thu, 04 Dec 2003 16:15:12 GMT
Server: Apache/2.0
Vary: Accept-Encoding
Content-Encoding: gzip
Cache-Control: max-age=300
Expires: Thu, 04 Dec 2003 16:20:12 GMT
X-Guru: basic-knowledge=0, general-knowledge=0.2, complete-omnipotence=0.99
Content-Length: 1533
Content-Type: text/html; charset=ISO-8859-1

请注意Content-Encoding: gzip

无论如何,只要你做得对,连接和压缩你的javascript总是一个好主意。我还建议在压缩之前使用某种形式的JS缩小,因为它会改善你的压缩后尺寸

答案 1 :(得分:1)

如果您打算让回访者参与,我认为这不是一个好主意 - 我认为如果您正在开发一个网络应用程序就是这种情况。因为每次修改一个js文件时,都会强制用户下载一个巨大的文件。

当您的用户第一次来到您的应用时,如果加载时间有点长,他们通常会非常宽容。如果您向他们展示了一个很好的介绍文本,他们将在脚本和各种资产加载时阅读和/或查看。但是如果他们每次回来都要等待你的巨大脚本加载,因为它是全有或全无的,那将被视为糟糕的用户体验。

如果您在用户加载应用时不需要所有20-30个文件,请使用脚本加载器在后台加载它们。

如果确实需要这些20-30个文件,请尝试将它们聚合在10个左右的文件中,尝试聚合那些最有可能同时更新的文件。

对于gzip压缩,您的Web服务器应该处理它。

答案 2 :(得分:1)

是的,这是一个很好的想法。

我正在做的是使用像load_script($filename)这样的自定义php函数将该文件添加到“加载队列”。在页面的末尾,我插入另一个解析这些排队脚本的函数generate_js_script(),生成一个大的js文件(我想我此时可以运行一个最小化器)并将其写入具有唯一文件名的磁盘。该函数只生成<script>标记,以便浏览器知道加载这个“大”的js文件。 这样我就不会打扰自定义的header()调用,以及其他奇怪的事情,这些事情在过去会导致某些浏览器及其缓存算法出现问题。

这样,我可以简单地使用.htaccess指令告诉服务器提供压缩的所有js文件(如果浏览器支持它),所以我不必在php中执行此操作。 关于这种缓存的诀窍不是经常重新生成。我使用某种哈希来处理这个问题。