Incremark 现已支持 Solid ,至此完成了对 Vue 、React 、Svelte 、Solid 四大主流前端框架的全面覆盖。
市面上大多数 Markdown 渲染库都是针对特定框架开发的。React 生态有 react-markdown ,Vue 生态有各种 v-md 组件。这带来几个问题:
Incremark 采用不同的思路:核心逻辑与 UI 框架完全解耦。
@incremark/core 负责所有解析、转换、增量更新的工作,输出的是框架无关的数据结构。各框架包(@incremark/vue、@incremark/react、@incremark/svelte、@incremark/solid)只需要把这些数据渲染成对应框架的组件即可。
这意味着:
┌───────────────────────────────┐
│ @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
beginor 10 小时 5 分钟前 via Android
现在 Angular 都不算前段框架了么, 连 solid 和 svelte 都不如?
|
2
1244943563 OP @beginor svelte 确实很火,solid 我觉得不怎么样很小众,angular 我没想好要不要适配后面有人反馈再做吧
|
3
subframe75361 4 小时 57 分钟前
挺不错的,已 star
|
4
jsq2627 4 小时 31 分钟前
github 链接错了吧。是不是 AI 润色搞坏的 :doge:
|
5
1244943563 OP @jsq2627 我滴乖乖,是给我搞坏了,https://github.com/kingshuaishuai/incremark
|
6
1244943563 OP 感谢支持
|
7
1244943563 OP @jsq2627 感谢支持
|
8
TossPig 33 分钟前
我也要 Angular
|