ToolDeck

HTML 压缩工具

通过删除空白和注释来压缩 HTML

加载示例

HTML 输入

压缩后的 HTML

本地运行 · 粘贴密钥安全无忧
压缩后的 HTML 将显示在此处…

什么是 HTML 压缩?

HTML 压缩是在不改变浏览器渲染效果的前提下缩小 HTML 文档体积的过程。HTML 压缩工具会移除仅供开发者阅读的字符:标签之间的空白、注释、可选的闭合标签以及冗余的属性值。输出结果在功能上与源代码完全相同,但字节数更小,这意味着更快的下载速度和更短的首屏渲染时间。

浏览器将 HTML 解析为 DOM 树时会丢弃大多数空白。两个 div 标签之间的连续空格和换行符对渲染页面没有任何视觉影响。注释也会被解析器忽略。压缩正是利用了这些规则,提前去除解析器本就会丢弃的内容,从而避免这些数据通过网络传输。

HTML 压缩的节省效果因文档而异。大量注释的模板、深层缩进的服务端渲染页面以及带有内联样式的 CMS 输出,仅靠压缩通常可减少 15-30% 的体积。对于小文档,绝对节省量有限,但对于高流量网站,每次页面加载节省的几千字节,在数百万次请求中会积累成可观的带宽节省。

为什么使用此 HTML 压缩工具?

粘贴 HTML 即可立即获得压缩输出。无需安装构建工具,无需配置文件,无需注册账号。

即时输出
输入时结果实时显示。粘贴完整页面或单个代码片段,无需等待 CLI 命令或构建步骤完成即可看到压缩结果。
🔒
隐私优先处理
所有压缩均在浏览器中通过 JavaScript 完成。您的 HTML 不会离开您的设备。可安全用于包含内部 URL、令牌或客户数据的标记。
📊
体积报告
并排显示原始和压缩后的字节数。在决定是否使用压缩版本之前,可以精确了解节省了多少字节。
📋
一键复制
一键将压缩输出复制到剪贴板。粘贴到部署流水线、内联到邮件模板,或直接提交。

HTML 压缩工具使用场景

前端开发
在部署到生产环境之前压缩 HTML 模板。减少服务端渲染页面、静态站点生成器输出或单页应用外壳的传输体积。
后端工程
在将 Django、Rails 或 Laravel 等服务端框架生成的 HTML 响应发送给客户端之前,去除注释和空白。
DevOps 与 CI 流水线
在构建流水线中添加 HTML 压缩步骤。在推送到预发布或生产环境之前,验证压缩后的输出是否正确渲染。
QA 与测试
对比两个构建版本的压缩输出,检查是否存在意外的结构变化。压缩可以规范化空白,使结构差异对比更清晰。
邮件模板优化
邮件客户端对 HTML 邮件有体积限制(Gmail 会截断超过 102 KB 的邮件)。压缩邮件模板可在保留全部内容的同时控制在限制以内。
学习 Web 性能
学生可以粘贴 HTML 并观察压缩去除了哪些内容,从而了解哪些字符对浏览器有语义意义,哪些只是纯粹的排版装饰。

HTML 压缩会删除什么

完整功能的 HTML 压缩工具会在空白移除之外应用多种转换。下表列出了最常见的技术,从最安全(始终无损)到最激进(盲目应用可能导致边缘情况出错)排序。

技术压缩前压缩后
Whitespace between tags<div> <p> text </p> </div><div><p>text</p></div>
HTML comments<!-- TODO: fix later -->(removed entirely)
Redundant attribute quotesclass="main"class=main
Boolean attribute valuesdisabled="disabled"disabled
Empty attribute valuesid=""(attribute removed)
Optional closing tags</li>, </td>, </p>(removed when safe)
Type on script/styletype="text/javascript"(removed — default)
Protocol in URLshttps://cdn.example.com//cdn.example.com

压缩 vs. Gzip 压缩

开发者有时会问,当服务器已启用 Gzip 或 Brotli 压缩时,是否还有必要进行 HTML 压缩。简短的回答是:有必要,两者结合效果最佳。

HTML 压缩(Minification)
在文本层面操作。删除解析器忽略的字符:注释、空白、冗余属性。在应用任何压缩之前减小原始文件大小。在构建时执行一次。
Gzip / Brotli 压缩(Compression)
在字节层面操作。查找重复的字节模式并用更短的引用编码。由 Web 服务器应用于每个 HTTP 响应。浏览器在接收时解压。

