我正在开发一个基于canvas的应用程序(linkurious.js),进行了性能分析后发现目前主要瓶颈是文本渲染。
目前,我使用fillText()
来渲染文本,但有以下疑问:
- 使用位图字体是否更高效?
- 距离场(Distance fields)是否更好?
- 浏览器是否已经优化了字体渲染,使得我不需要自己尝试去超越它们?
我正在开发一个基于canvas的应用程序(linkurious.js),进行了性能分析后发现目前主要瓶颈是文本渲染。
目前,我使用fillText()
来渲染文本,但有以下疑问:
首先,渲染文本尤其是基于矢量的文本是很困难的。即使使用基于WebGL的实现,你可能也无法打败浏览器,因为浏览器字体渲染已经被优化得相当好了(浏览器从1994年开始就一直在渲染字体)。
理论上,如果文本不变,浏览器/字体引擎应该重新创建和缓存所有已呈现字形到GPU内存中,然后只需从那里将它们作为位图传输出来。
所以,如果文本是性能瓶颈,则位图字体成为一种选择。缺点有很多,但速度不是其中之一。毕竟,这正是90年代的计算机如何在屏幕上呈现任何文本的方式。