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