有多大比例的前端工程师,能在合理的时间内独立开发出一个足以供商业网站使用的文本编辑器?

Posted wangbuhui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有多大比例的前端工程师,能在合理的时间内独立开发出一个足以供商业网站使用的文本编辑器?相关的知识,希望对你有一定的参考价值。


刚好最近在做涉及富文本编辑的项目,我的答案是没有。理由简单说一句话就够了:独立开发、“合理”时间和商业级质量,三个条件最多满足两个

这个话题下的不少答主虽然造过编辑器的轮子,但多半只满足独立开发的条件。至于达到独立开发与商业级质量两个条件的开源编辑器项目,目前接触到的例子主要也只有这几个(别拿某个内部系统说事,这里说的使用都是对外产品上的使用)。按照开源时间排序:

  1. Quill 编辑器,不太了解但使用很广泛,至少见到过鹅厂在用。
  2. ProseMirror 编辑器,有 Atlassian 和卫报等公司在用。
  3. Slate 编辑器,有 Gitbook 等公司在用。

后两者答主都合了若干 PR 进去,应该还算比较熟悉吧。这里要注意的是,其它答案下提到的 TinyMCE、Draft.js、UEditor 等轮子,都是团队的作品,甚至像 TinyMCE 这样已经构成了一家公司的核心业务,已经不能用来衡量单人的开发能力了。那么,单人开发一个富文本编辑器到“稳定”质量,需要多长时间呢?几天?几周?几个月?

Quill 从 2012 年收到第一个 Issue 到 2016 年发布 1.0 版本,已经过去了四年;ProseMirror 作者在 2015 年正式开源前筹款维护时已经开发了半年,而到前两个月发布 1.0 版本时,已经过去了接近三年。至于 Slate 虽然理念先进(它能让你用 React 编写编辑器中的表格等组件且支持嵌套,这个 Draft.js 做不到),但开源至今接近两年,仍然有一堆边边角角的 bug 会让你用起来莫名其妙,实时协作的支持也还只是停留在纸面上(别相信开源项目里 Leave it to you to decide 的说法,这意思就是这个地方坑太大,你急你来填)。总之,上面这几个单人主导的编辑器项目要达到稳定质量,时间是以年为单位来计算的。考虑到目前互联网“下周上线”的节奏,动辄几年的时间算“合理”吗?

如果他们的项目都没有办法在“合理”的时间内完成,那么是富文本的坑太大,还是这两位作者太菜了呢?ProseMirror 的作者 Marijn 是 CodeMirror 编辑器和 acorn 解释器的作者,前者已经在 Chrome 和 Firefox 自带的调试工具里使用了,后者则是 babel 的依赖。而 Slate 的作者 Ian 则是 Metalsmith 生成器、Myth 预处理器、Superstruct 类型校验等数千 star 项目的作者(这里顺便给答主的 Bumpover 打个广告,一个基于 Superstruct 的数据迁移工具)。当然了,他们跟各位知乎大牛肯定还是没得比,毕竟人家都没开过 C++ 的 Live 嘛。不过以答主的粗鄙见闻,在前端富文本编辑的这个细分领域里,已经很难找到比他们更靠谱的人了。

所以这里面到底有什么坑呢?其它答案里对于多语言、RTL、排版等从 Word 出发的概念已经有有很完善的介绍了,对于一个在浏览器里从头打造的富文本编辑器,我能想到这么一些除了 contenteditable 兼容性之外,还必须填的坑:

  • 必须有自己的一套文档模型和 Schema 校验规则。ProseMirror 自己造了个 Immutable 轮子,而 Slate 更是直接拿了 Immutable.js 当依赖。而粘贴、拖拽等事件会以完全不可控的方式魔改掉编辑内容,这时候需要类似 DTD 的 Schema 规则去做校验和相应的 normalize 去过滤标签,比如 inline 里不能套 block,table 里必须是 tr 套 td 之类。
  • 必须维护自己的一套撤销栈。听起来好像就是 push 和 pop 一下的事情,不过考虑到输入事件的去重和协同编辑支持,这会涉及对文档 rebase 操作合并的问题。
  • 必须维护自己的一套 Selection 和 Range 模型。这个靠扁平下标去索引树形结构的 API 十分反直觉,也是各种诡异 bug 的高发地带。
  • 必须有自己的一套视图层。ProseMirror 定义了一个比较难用的 View class,而 Slate 直接拿了 React 当视图层:听起来不错,但是很容易破坏掉 React 的 reconciliation,让整个编辑器崩溃掉(知乎用的 Draft.js 也有这个问题,我有稳定的复现步骤)。
  • 必须提供一套可拓展的文档变换 API 和插件机制。简单地把编辑器当做纯粹的应用来开发在架构上是行不通的,需要一个提供上述能力的基础库再加上根据业务需求去定制的 UI 组件层。

这些坑每一个单独拿出来都能算一个独立的轮子。比如 Superstruct 就是从 Slate 衍生出来的数据校验库,不到一个月就收获了近 3k star。可以说,有能力维护某个独立编辑器模块的前端开发者,都已经凤毛麟角了

回到问题,题主问的是多大比例,那么我们可以做个合理的估算:去掉对开发时间的限制,这个级别的开发者在整个社区也只有个位数,考虑上写 Medium 这样闭源编辑器的作者,按百级来估算应当足够了。而使用 javascript 的开发者总量,是百万级

所以这是最后的结论:满足时间、质量和人数限制的没有,去掉时间限制,也是万分之一以内的水平。(已经准备退坑保平安了,想跳坑的请多保重啊 XD

 

 作者:doodlewind

链接:https://www.zhihu.com/question/26739121/answer/291059836
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

以上是关于有多大比例的前端工程师,能在合理的时间内独立开发出一个足以供商业网站使用的文本编辑器?的主要内容,如果未能解决你的问题,请参考以下文章

我需要将邮政编码存储在数据库中。柱子应该有多大?

HTML5技术分享:前端自动化工具推荐

第三章 软件工程师的成长随笔

ios14怎么看视频有多大

前端开发程序员的月薪到底有多高?

考DBA难度有多大呢? SQLSEREVER 和ORACLE的!!