【问题标题】:PHP: Loading gzipped javascript filesPHP:加载压缩的 javascript 文件
【发布时间】:2011-07-21 02:43:39
【问题描述】:

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

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

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

【问题讨论】:

  • Web 服务器应配置为自动提供 gzip 压缩的内容。除此之外,连接 JS 文件听起来是个好主意——虽然我不确定你想如何触发更新文件?
  • 是的 - 看来你已经明白了。
  • 这听起来与我所做的非常相似。我有一个读取 javascript 目录的类,其中的任何 .js 文件都被剥离所有 cmets、空白、最小化等,然后合并为 1 个单个文件并压缩。每当任何文件发生变化时,脚本都会自动重建大脚本,效果很好,因为用户总是得到一个缓存的版本。这听起来像你正在做的事情

标签: php javascript file gzip


【解决方案1】:

我假设您正在尝试节省服务器上必须在每个请求上 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 缩小,因为它会改善压缩后的大小

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 我想知道,您多久更改一次 js 文件?我大约每 3-6 个月更换一次它们,所以如果我每隔几个月重建缓存,我实际上并没有看到问题。即使每天重建也是可以接受的。
    【解决方案3】:

    是的,这是个好主意。

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

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

    【讨论】:

      猜你喜欢
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 2019-06-17
      • 2011-11-26
      相关资源
      最近更新 更多