Rust HTML压缩优化库minify-html-common的使用,高性能HTML代码压缩与优化工具

Rust HTML压缩优化库minify-html-common的使用,高性能HTML代码压缩与优化工具

安装

在项目目录中运行以下Cargo命令:

cargo add minify-html-common

或者在Cargo.toml中添加以下行:

minify-html-common = "0.0.2"

示例代码

以下是一个使用minify-html-common库压缩HTML代码的完整示例:

use minify_html_common::Cfg;
use minify_html_common::minify;

fn main() {
    // 原始HTML代码
    let html = r#"
        <!DOCTYPE html>
        <html>
            <head>
                <title>Example</title>
            </head>
            <body>
                <div class="content">
                    <p>This is some text with    extra spaces.</p>
                    <!-- This is a comment that will be removed -->
                </div>
            </body>
        </html>
    "#;
    
    // 配置压缩选项
    let cfg = Cfg {
        minify_js: true,     // 压缩JavaScript
        minify_css: true,    // 压缩CSS
        keep_comments: false, // 保留注释
        keep_html_and_head_opening_tags: false, // 保留html和head开标签
        keep_spaces_between_attributes: false,  // 保留属性间的空格
        keep_ssi_comments: false, // 保留SSI注释
    };
    
    // 压缩HTML
    let minified = minify(html.as_bytes(), &cfg);
    
    // 输出结果
    println!("Minified HTML:");
    println!("{}", String::from_utf8_lossy(&minified));
}

完整示例demo

以下是一个更完整的示例,展示了如何从文件读取HTML内容并压缩后写入新文件:

use std::fs;
use minify_html_common::{Cfg, minify};

fn main() {
    // 从文件读取HTML内容
    let html = fs::read_to_string("input.html").expect("无法读取输入文件");
    
    // 配置压缩选项
    let cfg = Cfg {
        minify_js: true,
        minify_css: true,
        keep_comments: false,
        keep_html_and_head_opening_tags: false,
        keep_spaces_between_attributes: false,
        keep_ssi_comments: false,
    };
    
    // 压缩HTML
    let minified = minify(html.as_bytes(), &cfg);
    
    // 将压缩后的内容写入文件
    fs::write("output.min.html", &minified).expect("无法写入输出文件");
    
    println!("HTML压缩完成,结果已保存到output.min.html");
}

库信息

  • 版本: 0.0.2
  • 许可证: MIT
  • 大小: 38.2 KiB
  • 发布时间: 超过1年前
  • Rust版本: 2018版

1 回复

Rust HTML压缩优化库minify-html-html的使用指南

概述

minify-html-common是一个高性能的Rust库,专门用于HTML代码的压缩和优化。它通过移除不必要的空白字符、注释和其他不影响页面功能的冗余内容,显著减小HTML文件体积,从而提高网页加载速度。

主要特性

  • 极快的压缩速度
  • 安全的压缩过程(不会破坏HTML结构)
  • 可配置的压缩选项
  • 支持保留特定注释
  • 移除可选标签
  • 最小化布尔属性

安装方法

在Cargo.toml中添加依赖:

[dependencies]
minify-html-common = "0.7"

基本使用方法

简单压缩示例

use minify_html_common::minify;

fn main() {
    let html = r#"
        <!DOCTYPE html>
        <html>
            <head>
                <title>Example</title>
            </head>
            <body>
                <h1>Hello, world!</h1>
            </body>
        </html>
    "#;
    
    let minified = minify(html.as_bytes(), &Default::default());
    println!("{}", String::from_utf8_lossy(&minified));
}

输出结果

<!DOCTYPE html><html><head><title>Example</title></head><body><h1>Hello, world!</h1></body></html>

高级配置

minify-html-common提供了多种配置选项来自定义压缩行为:

use minify_html_common::{minify, Cfg};

fn main() {
    let html = r#"
        <!-- 重要注释需要保留 -->
        <div class="container">
            <p>保留空白的内容</p>
        </div>
    "#;
    
    let cfg = Cfg {
        keep_comments: true,       // 保留所有注释
        keep_spaces_between_attributes: true, // 保留属性间的空格
        minify_css: true,          // 同时压缩内联CSS
        minify_js: true,           // 同时压缩内联JavaScript
        ..Default::default()
    };
    
    let minified = minify(html.as_bytes(), &cfg);
    println!("{}", String::from_utf8_lossy(&minified));
}

完整示例代码

下面是一个结合了基本使用和高级配置的完整示例:

use minify_html_common::{minify, Cfg};
use rayon::prelude::*;
use std::fs;

fn main() {
    // 示例1:基本压缩
    let basic_html = r#"
        <!DOCTYPE html>
        <html lang="en">
            <head>
                <meta charset="UTF-8">
                <title>基本示例</title>
                <style>
                    body { color: red; }
                </style>
            </head>
            <body>
                <h1>欢迎使用minify-html-common</h1>
                <script>
                    console.log('Hello from Rust!');
                </script>
            </body>
        </html>
    "#;
    
    let basic_minified = minify(basic_html.as_bytes(), &Cfg::default());
    println!("基本压缩结果:\n{}", String::from_utf8_lossy(&basic_minified));
    
    // 示例2:高级配置压缩
    let cfg = Cfg {
        keep_comments: true,     // 保留注释
        minify_css: true,        // 压缩内联CSS
        minify_js: true,         // 压缩内联JavaScript
        keep_spaces_between_attributes: false, // 不保留属性间空格
        ..Default::default()
    };
    
    let advanced_html = r#"
        <!-- 这是一个重要注释 -->
        <div class="container"  data-id ="123">
            <p style="color: blue; font-size: 16px;">高级配置示例</p>
            <script>
                function test() {
                    console.log('保留函数格式');
                }
            </script>
        </div>
    "#;
    
    let advanced_minified = minify(advanced_html.as_bytes(), &cfg);
    println!("\n高级配置压缩结果:\n{}", String::from_utf8_lossy(&advanced_minified));
    
    // 示例3:批量处理HTML文件
    let html_files = vec![
        basic_html.to_string(),
        advanced_html.to_string(),
        r#"<p>第三个HTML文件</p>"#.to_string()
    ];
    
    let minified_results = minify_files(html_files);
    println!("\n批量处理结果:");
    for result in minified_results {
        println!("{}", String::from_utf8_lossy(&result));
    }
}

// 使用Rayon并行处理多个HTML文件
fn minify_files(files: Vec<String>) -> Vec<Vec<u8>> {
    let cfg = Cfg::default();
    files
        .par_iter()
        .map(|html| minify(html.as_bytes(), &cfg))
        .collect()
}

性能优化技巧

  1. 批量处理:对于多个HTML文件,复用配置对象
  2. 并行处理:结合Rayon等并行库处理大量文件
  3. 缓存结果:对静态内容压缩后缓存结果

注意事项

  1. 压缩前确保HTML语法正确
  2. 某些框架(如Vue)的特殊注释可能需要保留
  3. 测试压缩后的页面功能是否正常
  4. 考虑与gzip/brotli等压缩算法结合使用

与其他工具对比

minify-html-common相比其他HTML压缩工具:

  • 比JavaScript实现的工具快10-100倍
  • 内存占用更低
  • 可作为库集成到Rust项目中
  • 提供更细粒度的控制选项

这个库特别适合构建工具、SSR应用和需要高性能HTML处理的场景。

回到顶部