我相信这将是一个更加CPU友好的方法,它可以用PHP实现吗?而不是为每个请求gzipping内容,我压缩文件一次,而不是服务那些=)。
答案 0 :(得分:3)
是的,这对Apache很容易。
并排存储未压缩和压缩的文件。 E.g:
\-htdocs |-index.php |-javascript.js \-javascript.js.gz
在Apache中启用内容协商。使用:
Options +MultiViews
现在当请求“/ javascript”时,如果客户端声明它接受它(通过Accept-encoding
),Apache将提供gzip压缩版本。
两个HTTP请求的示例(省略了一些标头):
客户声称接受gzip
GET /EP/Exames/2006-2007/exame2B HTTP/1.1
Host: lebm.geleia.net
Accept-Encoding: gzip, identity
HTTP/1.1 200 OK
Date: Fri, 13 Aug 2010 16:22:59 GMT
Content-Location: exame2B.nb.gz
Vary: negotiate,accept-encoding
TCN: choice
Last-Modified: Sun, 04 Feb 2007 15:33:53 GMT
ETag: "0-c9d-428a84de03a40;48db6d490abee"
Accept-Ranges: bytes
Content-Length: 3229
Content-Type: application/mathematica
Content-Encoding: gzip
‹áüÅE
(response continues)
客户未声明接受gzip
GET /EP/Exames/2006-2007/exame2B HTTP/1.1
Host: lebm.geleia.net
Accept-Encoding: identity
HTTP/1.1 200 OK
Date: Fri, 13 Aug 2010 16:23:14 GMT
Content-Location: exame2B.nb
Vary: negotiate,accept-encoding
TCN: choice
Last-Modified: Sun, 04 Feb 2007 15:33:53 GMT
ETag: "0-257f-428a84de03a40;48db6d490abee"
Accept-Ranges: bytes
Content-Length: 9599
Content-Type: application/mathematica
(************** Content-type: application/mathematica **************
CreatedBy='Mathematica 5.2'
(response continues)
在此处查看更完整的版本http://pastebin.com/TAwxpngX
答案 1 :(得分:1)
是的,这是节省带宽和连接的明智方法。 (如果需要,你可以在Apache中启用gzip压缩,但是当你保存连接时,它仍然值得这样做。)
实质上,使用PHP函数检查浏览器是否支持gzip压缩。 (如果不是,你需要按照正常情况获取JavaScript / CSS。)如果确实如此,你可以简单地将JavaScript或CSS源位置指向一个PHP脚本,该脚本负责:
检查是否有压缩版本。 (如果存在,只需输出现有的“磁盘上”。)
创建所需文件的压缩版本。
您可能还想从定义/顶级配置启用/禁用此功能(出于测试目的等)。作为建议,您可以将所需的CSS / JavaScript文件路径存储在一组数组中,这可能是用作创建缓存文件的基础或以传统方式包含文件作为后备。
我过去在这些行中编写了一个解决方案,它根据所需文件名的哈希创建了一个文件。因此,如果包含其他/附加文件,则会自动重建缓存。 (它还在'n'小时后重新构建了缓存,但这只是为了在文件名没有改变的情况下保持新鲜,但内容确实如此。)