压缩HTML
删除注释和空白,并压缩页面中的CSS和JavaScript——同时不打乱真正会显示出来的间距。您的源代码不会离开浏览器。
- 绝不存储
- 无需排队,无需等待
- 无需注册,无水印
压缩后的HTML将显示在这里。
使用方法
粘贴HTML
也可以直接拖入文件。不存储任何内容——对源代码来说,这比对大多数东西都更重要。
选择压缩程度
注释、空白、内联CSS和内联JavaScript各有独立的开关。
复制或下载
会显示压缩前后的大小,让您看到缩小了多少。
哪些空白有意义,哪些没有
在HTML中,两个行内元素之间的空格是真实存在的空格,这正是细致的压缩工具与会破坏页面的压缩工具之间的区别。把两个链接之间的换行合并掉,屏幕上的文字就会连在一起;把pre块或textarea里的缩进合并掉,内容本身就变了,因为那里的空白就是内容。所以,只有在可以确定不会渲染的位置才删除空白,会渲染的位置则原样保留。对所有空格一视同仁全部删除的压缩工具,得到的文件更小,页面却明显出错。
注释会被删除,因为注释是写给维护源代码的人看的,而不是给读者看的——条件注释除外,它们是指令而不是备注。多余的属性会被去掉:script元素上的type="text/javascript"十年来一直是默认值,表单上的method="get"说的也只是表单本来就会做的事。
删除属性引号是合法的HTML,但默认关闭,这是有意为之。规范允许不带引号的属性值,只要其中不含空格或特殊字符,浏览器也能完美处理。模板引擎却常常不行:不带引号的属性里如果有Blade、Twig、Handlebars或JSX表达式,就无法被正确解析,而且错误会在构建时出现在一个谁都不想看的文件里。节省的空间很小,风险却不小,所以需要您手动开启。
衡量收益的可靠标准是压缩传输之后,而不是之前。服务器发送HTML时会用gzip或brotli压缩,这些算法非常擅长处理重复的空白——所以一个从100 KB压缩到70 KB的文档,实际传输时可能只是从12 KB变成11 KB。压缩HTML值得做,但它是三者中收益最小的;样式表和脚本才是真正的大头。
如果您需要的是别的
如果要处理的是整个网站而不是单个文件,这一步应该放在构建流程里,而不是浏览器标签页里。当今所有主流框架和静态网站生成器都会在构建时压缩HTML,手动操作意味着一旦有人忘了,压缩就不再发生。它们背后的库可以细致配置到每一项转换,当某条规则引发问题时,这一点很有用。
在优化标记之前,先看看页面实际有多大。几乎在所有真实网站中,HTML与图片、字体和JavaScript相比都微不足道——Lighthouse或浏览器自带的网络面板几秒钟就能告诉您答案,而答案通常是:一张未经优化的首屏大图,比页面上所有标记加起来都大。
常见问题
我的代码会被存储吗?
不会,对源代码来说这正是关键。不存储任何内容,也没有任何服务器能看到它。把专有源代码粘贴到会将其发送到某处的在线压缩工具中,就等于泄露,无论网站声称如何保留数据——而这恰恰是人们在匆忙中不假思索就会做的事。
压缩会破坏页面的显示效果吗?
按这里的设置不会。只在空白不会被渲染的位置合并空白:例如div和列表项这类块级元素之间。行内元素之间的空格会保留,因为删掉它会让两个词明显连在一起——"</span> <span>"在屏幕上是一个真实的空格,而"</span><span>"不是。<pre>和<textarea>的内容逐字节原样保留。删除可选的结束标签这一功能有意关闭:它是合法的HTML,但相当多的模板引擎和邮件客户端解析结果时会出问题。
它到底删除了什么?
注释、从未被渲染的空白,以及<style>和<script>块里的冗余部分。您的标记结构、属性和文本都不会改动——工具的测试方法是在压缩前后分别解析页面,确认元素数量、列表项和可见文本完全相同。
要不要删除属性引号?
只有当输出直接交给浏览器时才建议。这是合法的HTML,也能节省一点空间,但不带引号的属性会破坏某些模板引擎、某些邮件客户端和大多数简易解析器。此选项默认关闭,开启时页面会提醒您。
它会压缩页面里的CSS和JavaScript吗?
会,两者都会,方式与我们的CSS压缩和JavaScript压缩工具相同。有一个例外:如果内联CSS用了原生嵌套或新式媒体查询,本次就会跳过CSS压缩——CSS压缩器早于这些特性出现,会悄悄删掉规则。HTML仍然会被压缩,页面也会告诉您发生了什么,而不是交给您一个缺了样式的页面。
能缩小多少?
对于带缩进和注释的手写HTML,通常能缩小10–30%。之后服务器上的gzip会完成剩下的大部分工作——先压缩代码仍然有帮助,因为两者效果会叠加,但不要指望仅靠压缩代码就能让文件减半。
能一次压缩整个网站吗?
这里一次只能处理一个页面。页面很多的网站,应当在构建或部署步骤中压缩,让每次发布时每个页面都以同样方式处理——并且在版本控制里保存可读的源代码,而不是压缩后的输出。
小贴士: 只在空白不会被渲染的位置合并空白,因此pre和textarea里的文本原样保留,行内元素之间的空格也会保留。删除属性引号是合法的HTML,但会破坏某些模板引擎,因此默认关闭。
把这个工具放到您的网站上
博客、课程页面或帮助文章均可免费使用。粘贴一段代码,访客就能直接在您的页面上使用。