【rust】 基于rust编写wasm,实现markdown转换为html文本

时间:2024-09-29 17:17:15

文章目录

    • 背景
    • 转换预览
    • 核心代码
    • 前置依赖
      • 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