项目开发流程之技术调用流程

概述

实际项目中,业务涉及到一些复杂的业务场景,往往会借助三方的开源工具或者使用商业成熟的解决方案,这个功能实现过程就涉及到了技术调研,然后写调用报告文档,正规的开发流程,其实这一环也是必不可少的,也会计算到个人的工时之中,当然如果公司没有形成规范,估计这一环都直接略过了,以下我用真实案例来给大家介绍下这个流程。

需求

某些业务场景,我们需要执行某个表达式后,然后再执行后面的逻辑,比如某个条件成立,需要改数据、发通知等等(比如:流程引擎),而这个表达式需要我们在线编写,根据计算操作符+字段这些组合而成,而字段是动态的,因此我们就需要用到富文本编辑器,并且能够定义扩展。

具体调研报告示例

规则编辑器调研

1.背景

开发应用的时候,通过设计器,仅仅搭建静态的界面和数据存储远远不能满足实际业务要求。应用需要能够响应用户的操作、根据特定条件动态变化、自动执行计算 、并确保数据的准确性和业务流程的顺畅。另一方面,这些动态行为和业务判断通常需要编写大量的代码来实现。面向业务人员,为简化这一过程,让不具备编程背景的用户也能定义和管理应用的动态行为。规则及逻辑处理 功能正是为了满足这些场景,前端需要提供规则表达式富文本编辑器, 以支撑应用的使用。

2.富文本编辑器的地位

可以说富文本编辑器让 Web 数据录入充满了无限的想象空间,如果只有文本框下拉框 这些纯文本的数据录入组件,那么Web的数据录入能力将极大地受限。我们将无法在网页上插入图片视频 这些富文本内容,更无法插入自定义的内容。

富文本编辑器让 Web 内容编辑变得更轻松、更高效,我们几乎可以在富文本编辑器中插入任何你想插入的内容,图片视频超链接公式代码块 ,都不在话下,甚至还可以插入表格PPT思维导图 ,甚至3D模型这种超复杂的自定义内容。

富文本编辑器的场景在 Web 上也是随处可见,写文章 写评论 意见反馈 录需求单,都需要使用到富文本。

3.规则表达式编辑器核心能力分析

规则表达式编辑器的应具备如下核心能力:

  • 基础能力:富文本基础能力,如文本插入、图片、视频等等资源
  • 自定义节点支持:在基本上所有富文本都提供的文本、图片、视频、表格等能力之外,要能够进行富文本内容节点的扩展
  • 交互的组件:对于自定义的富文本内容,要能够有交互,比如,我自定义了一个select组件丢到富文本里面,我是能够进行交互操作的
  • 结构化数据输出:需要将编辑内容转换为可解析的AST(抽象语法树)或JSON,而不仅仅是HTML/Markdown
  • 扩展性要求: 支持开发者自定义插件(或者类似插件机制),方便开发者更加容易扩展需求

4.调研范围

富文本名称 最新版本 github地址 文档地址
Quill 2.0.3 github.com/slab/quill quilljs.com/docs/why-qu...
WangEditor 5.1.23 github.com/wangeditor-... www.wangeditor.com/
Tiptap 2.24.1 github.com/ueberdosis/... tiptap.dev/

5. 富文本编辑器关键指标

指标 说明
功能完整性 是否支持表格、代码块、图片上传等
扩展性 是否支持自定义插件或模块化开发
性能 包体积、渲染速度、大文档优化
维护性 社区活跃度、文档质量、迁移成本、长期维护可能性
国际化 多语言支持
主题 是否提供主题或者能够方便定制
兼容性 基于主流浏览器兼容性排查

6.分项对比维度

6.1 GitHub Star 数量 & 社区活跃度

编辑器 GitHub Stars 最近更新时间 Issues/PRs 活跃度 维护团队/公司
Quill ~45.6k 8月前 较高(499k+ issues) 开源社区
WangEditor ~18k 3年前 断更(wangEditor-next团队续接) 国内个人
Tiptap ~31.2k 近期更新 活跃(官方维护) Tiptap 团队

分析

  • Tiptap社区活跃,且持续迭代,适合长期项目
  • Quill 优秀的start数表现突出,证明在其使用上得到了很多开发者的认可
  • WangEditor 在国内生态中表现突出,文档和反馈更贴近中文用户,国产之光,但是最近几年没有更新过了(可能作者个人原因),现在已由wangEditor-next团队fork原仓库在原基础上继续维护

6.2. 开源协议 & 商用限制&文档

编辑器 开源协议 商用限制 付费功能 中文文档
Quill BSD-3 英文
WangEditor MIT 优秀
Tiptap MIT 有付费版本 英文

分析

  • WangEditorTiptap 的 MIT 协议更宽松,Quill的BSD协议也能用(基本都能"为所欲为")
  • 总的来说WangEditor 的文档对于国内开发者来阅读起来很轻松,简单易懂

