【发布时间】:2012-11-20 16:11:12
【问题描述】:
我正在构建一个严重依赖 svg 的 Web 应用程序。作为参考,我正在使用 raphael js 库来处理所有这些。
在这种特殊情况下,我实现了一些模仿滚动条并在屏幕上移动一堆 svg 功能(约 500 个元素)的东西。这些功能的一部分是<text> (~100) 元素。其他元素包括<rect>、<image> 和<path> 元素。
所以,我注意到我的应用程序在我的笔记本电脑上并不是很活泼,而且由于速度的原因,在 ipad 上处理起来也很烦人。但是,只要在滚动过程中删除或忽略文本元素,它就会立即达到不错的速度。
我尝试做一些速度测试(非常粗略的测试,使用new Date().getTime()),发现移动除<text> 元素之外的所有元素大约需要10 毫秒,但是当<text> 元素需要大约120 毫秒包括在内。
我相信这是因为每个字母都呈现为矢量形状,并且需要大量的处理能力来计算如此复杂的结构究竟阻碍了什么。
是否可以只嵌入文本,使文本呈现为光栅图形,而不是形状?或者以任何其他方式提高呈现文本的性能?
我不需要背景透明度,也不使用任何花哨的字体。
【问题讨论】:
-
您是在使用
paper.print()还是paper.text()创建文本元素。小提琴可能也不错。 -
您是否针对特定的浏览器集?不同浏览器的性能差异很大。
-
@Bruno 我正在使用 paper.text(),它仍然很慢。
-
@gintas 我们有机会看看你的一些在不同 raphael 对象周围移动的代码
-
ISTR 认为 Raphaël 在文本方面的效率有点低,作为比较,这里有一个在纯 svg 中滚动的 1000 个文本元素的示例 - jsfiddle.net/arJZL
标签: javascript svg raphael