2020 Google开发者大会重磅开幕 了解详情

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:00 1331

评论

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

138 张图带你 MySQL 入门

cxuan

MySQL 数据库

「架构师训练营」第 3 周作业

邓江川。

Week 03 学习总结 代码重构

Z冰红茶

架构师训练营第 3 周 _ 课后作业

方舟勇士

课程作业

区块链中的“链上”和“链下”

CECBC区块链专委会

区块链技术 分布式身份标识 难以篡改

week3 总结

雪涛公子

Raft探索历程--Part1

老胡爱分享

分布式协同 raft

第三周作业

胡江涛

极客大学架构师训练营

第三周总结

胡江涛

极客大学架构师训练营

ARTS 第 3 周

乌拉里

架构师训练营 第3周总结

Lingjun

极客大学架构师训练营

Feign Client 原理和使用

公众号:好奇心森林

Spring Boot HTTP

Spring 源码学习 - @Async注解实现原理

公众号:好奇心森林

Spring Boot aop

单例模式和组合模式

王鹏飞

架构师训练营 第3周作业

Lingjun

极客大学架构师训练营

每周学习总结

Conn

极客大学架构师训练营

数字政府升级下的数据产品探索

数据司令

大数据 政务信息化 数字政务

创业公司技术体系建设

星际行者

Kubernetes DevOps APM 基础设施

易纲:上海可以在人民币自由兑换等方面先行先试

CECBC区块链专委会

数字货币 区块链技术 金融科技中心

搞定 HTTP 协议(三):如何严谨地描述一个 HTTP 报文?

零和幺

https HTTP

如何搭建一个本地服务器集群

Rayjun

分布式

信息的表示与存储-整数的运算

引花眠

计算机基础

设计模式-单例&组合

Z冰红茶

单例及组合模式实践

WulalaOlala

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

重学设计模式之单例模式

设计模式 单例模式 Singleton

设计模式学习总结

qihuajun

week3 命题作业

任小龙

第三章总结

模式与重构

满山李子

ARTS打卡 第4周

引花眠

ARTS 打卡计划

Week01 作业

Conn

微服务治理平台化探索

微服务治理平台化探索

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