6.3. 包体积

编辑器 压缩后体积 (min+gzip) 加载速度 模块化支持
Quill ~120KB ⭐️⭐️⭐️⭐️⭐️
WangEditor ~260KB 中等 ⭐️⭐️⭐️⭐️
Tiptap ~100KB ⭐️⭐️⭐️⭐️⭐️

分析

  • QuillWangEditor 核心功能内置到了编辑器中,能够开箱即用
  • Tiptap 基于 ProseMirror,核心轻量,核心扩展通过包的形式下载后引用注册使用,但扩展性强

6.4 . 功能 & 扩展性

编辑器 核心功能 插件生态 自定义难度
Quill 基础 中等 中等 ⭐️⭐️⭐️⭐️
WangEditor 常用 有限 ⭐️⭐️⭐️⭐️
Tiptap 模块化 丰富 中等 ⭐️⭐️⭐️⭐️

分析

  • WangEditor 开箱即用,好上手
  • TiptapQuill适合深度定制,但需额外开发(不局限使用者,更加高可定制化开发)

6.5 . 框架支持&typescript支持

编辑器 Vue/React 支持 typescript支持
Quill ⭐️⭐️⭐️
wangEditor ⭐️⭐️⭐️⭐️⭐️
Tiptap ⭐️⭐️⭐️⭐️⭐️

分析

  • TiptapTiptap对现代主流框架支持最好,都提供了对应框架的封装组件可以直接使用
  • Quill并没有提供相关框架组件的封装,需要自行处理

6.6. 浏览器情况

编辑器 Chrome Firefox Safari Edge IE11及以下 核心兼容策略
Quill 基于标准 API,IE11 需 Polyfill
WangEditor 官方明确放弃 IE11 支持
Tiptap 基于 ProseMirror,需 ES2015+

基本上主流浏览器都是没问题的,对于退出市场的IE,基本上都不支持。

6.7. 国际化(i18n)支持

编辑器 内置语言包 多语言切换
Quill 手动配置
WangEditor ✅ 中文/英文 需手动切换
Tiptap ❌自定义

关键结论

  • WangEditor 仅适合中文场景,Quil 需完全自主实现(如自定义菜单映射或者修改dom方式)

6.8. 主题

编辑器 官方主题数量 CSS 变量支持
Quill 2种
CKEditor 5 5+ 种
WangEditor 2 种
Tiptap ❌无头编辑器,控制权在用户手里

关键结论

  • CKEditor 5 提供最完整的主题系统,支持动态切换。
  • WangEditor 主和Quill 仅内置主题,其他主题类型需要自己定义
  • Tiptap 高度灵活自主定义

6.9、性能指标

以加载一个相同富文本字符串1M的文本测试为例,如下为加载到最后渲染页面显示出来的时长对比:

ps:测试电脑配置(内存:24G,cpu:i5-8265u)

以下为自己开发电脑测试的指标,不同配置电脑,会有差距

编辑器 渲染1M数据时长 指标具体值 表现
Quill 普通富文本100KB:8squill专属Delta 格式1M:1分钟左右 ⭐️⭐️⭐️
WangEditor 100KB左右: 耗时10S200KB: 耗时40S1M: 10分钟没渲染出来 ⭐️
Tiptap 1M: 200ms50M: 2分钟极限预测能到几百MB ⭐️⭐️⭐️⭐️⭐️

关键结论

从渲染大量数据性能表现来看,tiptap表现最佳,面对大量数据,依然能够很快相应,quill性能稍逊色一抽,wangEditor表现最差,1M数据直接崩溃。。。

6.10 功能及其扩展能力

站在需求角度来说,其实普通富文本的功能都有,主要看的是自定义的扩展能力,规则编辑器最重要的就是能够扩展内容元素到编辑器中。

6.10.1 基础能力

编辑器默认只有基本的标题、列表、文字、图片、表格等元素,如果你想让编辑器渲染一个新元素,如附件、音频、视频,你就需要根据本节内容来定义。

  • 加粗
  • 段落
  • 列表
  • 图片
  • 字体
  • 字号
  • ......

以下都以扩展一个自定义元素节点为例

示例:在文本中插入自定义的一段dom元素,包含文本,列表,element-plus组件等

6.10.2 扩展能力

Quill自定义扩展

扩展配置概念:

扩展流程:

WangEditor自定义扩展

官网扩展方式文档示例:tiptap.dev/docs/editor...

编辑器的输入和输出通常都是 HTML ,但其内部却有复杂的渲染机制,主要过程是:model -> 生成 vdom -> 渲染 DOM,如下图。

扩展配置概念:

扩展流程(摘自官网):

Tiptap自定义扩展

tiptap内置渲染vue组件的能力,通过vue对应扩展插件可以更加方便实现扩展

