压缩/缩小动态html

时间:2012-07-29 22:17:04

标签: html django compression gzip

我正在使用django模板,为了便于阅读,我的html看起来类似于以下内容:

{% if some_variable %}
    text
{% else %}
    nothing exists here
{% endif %}

{% for item in set %}
    {% if forloop.first %}
...etc...

它在运行时转换为以下html,其中包含大量的空格并返回:

text

<div>

  <li

        class='some_class

    >

    some text

   </li>

</div>

etc...

在查看页面源时,有些页面甚至可以运行~3,000行html。

是否有工具在运行时压缩此html?如何删除额外的换行符?

7 个答案:

答案 0 :(得分:5)

对于一些背景知识,这是故意完成的,因为Django的模板引擎目前不关心在标签被剥离后评估为空白的行消毒,这样做会在响应服务中产生一些轻微的性能损失,因为它涉及一个后处理步骤,用于评估渲染模板的全部内容。

但是,如果您需要快速解决方案,我建议您使用StripWhitespaceMiddleware响应中间件来删除文本响应中的虚假空白。它非常快速和直接,采用像模板引擎本身一样的正则表达式匹配。如果你真的关心那些仍在阅读原始反应的穷人,那么一个更有趣但更强大的替代方案就是部署一个利用HTML预处理器的响应中间件。

答案 1 :(得分:4)

django-htmlmin包很棒,它提供了很多控件和功能,而且它支持HTML 5.

答案 2 :(得分:2)

环顾四周,我刚刚发现了django-pipeline,我刚刚尝试了中间件,这正是我所期待的。它缩小了所有html和文本节点,并保持javascript节点不受影响。

中间件实现和基本测试结果大约需要4分钟,只需在您使用gzip中间件或在MIDDLEWARE_CLASSES设置之后安装并激活中间件。

https://github.com/cyberdelia/django-pipeline

http://django-pipeline.readthedocs.org/en/latest/

答案 3 :(得分:2)

我认为应该使用前端开发工具(例如grunt-contrib-htmlmin)来缩小Django模板文件,然后再将它们部署到生产服务器。

这样,缩小过程在“构建时”发生,并在“运行时”中为HTML缩小节省服务器CPU资源。

此工具最初设计用于缩小HTML,但在我尝试时也适用于Django模板。

答案 4 :(得分:1)

如果您正在使用Nginx,它的Strip模块在为您清理html方面做得非常好。这是实时和透明的。完全正确设置后,您根本不需要关心。

http://wiki.nginx.org/HttpStripModule

答案 5 :(得分:0)

“我认为应该使用前端开发工具,例如grunt-contrib-htmlmin,在将Django模板文件部署到生产服务器之前将其缩小。”

前段时间我需要这样做,以提高性能并减少延迟。我编写了一个模板最小化器,可以预先最小化模板中的HTML,CSS和Javascript,以便最小化页面。它作为Django命令集成到Django中,理解Django诱人语言的复杂性,并且是可扩展的。您可以在以下链接的pypi上找到它:

django-template-minimizer

答案 6 :(得分:0)

我建议使用自定义模板加载器 django-spaceless-templates,它会去除不必要的空白字符。这种方法有两个优点:

  • 结合缓存模板加载器,在模板编译期间只执行一次空白剥离。另一方面,使用 {% spaceless %} 或中间件方法,每次渲染模板时都会调用 minification。
  • 空格去除可以更加激进 - 删除 HTML 标签、Django 标签和变量之间的空格。