最近看到 markdown-stream-vue 比较火热,但想要实际使用的时候发现并不符合个人使用场景,并且其仅在 vue 渲染层做了优化,实际每次来新的 chunk 后还是会拼接之前收到的所有 markdown 字符串重新使用 markdown-it 做解析,但我想要的是从解析的层面就支持流式解析,因此有了当前项目 incremark。
它从收到 chunk 的时候就开始进行解析,之前已解析完成的块则不会重复解析,渲染层也支持了 vue/react 主流框架,后续会支持 svelte 与 solid 。
理论上来讲,当前的优化将 O(n²) 的解析优化到了 O(n),因此文档越大,收益越高,下面为实际 benchmark 测试,测试大文档流式解析收益达到了 46 倍,短小的 markdown 也有 2-20 倍的收益。
感兴趣可以查看官网 https://incremark-docs.vercel.app/zh/
Benchmark 测试结果(节选总结部分):
================================================================================
📈 Complete Benchmark Summary
================================================================================
| Document Size | Chunk | Time Saved | Chars Saved | Speedup |
|------------------|-------|------------|-------------|---------|
| Short (~1KB) | 10 | 60.7% | 98.0% | 2.54x |
| Short (~1KB) | 50 | 52.6% | 90.5% | 2.11x |
| Medium (~5KB) | 10 | 91.1% | 99.6% | 11.28x |
| Medium (~5KB) | 50 | 89.5% | 98.0% | 9.48x |
| Long (~10KB) | 10 | 95.6% | 99.8% | 22.78x |
| Long (~10KB) | 50 | 94.2% | 99.0% | 17.11x |
| Very Long (~20KB) | 10 | 97.8% | 99.9% | 45.99x |
| Very Long (~20KB) | 50 | 97.3% | 99.5% | 37.36x |
--------------------------------------------------------------------------------
📊 Average by Document Size:
Short (~1KB): 2.33x faster, 56.7% time saved
Medium (~5KB): 10.38x faster, 90.3% time saved
Long (~10KB): 19.94x faster, 94.9% time saved
Very Long (~20KB): 41.67x faster, 97.5% time saved
--------------------------------------------------------------------------------
🎯 Overall Average:
Time Saved: 84.8%
Chars Saved: 98.0%
Speedup: 18.58x
================================================================================
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.