HTML 压缩减少了 Gzip 处理的输入量,因此压缩输出也更小。Google 的 PageSpeed 指南建议同时应用两者。在典型页面上,HTML 压缩可节省原始大小的 15-25%,Gzip 再将结果压缩 60-80%。综合来看,总传输大小可降至原始未压缩文档的 10-20%。

代码示例

以下是四种环境中 HTML 压缩的实用示例,每个示例均删除注释并折叠空白。

JavaScript (html-minifier-terser)
import { minify } from 'html-minifier-terser'

const html = `
  <div class="card">
    <!-- user profile -->
    <p>  Hello, world!  </p>
  </div>
`

const result = await minify(html, {
  collapseWhitespace: true,
  removeComments: true,
  removeRedundantAttributes: true,
  removeEmptyAttributes: true,
})
// → '<div class="card"><p>Hello, world!</p></div>'
Python (htmlmin)
import htmlmin

html = """
<div class="card">
  <!-- user profile -->
  <p>  Hello, world!  </p>
</div>
"""

result = htmlmin.minify(html, remove_comments=True, remove_empty_space=True)
# → '<div class="card"><p>Hello, world!</p></div>'
Go (tdewolff/minify)
package main

import (
    "fmt"
    "github.com/tdewolff/minify/v2"
    "github.com/tdewolff/minify/v2/html"
)

func main() {
    m := minify.New()
    m.AddFunc("text/html", html.Minify)

    input := `<div class="card">
  <!-- user profile -->
  <p>  Hello, world!  </p>
</div>`

    result, _ := m.String("text/html", input)
    fmt.Println(result)
    // → <div class=card><p>Hello, world!</div>
}
CLI (html-minifier-terser)
# Install globally
npm install -g html-minifier-terser

# Minify a file
html-minifier-terser --collapse-whitespace --remove-comments input.html -o output.html

# Pipe from stdin
cat index.html | html-minifier-terser --collapse-whitespace --remove-comments

# With all common optimizations
html-minifier-terser \
  --collapse-whitespace \
  --remove-comments \
  --remove-redundant-attributes \
  --remove-empty-attributes \
  --minify-css true \
  --minify-js true \
  input.html -o output.min.html

常见问题

HTML 压缩会破坏页面吗?
安全压缩(删除注释和折叠空白)不会改变浏览器渲染效果。删除可选闭合标签或折叠布尔属性等激进选项属于 HTML 规范的一部分,在所有现代浏览器中均可正常工作。需要注意的是 pre 和 textarea 内容,其中空白具有语义意义。优质的压缩工具会保留这些元素内部的空白。
HTML 压缩后能缩小多少?
典型节省范围为原始文件大小的 10% 到 30%,具体取决于源文件中空白和注释的数量。深度缩进、注释丰富的模板节省最大。格式已经紧凑、几乎没有格式化的 HTML 可能只缩小 5-8%。
已经使用 Gzip 的情况下还需要压缩 HTML 吗?
是的。HTML 压缩和 Gzip 在不同层面工作。HTML 压缩删除冗余的文本字符;Gzip 查找重复的字节模式。先压缩 HTML 意味着 Gzip 需要处理的数据更少,最终压缩输出更小。Google 建议同时应用两者。
压缩包含内联 JavaScript 的 HTML 是否安全?
基本的空白折叠压缩器不会修改 script 标签内的内容。带有 --minify-js 选项的压缩器还会使用 JS 压缩器压缩内联 JavaScript。如果您的内联脚本依赖重要的空白(罕见情况),请测试输出。大多数内联脚本在压缩后可正常工作。
HTML 压缩(minification)和 HTML 压缩(compression)有什么区别?
Minification 是构建时的文本转换,删除不必要的字符。Compression(Gzip、Brotli)是服务器端的二进制编码,压缩 HTTP 响应。Minification 是不可逆的(注释已删除),而 Compression 在浏览器接收时会被还原。
压缩会影响 SEO 吗?
不会。搜索引擎爬虫像浏览器一样解析 DOM,会忽略空白和注释。HTML 压缩不改变 DOM 结构,因此不影响搜索引擎对页面的索引方式。更小的 HTML 带来更快的页面加载速度,可能通过核心网页指标信号间接提升排名。
HTML 压缩与 CSS 或 JavaScript 压缩有何不同?
CSS 和 JavaScript 压缩工具会重命名变量、删除死代码,并执行特定语言的优化。HTML 压缩工具更简单,因为 HTML 没有变量或可执行逻辑可以优化。HTML 压缩专注于空白、注释和冗余属性语法。