markdown-wasm:一个非常快的WebAssembly Markdown解析器

2020 年 11 月 15 日

markdown-wasm:一个非常快的WebAssembly Markdown解析器

Rasmus Andersson 发布了markdown-wasm,一种从 C 语言移植到 WebAssembly 的 Markdown 解析器,速度非常快。在一次基准测试中,markdown-wasm 的速度是最好的 JavaScript Markdown 解析器的两倍,而且 markdown-wasm 体积很小(压缩后只有 31KB)。


在一个基准测试中,使用 markdown-wasm 和其他流行的 Markdown 解析器(例如markdown-itcommonmarkmarkedshowdown)解析一系列符合 CommonMark 规范的示例Markdown文件,markdown-wasm 解析示例文件的速度是排在第二位的 markdown-it 的两倍。



(每秒聚合操作,来自markdown-wasm代码库


它之所以能做到这一点,似乎是因为它始终比基准测试中的其他解析器运行速度快:



(最短和最长解析时间,来自markdown-wasm代码库


markdown-wasm 利用了MD4C,一个用 C 语言开发的符合 CommonMark 规范的 markdown 解析器。markdown-wasm 使用 wasmc 将 MD4C 移植到 WebAssembly,它可以处理 C 和 C++ WASM/JS 项目的编译、链接和打包。markdown-wasm 没有依赖项。


markdown-wasm 提供了一个parse API,它会获取 Markdown 内容(JavaScript 字符串或 UTF8 编码数据)并将其转换为 HTML(作为 JavaScript 字符串或Uint8Array返回)。可以在 Node.js 中使用 markdown-wasm,或者用 wasmc 从源代码开始构建。


markdown-wasm 通过减少处理工作量(通过更高效的算法和数据结构)、并行执行(利用多核架构)或者更快地执行计算(例如,编译而非解释、AOT 编译而非 JIT 编译)来提升性能。在对性能要求较高的场景中,开发人员通常会使用那些设计用来跨多个计算核心高效编译和执行源代码的语言(Rust、Go、C 语言等)。markdown-wasm 赶上了开发人员为了提升性能而使用编译到原生(compile-to-native)语言开发软件的大趋势,最终移植到了 WebAssembly,这样就可以在各种目标环境和运行时(例如,在浏览器中)中运行。


但性能可能并不总是最重要的。例如,markdown-it 解析器支持 JavaScript 插件扩展。这样的可扩展性促进了社区贡献和插件生态系统的发展。


开发人员可以在专门的Playground上体验“markdown-wasm”。虽然 markdown-wasm 支持数学符号(例如 $x_0$),但 Playground 却不支持。markdown-wasm 支持 CommonMark 规范指定和其他扩展提供的所有特性。


在浏览器中可以这样使用 markdown-wasm:


<script src="markdown.js"></script><script>window["markdown"].ready.then(markdown => {  console.log(markdown.parse("# hello\n*world*"))})</script>
复制代码


在 Node.js 中可以这样使用 markdown-wasm:


const  markdown  =  require("./dist/markdown.node.js"console.log(markdown.parse("# hello\n*world*"))
复制代码


markdown-wasm 采用的是 MIT 开源许可。


原文链接Markdown-Wasm, a Very Fast Markdown Parser Written in WebAssembly


2020 年 11 月 15 日 16:001784

评论

发布
暂无评论
发现更多内容

谈谈阿里云发布新一代容器、Serverless 等云原生产品

关贺宇

阿里云 容器 云原生 中间件

食堂就餐卡系统架构设计文档

hifly

极客大学架构师训练营 UML 架构文档 部署图 时序图

产品路线图–您的产品战略路径指南

涛哥

敏捷 产品经理

架构师训练营第一周命题作业

兔狲

IT自由职业者是怎么样的感受和体验

奈学教育

IT

IT自由职业者是怎么样的感受和体验

古月木易

IT职场

架构师训练营-第一周-食堂就餐卡系统设计

Anrika

架构师 极客大学架构师训练营

极客时间 - 架构师训练营 - week1 - 食堂就餐卡系统设计

毛聪

极客时间 极客大学架构师训练营 食堂就餐卡系统设计

《Web全栈实用编程》一书征集意见

老魚

程序员 前端 Web 后端 全栈

我们需要干货吗?

Neco.W

能力提升 经验分享 干货

架构师训练营第一周-食堂就餐卡系统设计

王铭铭

【话题讨论】「世界上最好的语言」?25周岁的 PHP “配” “不配”

InfoQ写作平台

php 写作平台 PHP25周年 活动专区

设计模式之单件模式

Geek_896619

Java 设计模式

week1-食堂就餐卡系统设计

不在调上

基于UML的食堂就餐卡系统设计

王海

极客大学架构师训练营

干货|微服务线上生命周期管理

博文视点Broadview

容器 微服务 微服务架构 微服务冶理 架构师

从软件架构说起

傻傻的帅

架构 架构要素 架构设计原则

架构师训练营-第一周学习总结

hellohuan

极客大学架构师训练营

架构师训练营第1周作业二:学习总结

sunpengjian

第一周课后作业——食堂就餐卡系统概要设计

jiangnanage

食堂就餐卡系统设计

hellohuan

架构 极客大学架构师训练营

ChaosBlade:从零开始的混沌工程(二)

郭旭东

云原生 混沌工程

架构师训练营第1周作业一:食堂就餐卡系统设计

sunpengjian

极客大学架构师训练营第一周学习总结

竹森先生

学习 架构设计 极客大学架构师训练营

ZooKeeper核心原理及应用场景

古月木易

食堂就餐卡系统架构设计

任小龙

架构师训练营第1周_学习总结

方舟勇士

课程总结

Week01 学习笔记

任小龙

区块链技术如何应用于版权保护?

CECBC区块链专委会

区块链技术 维权 著作权 版权保护 侵权

ZooKeeper核心原理及应用场景

奈学教育

zookeeper

架构训练营第一周学习总结

陈靓-哲露

markdown-wasm:一个非常快的WebAssembly Markdown解析器-InfoQ