【问题标题】:Can I gzip JavaScript and CSS files in Django?我可以在 Django 中压缩 JavaScript 和 CSS 文件吗?
【发布时间】:2011-04-27 11:42:03
【问题描述】:
我尝试分析我的 Web 应用程序,但报告的瓶颈之一是缺少 gzip 压缩。我继续在 Django 中安装 gzip 中间件并获得了一些提升,但一份新报告显示它只是 gzip 压缩 HTML 文件,即 Django 处理的任何内容。有没有一种方法可以让我的 CSS 和我的 JS 也可以合并/破解/强制/制作中间件 gzip?
有人可以在下面回答我的问题吗?我对此有点迷茫。
- 我可能弄错了,但是
人们对 CSS 和 JS 进行 gzip 压缩,
不是吗?
- Django 不压缩
一些浏览器的 JS 和 CSS
兼容性问题?
- 正在压缩
并缩小相同的东西?
谢谢。
【问题讨论】:
标签:
python
django
compression
gzip
static-files
【解决方案1】:
您的 CSS 和 JS 应该不在您的生产系统上通过 Django。您需要配置 Apache(或 Nginx 或其他)来提供这些服务,当您这样做时,您将能够在那里设置 gzip 压缩,而不是在 Django 中。
不,压缩和缩小不是一回事。 GZip 压缩由服务器在处理您的请求时动态完成,浏览器在收到文件时透明地解压缩文件。缩小是从文件中删除 cmets 和空白空间的过程,有时将多个文件连接为一个(即一个 css 和一个 javascript,而不是每个文件很多)。这是在您将文件部署到服务器时完成的 - 正如 Ashok 建议的那样,通过 django-compress 或通过 YUI compressor 之类的外部工具,并且浏览器不会尝试重建原始文件 - 这是不可能的,并且没必要。
【解决方案2】:
您应该考虑将 django 应用程序置于 HTTP 反向代理之后。
您可以将 apache 配置为您的 django 应用程序的反向代理,尽管许多人似乎更喜欢在这种情况下使用 nginx 或 lighttpd。
HTTP 反向代理基本上是直接在您的 Web 应用程序前面设置的代理。浏览器从反向代理发出请求,反向代理将请求转发到 Web 应用程序。反向代理还可以做一些有趣的事情,比如处理 ssl、处理 gzip 压缩所有响应以及处理静态文件。
【解决方案3】:
谢谢大家。
似乎 Django 中的 GzipMiddleware DOES 压缩了 CSS 和 JS。
我正在使用 Google 的 Firebug 页面速度插件来分析我的页面,它似乎是根据我本地缓存中 CSS 和 JS 的旧副本(非压缩版本)生成报告。这些副本在我启用 Gzip 中间件之前就已经存在。我刷新了缓存,似乎报告显示的结果完全不同。