Excalidraw跟canvas的功能对比

只讨论原生功能,不加脚本和插件

双链

Excalidraw

支持预览语法![[]]嵌入md渲染,支持更多类型的双链,组、区域、单个元素

canvas

只支持渲染大概的框,实际内容看不见(想要支持![[]]语法,需要额外插件)

自由度(复杂度)

Excalidraw

矩形、菱形、圆形、自定义图案、svg、手写、线段、文本框、图片嵌入、文档嵌入、字体修改、可以自由绘图

元素样式也可以有多种设置

canvas

canvas只有四个元素,文本框(可以是纯文本、双链),文本框的连接线(只能连接特定位置),图片嵌入,分组框

仅有个颜色设置,形状变化要依赖插件

实现效果

Excalidraw

canvas效果

文件层面

Excalidraw支持yaml,canvas不支持yaml

虽然两者都是存储为json数据,但是Excalidraw是.md格式,canvas是.canvas

排版

这是我感知最深的一个功能了

Excalidraw

基本的对齐,等距排列,元素图层等级调整

录屏_20260705_122613

canvas

无(图层等级可依赖一些插件实现)

总结:

canvas的效果,Excalidraw都能够实现,但Excalidraw的效果,canvas无法实现

canvas的四个元素,对应Excalidraw的,就是嵌入文档,箭头,图片元素,frame分组

有些效果,canvas可以依靠插件实现一些Excalidraw的效果,但Excalidraw的生态更完善,这只对比原生功能

两个插件的生态位和分工还是比较清晰的

  • canvas做轻量任务、快速整合罗列
  • excalidraw做进阶整理、综合的示意图绘制

各自也都有一些性能痛点没法解决:

  • canvas依赖electron,在大尺寸画布下视口卡顿比较明显
  • excalidraw依赖缓存,上千元素时画布切换到前台会有明显卡顿