【rust】 基于rust编写wasm,实现markdown转换为html文本
文章目录
- 背景
- 转换预览
- 核心代码
- 前置依赖
- rustup换源
- cargo本地路径修改(可选)
- cargo换源中科大
- wasm-pack安装
背景
尝试用rust编写一款markdown转html的插件,通过wasm给html使用,不得不说体积挺小,约200K, 比go的wasm起步2MB看着舒服点。
- 不过go的配置和换源比较方便。
- rust需要给rustup, cargo换源, 安装链接器
使用 wasm-pack build --target web打包可生成js和wasm如下(ts可以直接删):
4核的服务器上build总共8秒, 要是去掉wasm-opt估计1秒多搞定,比go还快了。
转换预览
核心代码
use wasm_bindgen::prelude::*;
use pulldown_cmark::{Parser, html};
#[wasm_bindgen]
pub fn markdown_to_html(markdown: &str) -> String {
let mut html_output = String::new();
let parser = Parser::new(markdown);
html::push_html(&mut html_output, parser);
html_output
}
前置依赖
rustup换源
export RUSTUP_DIST_SERVER="https://rsproxy.cn"
export RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup"
cargo本地路径修改(可选)
export RUSTUP_HOME= H O M E / o p t / r u s t / r u s t u p e x p o r t C A R G O H O M E = HOME/opt/rust/rustup export CARGO_HOME= HOME/opt/rust/rustupexportCARGOHOME=HOME/opt/rust/cargo
cargo换源中科大
tee > ~/.cargo/config << EOF
[source.crates-io]
replace-with = 'rsproxy'
[source.rsproxy]
registry = "https://rsproxy.cn/crates.io-index"
EOF
wasm-pack安装
wasm-pack build的时候会调用wasm-opt文件, 自动从gayhub下载, 当然有可能下载不下来,原因你懂的。
cargo install wasm-pack