我正在使用启用 gzip 的 nginx 反向代理缓存。但是,我从 Android 应用程序 HTTP 请求到我的 Rails JSON Web 服务时遇到了一些问题。似乎当我关闭反向代理缓存时,它工作正常,因为响应标头没有 gzip。因此,我认为问题是由gzip引起的。什么是最合适的 gzip 压缩级别?
gzip on;
gzip_http_version 1.0;
gzip_vary on;
gzip_comp_level 6;
gzip_proxied any;
gzip_types text/plain text/css text/javascript application/javascript application/json application/x-javascript text/xml application/xml application/xml+rss;
Run Code Online (Sandbox Code Playgroud)
Ali*_*xel 103
我在 nginx 1.3.9 下用两个文件对此进行了测试,这些是我在各个级别得到的结果:
text/html - phpinfo():
0 55.38 KiB (100.00% of original size)
1 11.22 KiB ( 20.26% of original size)
2 10.89 KiB ( 19.66% of original size)
3 10.60 KiB ( 19.14% of original size)
4 10.17 KiB ( 18.36% of original size)
5 9.79 KiB ( 17.68% of original size)
6 9.62 KiB ( 17.37% of original size)
7 9.50 KiB ( 17.15% of original size)
8 9.45 KiB ( 17.06% of original size)
9 9.44 KiB ( 17.05% of original size)
Run Code Online (Sandbox Code Playgroud)
application/x-javascript - jQuery 1.8.3(未压缩):
0 261.46 KiB (100.00% of original size)
1 95.01 KiB ( 36.34% of original size)
2 90.60 KiB ( 34.65% of original size)
3 87.16 KiB ( 33.36% of original size)
4 81.89 KiB ( 31.32% of original size)
5 79.33 KiB ( 30.34% of original size)
6 78.04 KiB ( 29.85% of original size)
7 77.85 KiB ( 29.78% of original size)
8 77.74 KiB ( 29.73% of original size)
9 77.75 KiB ( 29.74% of original size)
Run Code Online (Sandbox Code Playgroud)
我不确定这有多大代表性,但它应该作为一个例子。此外,我没有考虑 CPU 使用率,但从这些结果来看,理想的压缩级别似乎介于4和之间6。
此外,如果您使用该gzip_static模块,您可能需要预先压缩您的文件(在 PHP 中):
function gzip_static($path)
{
if ((extension_loaded('zlib') === true) && (is_file($path) === true))
{
$levels = array();
$content = file_get_contents($path);
foreach (range(1, 9) as $level)
{
$levels[$level] = strlen(gzencode($content, $level));
}
if ((count($levels = array_filter($levels)) > 0) && (min($levels) < strlen($content)))
{
if (file_put_contents($path . '.gz', gzencode($content, array_search(min($levels), $levels)), LOCK_EX) !== false)
{
return touch($path . '.gz', filemtime($path), fileatime($path));
}
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
这使您可以在不牺牲每个请求的 CPU 的情况下获得最佳压缩。
gro*_*wse 23
gzip 压缩的级别仅决定了数据在 1-9 范围内的压缩程度,其中 9 是最压缩的。权衡是最压缩的数据通常需要最多的压缩/解压缩工作,因此如果您在高容量网站上将其设置得相当高,您可能会感觉到它的效果。
听起来您的问题与请求中的 HTTP 标头更相关。通常 gzip 压缩的 HTTP 流量伴随着Content-Encoding: gzip标头。如果这被丢弃在某个地方,那么客户端可能不知道必须解压缩响应。
如果你真的可以节省 CPU 资源,你可以使用 9,但对于大多数站点来说,值 2 就足够了,因为 gzip 在级别 1 之后不会减少太多文件。
编辑:我查看了 Amazon CloudFront,它似乎使用了级别 6,可能是因为该级别是解压速度更快的级别,从而提高了页面渲染性能。
| 归档时间: |
|
| 查看次数: |
66644 次 |
| 最近记录: |