官网扩展方式示例:tiptap.dev/docs/editor...

扩展配置概念:

扩展流程:

关键结论

从上面实现同样的扩展到页面上的操作来说,wangEditor的操作更加繁琐,编写自定义的插件相比来说,更加复杂麻烦一些,并且插入的自定义元素,使用起来也有bug(自测),问题估计只有看源码才能定位,官网的只有比较笼统的介绍,估计有坑。。。,

扩展定义上手难度:WangEditor>Quill>TipTap

6.11 支持数据格式

特性 WangEditor Quill TipTap
默认数据格式 HTML字符串 Delta对象 JSON (ProseMirror文档结构)
HTML支持 ✅原生支持,直接输出HTML ✅需要转换,有HTML解析器
JSON支持 ❌需要额外处理 ❌需要转换
Markdown支持 ❌需要插件 ❌需要插件
Delta格式 ✅原生支持
6.11.1 WangEditor数据格式特点

核心特点

  • 基于HTML字符串
  • 简单直接,适合传统Web开发
  • 数据体积相对较大

示例数据

json 复制代码
    <p>这是一段<strong>加粗</strong>文本</p>
    <ul>
      <li>列表项1</li>
      <li>列表项2</li>
    </ul>

优缺点

  • ✅ 优点:简单直观,与后端存储兼容性好
  • ❌ 缺点:难以精确追踪变化,处理复杂内容时可能产生冗余HTML
6.11.2 Quill数据格式特点

核心特点

  • 基于Delta操作序列
  • 数据体积较小

示例数据

json 复制代码
{
      "ops": [
        { "insert": "这是一段" },
        { "insert": "加粗", "attributes": { "bold": true } },
        { "insert": "文本\n" },
        { "insert": "列表项1\n", "attributes": { "list": "bullet" } },
        { "insert": "列表项2\n", "attributes": { "list": "bullet" } }
      ]
    }

优缺点

  • ✅ 优点:精确记录所有操作, 数据体积较小
  • ❌ 缺点:需要转换才能得到HTML
6.11.3 TipTap数据格式特点

核心特点

  • 基于ProseMirror的JSON文档结构
  • 结构化程度高,扩展性强
  • 数据体积中等

示例数据

json 复制代码
  {
      "type": "doc",
      "content": [
        {
          "type": "paragraph",
          "content": [
            { "type": "text", "text": "这是一段" },
            { "type": "text", "text": "加粗", "marks": [{ "type": "bold" }] },
            { "type": "text", "text": "文本" }
          ]
        },
        {
          "type": "bulletList",
          "content": [
            { "type": "listItem", "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "列表项1" }] }] },
            { "type": "listItem", "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "列表项2" }] }] }
          ]
        }
      ]
    }

优缺点

  • ✅ 优点:结构清晰,扩展性强,支持复杂文档结构
  • ❌ 缺点:数据结构复杂,需要学习ProseMirror模型

关键结论

数据格式来说,TipTap支持的数据格式比较多,对于需要结构化的数据处理来说,操作起来更加遍历,Quill的Delta对象也不错,默认的数据结构,wangeditor仅支持html字符串,如果要转化数据结构需要自行处理,比较麻烦

7.总结

通过对比上述五款常见的富文本编辑器,其实各有各的适用场景和优缺点吧,核心其实都提供了扩展插件 口子,运行开发者基于对应的规范定制化开发,对于要做的规则表达式来说,数据量并不会很大,上面对比的三款开源插件,都能胜任,不存在超大数据量的性能问题,但是便于后续基于扩展后的编辑器内容做二次转化,显然WangEditor 能力还是不够,quiltiptap都提供了对应序列化数据能力,结构化程度高,扩展性更强,便于后期数据处理。

故:最终采用的候选编辑器插件Quilltiptap

相关推荐
Jerry Lau14 分钟前
go go go 出发咯 - go web开发入门系列(二) Gin 框架实战指南
前端·golang·gin
我命由我1234543 分钟前
前端开发问题:SyntaxError: “undefined“ is not valid JSON
开发语言·前端·javascript·vue.js·json·ecmascript·js
0wioiw043 分钟前
Flutter基础(前端教程③-跳转)
前端·flutter
Jokerator1 小时前
深入解析JavaScript获取元素宽度的多种方式
javascript·css
落笔画忧愁e1 小时前
扣子Coze纯前端部署多Agents
前端
海天胜景1 小时前
vue3 当前页面方法暴露
前端·javascript·vue.js
GISer_Jing1 小时前
前端面试常考题目详解
前端·javascript
Boilermaker19922 小时前
【Java EE】SpringIoC
前端·数据库·spring
中微子2 小时前
JavaScript 防抖与节流:从原理到实践的完整指南
前端·javascript
天天向上10242 小时前
Vue 配置打包后可编辑的变量
前端·javascript·vue.js