有没有办法自动缩小静态内容,然后自动从缓存中提供它?类似于有 mod_compress/mod_deflate 工作?最好是我可以与压缩结合使用的东西(因为压缩有更明显的好处)。
我的偏好是适用于 lighttpd 的东西,但我找不到任何东西,所以任何可以做到这一点的 Web 服务器都会很有趣。
你可以试试 nginx 的第三方 Strip 模块:
http://wiki.nginx.org/NginxHttpStripModule
您使用的任何模块都只会删除空格。通过使用能够理解您正在缩小的任何内容的缩小器,您将获得更好的结果。例如 Google 的 Closure javascript 编译器。
知道变量是什么并使其名称更短是足够聪明的。空格去除器无法做到这一点。
除非您的网站流量非常低,否则我建议您减少离线。但是如果你想在你的实时环境中缩小我推荐使用 nginx 的代理缓存。(抱歉,我没有足够的声誉发布多个链接)
或者,您可以查看 memcached 的内存缓存或 Redis 的相同内容,但使用磁盘备份。
我决定通过 PHP 来做这件事(主要是因为我不想写一个 lighttpd 模块)。
我的脚本接受一个查询字符串,指定请求的文件类型(js 或 css),然后是这些文件的名称。例如,在我的网站上,CSS 是这样添加的:
<link rel="stylesheet" href="concat.php?type=css&style&blue" ... />
这会缩小并连接 style.css 和 blue.css
如果可用,它还使用XCache缓存文件(因为缩小成本很高)。我实际上打算更改脚本,以便在 Xcache 不可用时它不会缩小,但我有 Xcache,我很无聊。
无论如何,如果其他人想要它,它就在这里。如果您使用我的,则需要更改isAllowed()
函数以列出您的文件(使其仅返回 true 可能是安全的,但仅列出我想要允许的文件很容易)。
我使用带有 C# 库的Microsoft Ajax Minifier来缩小 js 文件。我在服务器上使用它并为每页提供最多两个缩小的 .js 文件(一个“静态”文件在整个站点中相同,一个“动态”文件仅针对该页面)。
Yahoo 的 YUI 压缩器也是一个简单的 Java .jar 文件,您也可以使用它。
我认为,重要的是不要在逐个文件的基础上进行。您确实需要结合.js 文件以获得最大收益。出于这个原因,“自动”解决方案并不能真正发挥作用——因为它必然只能在逐个文件的基础上工作。
如果您使用Nginx而不是 lighttpd,那么您可以利用 Nginx 的嵌入式 Perl 支持来利用 Perl 模块JavaScript-Minifier来缩小和缓存 JS 服务器端。
以下是有关如何实现此目的的详细信息:wiki.nginx.org/NginxEmbeddedPerlMinifyJS