【问题标题】:gzip - questions about performancegzip - 关于性能的问题
【发布时间】:2011-05-28 15:04:13
【问题描述】:
首先,我使用的是 Django。 Django 提供了 gzip 中间件,它工作得很好。 Nginx 还提供了一个 gzip 模块。仅使用 Nginx 的 gzip 模块是否更有意义,因为它纯粹用 C 实现,还是我缺少其他性能考虑因素。
其次,Django 不会压缩 200 字节以下的任何内容。这是因为 gzipping 太昂贵而在压缩输出小于该值时没有任何价值?
第三,我正在构建的 API 几乎是纯动态的,几乎没有缓存。 gzipping 是否足够昂贵以至于在这种情况下使用它不切实际(相对于我可以在网络服务器上缓存 gzipped 输出的情况)?
【问题讨论】:
标签:
django
compression
nginx
gzip
【解决方案1】:
1) 我想一个 gzip 压缩就足够了,而 nginx 更快,虽然我还没有对它进行基准测试。 GzipMiddleware 使用了一些内置函数,它们也可能会得到很好的优化。
# From http://www.xhaus.com/alan/python/httpcomp.html#gzip
# Used with permission.
def compress_string(s):
import cStringIO, gzip
zbuf = cStringIO.StringIO()
zfile = gzip.GzipFile(mode='wb', compresslevel=6, fileobj=zbuf)
zfile.write(s)
zfile.close()
return zbuf.getvalue()
2) 小 gzip 文件无法利用压缩(实际上小文件在处理时可能会更大),因此跳过这一步可以节省时间。
3) 您可以设计一个包含样本数据的测试套件。然后决定哪些数据最适合您的应用程序。