#mjml #mrml #email #parse #macro #features

mrml-parse-macros

MRML crate的解析功能宏

1 个不稳定发布

0.1.0 2023年2月12日

#7 in #mrml

Download history 7/week @ 2024-03-27 14/week @ 2024-04-03

每月115次下载

自定义许可证

33KB
584

MRML

Crates.io Crates.io FOSSA Status

.github/workflows/main.yml codecov

Average time to resolve an issue Percentage of issues still open Maintainability

简介

本项目是Rust中MJML标记语言的实现。

如何在代码中使用它

更新您的 cargo.toml

[dependencies]
mrml = "1.2"
serde = { version = "1.0", features = ["derive"] }

创建您的 main.rs

use mrml;

fn main() {
    let root = mrml::parse("<mjml><mj-body></mj-body></mjml>").expect("parse template");
    let opts = mrml::prelude::render::Options::default();
    match root.render(&opts) {
        Ok(content) => println!("{}", content),
        Err(_) => println!("couldn't render mjml template"),
    };
}

为什么?

  • A Node.js服务器渲染MJML模板在启动时大约占用20MB的RAM,在压力测试下占用130MB。在Rust中,启动时小于1.7MB,压力测试时略小于3MB。Rust版本还可以每秒处理两倍多的请求。您可以通过运行 bash script/run-bench.sh 进行基准测试。
  • JavaScript实现不能在浏览器中运行;Rust版本(以及WebAssembly版本)可以。

您想贡献?

请随意阅读我们的 贡献指南行为准则

性能

使用相同的Linux amd64机器,渲染amario模板

  • Node: 606.59ms
  • Rust: 3.48ms

未实现的功能

  • mj-style[inline]: 尚未实现。它需要解析生成的HTML,然后应用内联样式(这是在mjml中执行的方式),这将杀死性能。在渲染时应用它将提高性能,但仍需要解析CSS。
  • mj-include: 尚未实现。它需要在使用mrml时处理加载远程模板,当使用wasm(浏览器或服务器端)格式时,这意味着能够从不同的位置加载(file://https://、相对路径等)。

谁在使用MRML?

如果您正在使用MRML并希望被添加到此列表中,请不要犹豫,创建一个问题或打开一个pull request。

什么是使用MRML的?

mjml_nif - Elixir 库

mrml-ruby - Ruby 库

mjml-python - Python 库

如果您正在使用MRML并希望被添加到此列表中,请不要犹豫,创建一个问题或打开一个pull request。

想要赞助我们吗?

Buy Me A Coffee

感谢 zachzurn

许可证

FOSSA Status

依赖项

~0.8–1.3MB
~27K SLoC