使用minify-html,一个极快的HTML + JS + CSS压缩器,与Django一起使用。
项目描述
使用minify-html,一个极快的HTML + JS + CSS压缩器,与Django一起使用。
更聪明、更快速地工作,我的书提升您的Django开发体验涵盖了提高您开发体验的许多方法。
要求
支持Python 3.8到3.12。
支持Django 3.2到5.1。
安装
使用
pip
安装python -m pip install django-minify-html
将django-minify-html添加到您的INSTALLED_APPS
INSTALLED_APPS = [ ..., "django_minify_html", ..., ]
添加中间件
MIDDLEWARE = [ ..., "django_minify_html.middleware.MinifyHtmlMiddleware", ..., ]
该中间件应该位于可能对您的响应进行编码的其他中间件之下,例如Django的GZipMiddleware。它应该在可能修改您的HTML的其他中间件之上,例如django-debug-toolbar或django-browser-reload。
参考
有关 minify-html 的信息,请参阅其文档。
django_minify_html.middleware.MinifyHtmlMiddleware
该中间件在 HTML 响应的内容上运行 minify_html.minify()。此函数会最小化 HTML,以及任何内联 JavaScript 和 CSS。
中间件将从其 minify_args 属性传递关键字参数给 minify(),这是一个名称到值的字典。这些对应于 Rust 库中的 Cfg 结构体 的值,在 Python 库的源代码中可见 (如所示)。默认情况下,中间件将 minify_css 和 minify_js 覆盖为 True。如果您需要更改参数,则可以创建中间件的子类,替换 minify_args,并使用您的子类。例如,要在压缩后保留注释
from django_minify_html.middleware import MinifyHtmlMiddleware
class ProjectMinifyHtmlMiddleware(MinifyHtmlMiddleware):
minify_args = MinifyHtmlMiddleware.minify_args | {
"keep_comments": True,
}
(此示例使用 Python 3.9 的 字典合并运算符。)
中间件适用于所有非流式、非编码的 HTML 响应。您可以使用下面的 @no_html_minification 装饰器在单独的视图中跳过它。
为了更广泛地限制它,您可以使用具有覆盖 should_minify() 方法的子类。此方法接受 request 和 response,并返回一个 bool。例如,避免对具有 URL 前缀 /admin/ 的 URL 进行压缩
from django.http import HttpRequest, HttpResponse
from django_minify_html.middleware import MinifyHtmlMiddleware
class ProjectMinifyHtmlMiddleware(MinifyHtmlMiddleware):
def should_minify(self, request: HttpRequest, response: HttpResponse) -> bool:
return super().should_minify(request, response) and not request.path.startswith(
"/admin/"
)
请注意,即使 DEBUG 是 True,响应也会被压缩。这建议这样做,因为 HTML 压缩可以揭示模板中的错误,因此最好始终以生产环境中显示的 HTML 形式工作。压缩后的 HTML 很难阅读“查看源代码” - 最好依赖于浏览器开发者工具中的检查器。
django_minify_html.decorators.no_html_minification
将此装饰器应用于您想跳过 HTML 压缩的视图。
from django.shortcuts import render
from django_minify_html.decorators import no_html_minification
@no_html_minification
def example_view(request):
return render(request, "problematic-template.html")
动机
HTML 压缩是网络优化的一个被低估的技术。它可以在其他工具(如 Brotli 或 Gzip 的压缩)之上带来显著的节省。
在 Django 中已经有一个用于 HTML 压缩的现有包 django-htmlmin。但它要慢得多,因为它在 Python 中进行压缩。截至编写本文时,它也不再维护,自 2019 年 3 月以来没有发布。
还有其他压缩器,但在基准测试中 minify-html 超过了它们。这是一个真正经过优化和测试的 Rust 库,似乎是最佳的 HTML 压缩器。
历史上,Cloudflare 提供了自动压缩(2024 年 8 月已删除)。这对于 CDN 层来说很方便,因为它不需要应用程序更改。但它添加了一些开销:未压缩的 HTML 首先需要传输到 CDN,然后 CDN 需要解析响应,并将其重新组合。这也意味着您只有在代码上线后才能看到压缩的潜在副作用。总的来说,在 Django 中在 HTML 生成时压缩应该更快且更可预测。
项目详细信息
django_minify_html-1.9.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d67c6455d6ea7907a403e22888b4e810a997d51c0eaab4f3539accc6ff528d4f |
|
MD5 | 05e9279acdf032bf0528ce4f62788a3c |
|
BLAKE2b-256 | 4d64b4bd75960a8ed374a0c21b22a54bbe4b59087d8909cd75590c31468d05db |
django_minify_html-1.9.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c5c66c9c8bdf5e03aea4e680e90b155a20d90667409efceea521e048fa9f0918 |
|
MD5 | 1c6f321eb0e791b396720e59562dbd5d |
|
BLAKE2b-256 | 6a2c5b1286c2ee8f7a53e39832ba5b5fc7c733c456e6fcfdadd821074bc8b4d1 |