Astro团队最近发布了一款名为Sätteri的全新Markdown和MDX处理器,它已经成为最新版Astro 7.0的核心组件。这款处理器用Rust编写,由Astro核心贡献者Erika在Bruits协作团体独立维护。虽然Sätteri独立于Astro组织之外,但它已经成了这个框架的关键依赖。
开发团队的说法很直接:它能让构建速度提升高达60%。实际测试中,把Astro和Cloudflare的文档站点切换到Sätteri后,每次构建时间缩短了一分钟以上,Astro 7的整体构建速度提升了15%到61%。
![]()
速度从哪来?
大部分性能提升来自一个关键动作:把解析工作移出JavaScript。之前的方案是基于unified的remark、rehype以及一长串依赖项的管道,这些插件需要逐个遍历完整的语法树。Sätteri直接在高性能Rust Markdown和MDX引擎之上提供灵活的JavaScript插件系统,用pulldown-cmark做CommonMark解析,用Oxc做MDX表达式解析。
它附带平台专属的原生二进制文件,并提供WASM回退方案——这和Astro新版Rust编译器采用的实现思路一致。用户甚至可以通过WebAssembly在浏览器里直接在线体验。
不止是快,还省了插件
速度不是唯一的改进。Sätteri原生实现了很多之前需要单独插件才能实现的功能,包括GitHub风格Markdown、智能标点、容器指令、数学公式、前置元数据、上标、下标和维基链接。这些可选功能可以通过处理器配置直接开启。
这个处理器最初是作为可选的@astrojs/markdown-satteri包出现在Astro 6.4中,到了Astro 7就被设置为默认选项。对大多数用户来说,这意味着更少的依赖和更快的构建,不用再折腾那一长串插件链。
社区有争议,作者有回应
不过,这个改动在Hacker News上引发了一些讨论。一位开发者表达了自己的失望:
"仅仅为了构建速度的提升,就从广泛支持的unified/rehype迁移到不兼容rehype的自有Markdown工具,这令人相当沮丧。好在他们添加了一个工具来继续使用rehype,但我不确定这套兼容方案能维持多久。"
库作者Erika对此作出了回应:
"我们无意移除对unified生态系统的支持,我们特意将Markdown处理管道设计为可插拔的,以便两者可以共存!我们的绝大多数用户不使用unified插件,因此一个更快(且依赖项减少约100个)的管道作为默认选项更为合适。"
还有评论者拿Sätteri和marked这样的标准库做对比。Erika给出的回应是:marked非常轻量,但与Sätteri和markdown-it(及其分支)相比速度稍慢。她不确定marked的扩展性如何,但Sätteri复用了与unified生态系统相同的AST格式,这可能让人感觉更友好。"不过两者都是不错的选择!"
迁移要注意什么
迁移时最主要的问题是:Sätteri不运行remark或rehype插件。Astro v7升级指南给出了明确建议:没有使用插件的项目无需改动;依赖插件的项目可以将其移植为Sätteri MDAST或HAST插件,或者通过安装@astrojs/markdown-remark继续使用unified。升级可以通过npx @astrojs/upgrade命令完成。
Sätteri并不是唯一追求原生高性能Markdown的项目。用Zig编写的Bun.markdown也宣称取得了相近的性能提升,但缺少插件系统。Sätteri复用unified AST格式的能力,是它区别于其他方案的特点。这个项目是开源的,可以通过npm和crates.io获取。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.