1 个不稳定发布
0.1.0 | 2023年2月12日 |
---|
#7 in #mrml
每月115次下载
33KB
584 行
MRML
简介
本项目是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。
想要赞助我们吗?
感谢 zachzurn。
许可证
依赖项
~0.8–1.3MB
~27K SLoC