问题 压缩/缩小动态HTML


我正在使用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?如何删除额外的换行符?


7899
2017-07-29 22:17


起源

谷歌提出了这个问题: soyoucode.com/2011/minify-html-output-django (我不熟悉Django,所以我不知道它在你的特定情况下是否有用)。 - David Thomas
你试过django.middleware.gzip.GZipMiddleware吗? - mrok
你可能想要一个Django / Python HTMLTidy方法。 - Jared Farrish
例如... utidylib.berlios.de - Jared Farrish
我同意@mrok。只需gzip你的回复。这将为您提供最轻的页面加载。别担心。 - Chris Pratt


答案:


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

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


5
2017-07-29 22:47



还存在与可读性相关的过多空白的其他问题,例如具有大量并发请求的站点上的带宽,但这通常与 更大的网站 像雅虎,Facebook等我同意你的答案的精神,但是,空白膨胀通常是一个丑陋的问题,设计师和非IT执行类型发现“pwoblematic”。我遇到的最好的情况就是那个 源标记 由markup-no-nothings判断为代表代码的质量。有趣的是,我们有时会为薪水做些什么。 - Jared Farrish
设计师,非IT执行类型和OCPD开发人员;)! - Filip Dupanović


Django的htmlmin 包是一个很棒的,它提供了很多控件和功能,而且它支持HTML 5。


3
2017-10-02 13:37





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

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

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

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


2
2018-02-07 22:01





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

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

这个工具最初是为缩小HTML而设计的,但在我尝试的时候也适用于Django模板。


2
2018-03-24 01:17



真棒,我正在考虑类似的解决方案,其中缩小可以在模板加载时间运行。 - aisbaa


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

http://wiki.nginx.org/HttpStripModule


1
2017-07-30 09:49





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

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

Django的模板极小 


0
2018-01-05 02:56