2011-03-23 137 views
4

将一组20-30个.js文件连接成一个大文件,使用gzip压缩此文件,将其保存为somebigjsfile.js.gz之类的文件,然后加载它像这样<script type="text/javascript" src="somebigjsfile.js.gz"></script>PHP:加载gzip JavaScript文件

当至少有一个.js文件被修改(用php的filemtime检查)时,这个文件会再次生成。

此外,如果它是相关的,这是一个公共应用程序。

+0

应将Web服务器配置为自动提供压缩内容。除此之外,连接JS文件听起来像一个好主意 - 虽然我不知道如何触发更新文件? – 2011-03-23 08:05:18

+0

是的 - 似乎你已经想通了。 – Tramov 2011-03-23 08:05:51

+0

这听起来与我所做的非常相似。我有一个读取javascript目录的类,其中的任何.js文件都被删除了所有评论,空白,最小化等等,然后合并为一个单一文件并进行gzip压缩。只要有任何文件发生变化,脚本就会自动重建大脚本,效果很好,因为用户总是获取缓存版本。这听起来像你在做什么 – JasonDavis 2011-03-28 23:35:45

回答

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

如果你打算让游客回来,我不认为这是个好主意 - 而且我认为是这种情况如果你正在开发一个Web应用程序。因为每次你的一个js文件被修改时,你都会强制你的用户下载一个巨大的文件。

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

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

如果您确实需要这些20-30个文件,请尝试将它们聚合到10个左右的文件中,试图将那些具有最高可能性的文件聚合在一起。

至于gzip压缩,你的web服务器应该处理它。

+0

我想知道,你多久换一次你的js文件?我每3-6个月更换一次,所以如果我在几个月后重建缓存,我实际上看不到问题。即使每天重建它也是可以接受的。 – Quamis 2011-03-23 09:08:09

1

是的,它是一个很好的ideea。

我在做的是使用像load_script($filename)这样的自定义php函数,将该文件添加到“加载队列”中。并在页面的末尾插入另一个函数generate_js_script()解析这些排队的脚本,生成一个大的js文件(我想我可以运行最小化在这一点),并写入磁盘与唯一的文件名。该功能仅生成<script>标签,以便浏览器知道加载这个“大”js文件。 这种方式我不打扰定制header()调用,以及其他一些奇怪的事情,在过去一些浏览器和他们的缓存算法引起的问题。

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