V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
1244943563
V2EX  ›  程序员

Incremark Solid 版本上线: Vue/React/Svelte/Solid 四大框架,统一体验

  •  
  •   1244943563 · 1 天前 · 867 次点击

    Incremark 现已支持 Solid ,至此完成了对 Vue 、React 、Svelte 、Solid 四大主流前端框架的全面覆盖。

    为什么要做框架无关

    市面上大多数 Markdown 渲染库都是针对特定框架开发的。React 生态有 react-markdown ,Vue 生态有各种 v-md 组件。这带来几个问题:

    1. 重复造轮子:每个框架社区都在独立实现相似的功能
    2. 能力不一致:不同框架的实现质量参差不齐
    3. 团队切换成本:换框架意味着重新学习新的 API

    Incremark 采用不同的思路:核心逻辑与 UI 框架完全解耦

    @incremark/core 负责所有解析、转换、增量更新的工作,输出的是框架无关的数据结构。各框架包(@incremark/vue@incremark/react@incremark/svelte@incremark/solid)只需要把这些数据渲染成对应框架的组件即可。

    这意味着:

    • 核心能力一次实现,四个框架同时受益
    • Bug 修复和性能优化自动同步到所有框架
    • API 设计保持高度一致,切换框架几乎零学习成本

    包结构

    ┌───────────────────────────────┐
    │       @incremark/core         │
    │                               │
    │  增量解析 · 双引擎 · 插件系统  │
    └───────────────┬───────────────┘
                    │
                    ▼
    ┌───────────────────────────────┐
    │  @incremark/vue               │
    │  @incremark/react             │
    │  @incremark/svelte            │
    │  @incremark/solid  ← NEW      │
    └───────────────┬───────────────┘
                    │
                    ▼
    ┌───────────────────────────────┐
    │       @incremark/theme        │
    │                               │
    │     样式 · 主题 · 代码高亮     │
    └───────────────────────────────┘
    

    增量解析

    传统 Markdown 渲染器在流式场景下存在性能问题:每次新内容到达都要重新解析整个文档,复杂度是 O(n²)。

    Incremark 只处理新增内容,已解析的块不再重复处理,复杂度降至 O(n)。

    四个框架的用法对比

    四个框架的组件 API 完全一致,只是语法风格不同:

    Vue

    <script setup>
    import { IncremarkContent } from '@incremark/vue'
    // ...
    </script>
    
    <template>
      <IncremarkContent :content="content" :is-finished="isFinished" />
    </template>
    

    React

    import { IncremarkContent } from '@incremark/react'
    // ...
    
    <IncremarkContent content={content} isFinished={isFinished} />
    

    Svelte

    <script>
    import { IncremarkContent } from '@incremark/svelte'
    // ...
    </script>
    
    <IncremarkContent content={content} isFinished={isFinished} />
    

    Solid

    import { IncremarkContent } from '@incremark/solid'
    // ...
    
    <IncremarkContent content={content()} isFinished={isFinished()} />
    

    可以看到,除了各框架本身的响应式语法差异( Vue 的 ref、React 的 useState、Svelte 的 $state、Solid 的 createSignal),组件的使用方式完全统一。

    在线演示

    链接

    MIT 许可证。

    第 1 条附言  ·  1 天前
    github 链接交给 ai 重构架构图的时候给我替换了,正确的为: https://github.com/kingshuaishuai/incremark 特别抱歉
    13 条回复    2026-01-12 15:37:08 +08:00
    beginor
        1
    beginor  
       1 天前 via Android
    现在 Angular 都不算前段框架了么, 连 solid 和 svelte 都不如?
    1244943563
        2
    1244943563  
    OP
       1 天前
    @beginor svelte 确实很火,solid 我觉得不怎么样很小众,angular 我没想好要不要适配后面有人反馈再做吧
    subframe75361
        3
    subframe75361  
       1 天前
    挺不错的,已 star
    jsq2627
        4
    jsq2627  
       1 天前
    github 链接错了吧。是不是 AI 润色搞坏的 :doge:
    1244943563
        5
    1244943563  
    OP
       1 天前
    @jsq2627 我滴乖乖,是给我搞坏了,https://github.com/kingshuaishuai/incremark
    1244943563
        6
    1244943563  
    OP
       1 天前
    感谢支持
    1244943563
        7
    1244943563  
    OP
       1 天前
    @jsq2627 感谢支持
    TossPig
        8
    TossPig  
       23 小时 35 分钟前
    我也要 Angular
    1244943563
        9
    1244943563  
    OP
       20 小时 10 分钟前
    @TossPig
    @beginor

    真的要?那我要规划了,做好通知你们
    codehz
        10
    codehz  
       18 小时 24 分钟前
    这个增量解析好像并不一定能提升性能。。也许是对比的文档比较短?
    我这边测试最高 1.4x,最低 0.9x 4.6ms vs 4.9ms 这样
    1244943563
        11
    1244943563  
    OP
       16 小时 40 分钟前
    @codehz 目前是解析层测性能提升,benchmark 脚本已公开,clone 仓库,按文档,将你要测试的 markdown 文件全都丢进 test-data 中,短文档 increamrk 不占优势,长文档优势巨大

    原因:incremark 默认使用极速模式,也就是使用 marked 作为引擎,streamdown 与 x-markdown 也都是 marked 作为引擎,incremark 每次只解析一个块,其他的每次都全量解析,单纯从相同的 marked 角度出发,你认为 o(n) 快还是 o(n²) 快。increamrk 短内容下,因为各种边界检测 + 内置的一些插件,会比默认 marked 慢的,这个文档中有描述。

    测试方法文档: http://incremark.com/zh/advanced/benchmark.html
    orluna
        12
    orluna  
       3 小时 8 分钟前
    实用!
    nzbin
        13
    nzbin  
       1 小时 47 分钟前
    暂时用不到,但也希望支持 Angular
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   5265 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 09:24 · PVG 17:24 · LAX 01:24 · JFK 04:24
    ♥ Do have faith in what you're doing.