Incremark Solid 版本上线: Vue/React/Svelte/Solid 四大框架,统一体验 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
1244943563
V2EX    程序员

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

  •  1
     
  •   1244943563 2 天前 1121 次点击

    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 特别抱歉
    15 条回复    2026-01-13 13:02:02 +08:00
    beginor
        1
    beginor  
       2 天前 via Android
    现在 Angular 都不算前段框架了么, 连 solid 和 svelte 都不如?
    1244943563
        2
    1244943563  
    OP
       2 天前
    @beginor svelte 确实很火,solid 我觉得不怎么样很小众,angular 我没想好要不要适配后面有人反馈再做吧
    subframe75361
        3
    subframe75361  
       2 天前
    挺不错的,已 star
    img src="https://cdn.v2ex.com/avatar/3160/2be7/57703_normal.png?m=1694079140" class="avatar" border="0" align="default" alt="jsq2627" data-uid="57703" />
        4
    jsq2627  
       2 天前
    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  
       1 天前
    我也要 Angular
    1244943563
        9
    1244943563  
    OP
       1 天前
    @TossPig
    @beginor

    真的要?那我要规划了,做好通知你们
    codehz
        10
    codehz  
       1 天前
    这个增量解析好像并不一定能提升性能。。也许是对比的文档比较短?
    我这边测试最高 1.4x,最低 0.9x 4.6ms vs 4.9ms 这样
    1244943563
        11
    1244943563  
    OP
       1 天前
    @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  
       1 天前
    实用!
    nzbin
        13
    nzbin  
       1 天前
    暂时用不到,但也希望支持 Angular
    beginor
        14
    beginor  
       17 小时 47 分钟前 via Android
    @1244943563 已经入坑 md-editor-v3 了,封装成 Web component ,在任意前端框架中使用。

    暂时不折腾了,不过还是希望能够支持 angular
    pursuer
        15
    pursuer  
       4 小时 3 分钟前
    这么一看 preact 更小众了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5423 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 09:05 PVG 17:05 LAX 01:05 JFK 04:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86