我正在使用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?如何删除额外的换行符?
对于一些背景知识,这是故意完成的,因为Django的模板引擎目前不关心在标签被剥离后评估为空白的行消毒,这样做会在响应服务中产生一些轻微的性能损失,因为它涉及到后处理步骤,用于评估呈现模板的完整内容。
不过,如果您需要快速解决方案,我建议您使用 StripWhitespaceMiddleware
响应中间件,它将从文本响应中删除虚假的空白。它非常快速和简单,采用像模板引擎本身一样的正则表达式匹配。如果你真的关心那些仍在阅读原始反应的穷人,那么一个更有趣但更强大的替代方案是部署一个利用HTML预处理器的响应中间件。
Django的htmlmin 包是一个很棒的,它提供了很多控件和功能,而且它支持HTML 5。
环顾四周,我刚刚发现了django-pipeline,我刚刚尝试过中间件,这正是我所期待的。它缩小了所有html和文本节点,并保持javascript节点不变。
中间件实现和基本测试结果大约需要4分钟,只需在您使用gzip中间件或在MIDDLEWARE_CLASSES设置之后安装并激活中间件。
https://github.com/cyberdelia/django-pipeline
http://django-pipeline.readthedocs.org/en/latest/
我认为是一个前端开发工具,比如 grunt-contrib-htmlmin
,应该用于在将Django模板文件部署到生产服务器之前将其缩小。
这样,缩小过程在“构建时”发生,并在“运行时”中为HTML缩小节省服务器CPU资源。
这个工具最初是为缩小HTML而设计的,但在我尝试的时候也适用于Django模板。
如果您正在使用Nginx,它的Strip模块在为您清理html方面做得非常好。这是实时和透明的。完全正确设置后,您根本不需要关心。
http://wiki.nginx.org/HttpStripModule
“我认为应该使用前端开发工具,例如grunt-contrib-htmlmin,在将Django模板文件部署到生产服务器之前将其缩小。”
我不久前需要这样做以提高性能并减少延迟。我编写了一个模板最小化器,它可以预先最小化模板中的HTML,CSS和Javascript,以便最小化页面。它作为Django命令集成到Django中,理解Django诱人语言的复杂性,并且是可扩展的。您可以在以下链接的pypi上找到它:
Django的模板极小