首先附一张语雀搜索结果
这也是语雀给我的第一印象,一开始使用体验还不错,但是当我的文档字数破了1w,并且标注复杂之后似乎就变得特别卡顿,我就寻思着阿里也不行啊,一个笔记软件都优化不好😡😡,于是乎开始了对语雀的人肉搜索,为啥慢?发现似乎事情没有那么简单,好像Markdown的笔记软件都会出现这种情况(Typroa、印象笔记,个人体验比较少,主要是看到别人在网上的反馈),于是乎我开始了对语雀的性能测试
首先注明一下电脑配置:
ThinkPad x13
CPU:AMD R7 5850u
内存:16G
😂😂虽然说有些差劲,但是还是很有参考价值的,毕竟我相信不是所有语雀的用户都用高性能的电脑
我拿掘金和语雀做对比实验,虽然说在业务模式上不同,但是通过对比我们可以发现原因
首先我想到的是语雀文档页面中的DOM数量太多了
于是我console.log了一下我浏览过其中一个差不多1.4w字的文档的dom数量,差不多是1.4w左右
也打印了掘金上2w字的文章页面的dom数量,只有2000个左右
查看页面内存占用也是飙升到了160MB左右
当然不是说语雀渲染出来多少字就有多少个dom,检查元素会发现语雀渲染出来的dom结构相对于掘金文章会十分复杂,这导致了要渲染字数差不多的内容,语雀就要渲染更多的DOM节点,就要付出更高的性能损耗
这是语雀的
这是掘金的
为什么语雀的DOM节点会如此复杂呢? 我想有以下几点
- 业务逻辑要求: 相对于掘金这种单一的,分享式的文档,掘金使用的MarkDown渲染器会渲染出尽量简单的HTML结构,而语雀要实现的功能和业务更加复杂些,诸如搜索字段、标注等等,都需要依托更为结构性的、更为复杂的HTML标签,这就导致了DOM数量的增加
- 用户使用习惯: 相信大家和我一样,在工作中的文档都要写的事无巨细(主动或者被动),这让我们在使用语雀或者Typora等有一定协作性质的文档的时候我们都会写特别多的,斜体 等这种标注,都 会使得MarkDown渲染器渲染出更为复杂的DOM结构,增加DOM节点的数量
我们应该如何解决这个问题呢
我看到一个掘友的解决办法是将文字写到代码块里,这本质上也是在降低模板结构的复杂性从而减少单一页面的DOM数(Typora也是使用Electron编写的,和语雀客户端一样)
教你一招,解决Typora字多卡顿的问题Typora字多后真把我卡破防了,偶然中发现一个 bug解决了字多卡的问题?字数 - 掘金 (juejin.cn)
当然这是很不方便的
以下是我的解决方案
- 尽量控制单一文档的字数在1w字以下,对1w字以上的文档进行拆分: 这样可以保证单一页面的DOM数没有超出电脑性能可以承载的范围,我的电脑上限是1w字左右,具体要看电脑性能。
- 努力挣钱买性能更好的电脑: md我就想为啥这语雀用起来这么卡,一想听说阿里内部都是配MBP性能是我目前电脑的几倍,卡是因为很大一部分原因是因为我电脑的性能不太够,一个ThinkPad x13低压cpu轻薄本AMD R7 16G内存,拿同学的i5 12500H的笔记本试了一下会流畅特别多,只有偶尔卡一下😥😥,等我国补买的macbook到货了我也再测一测,不过我电脑配置也不算太落后,这就是语雀团队的锅了,这些问题应该是可以通过优化解决的
- 催促语雀团队优化: 这似乎是在开玩笑,但是我觉得这有一定的意义(其实我觉得大部分人的电脑性能并没有那么好),而且也意淫出对应的解决方案(渲染前拆分超长的MarkDown文档,结合页面懒加载,控制真实的Dom数量),但是软件工程牵一发而动全身,感觉尤其是语雀这种功能相对来说比较多、开发周期长的软件,这种优化势必要改动很多地方,我也不能站着说话不腰疼。
Bye~ 这里是JustHappy,我们下次再聊,如果觉得内容有不足,请在评论区留言