50个稳定版本 (4个主要版本)
5.0.0 | 2023年12月15日 |
---|---|
4.0.0 | 2022年11月13日 |
3.0.17 |
|
3.0.15 | 2022年3月17日 |
1.1.3 | 2018年11月14日 |
在 编码 中排名 100
每月下载量 2,939
用于 36 个crate(直接使用17个)
67KB
1K SLoC
HTML Minifier
此库可以帮助您同时生成和压缩HTML代码。它还支持压缩 <style>
,<script>
元素中的JS和CSS,并忽略对 <pre>
,<code>
和 <textarea>
元素的压缩。
HTML 压缩遵循以下规则
- ASCII 控制字符(0x00-0x08,0x11-0x1F,0x7F)始终被移除。
- 注释可以选择移除。(默认移除)
- 无用的空白字符(空格、制表符和换行符)被移除。
- 空白字符(空格、制表符和换行符)转换为单个
'\x20' 或单个 '\n',如果可能的话。
- 空属性值被折叠。(例如
<input readonly="">
=><input readonly>
) - 除了以下元素外,所有元素的内部HTML都被压缩
<pre>
<textarea>
<code>
(可选,默认压缩)<style>
(如果type
属性不受支持)<script>
(如果type
属性不受支持)
- 在
<script>
和<style>
元素中的 JS 代码和 CSS 代码被 minifier 压缩。
在使用此库之前,不需要完全生成原始(非压缩)HTML,因为此库不会进行反序列化以创建 DOM。
示例
use html_minifier::HTMLMinifier;
let mut html_minifier = HTMLMinifier::new();
html_minifier.digest("<!DOCTYPE html> <html ").unwrap();
html_minifier.digest("lang= en >").unwrap();
html_minifier.digest("
<head>
<meta name=viewport>
</head>
").unwrap();
html_minifier.digest("
<body class=' container bg-light '>
<input type='text' value='123 456' readonly='' />
123456
<b>big</b> 789
ab
c
中文
字
</body>
").unwrap();
html_minifier.digest("</html >").unwrap();
assert_eq!("<!DOCTYPE html> <html lang=en>
<head>
<meta name=viewport>
</head>
<body class='container bg-light'>
<input type='text' value='123 456' readonly/>
123456
<b>big</b> 789
ab
c
中文
字
</body>
</html>".as_bytes(), html_minifier.get_html());
use html_minifier::HTMLMinifier;
let mut html_minifier = HTMLMinifier::new();
html_minifier.digest("<pre > Hello world! </pre >").unwrap();
assert_eq!(b"<pre> Hello world! </pre>", html_minifier.get_html());
use html_minifier::HTMLMinifier;
let mut html_minifier = HTMLMinifier::new();
html_minifier.digest("<script type=' application/javascript '> alert('Hello!') ; </script>").unwrap();
assert_eq!("<script type='application/javascript'>alert('Hello!')</script>".as_bytes(), html_minifier.get_html());
将 HTML 写入 Writer
如果您不想将 HTML 存储在内存中(例如,写入文件),您可以使用 HTMLMinifierHelper
结构体,它提供了一个低级 API,允许您在调用 digest
方法时传递您的输出实例。
use html_minifier::HTMLMinifierHelper;
use std::fs::File;
use std::io::Read;
let mut input_file = File::open("tests/data/w3schools.com_tryhow_css_example_website.htm").unwrap();
let mut output_file = File::create("tests/data/index.min.html").unwrap();
let mut buffer = [0u8; 256];
let mut html_minifier_helper = HTMLMinifierHelper::new();
loop {
let c = input_file.read(&mut buffer).unwrap();
if c == 0 {
break;
}
html_minifier_helper.digest(&buffer[..c], &mut output_file).unwrap();
}
Crates.io
https://crates.io/crates/html-minifier
文档
许可
依赖
~0.6–1MB
~25K SLoC