javascript - SVG 文本元素速度

标签 javascript svg raphael

我正在构建一个严重依赖 svg 的网络应用程序。作为引用,我正在使用 raphael js 库来处理所有这些。

在这种特殊情况下,我实现了一些模仿滚动条并在屏幕上移动一堆 svg 功能(约 500 个元素)的东西。这些功能的一部分是 <text> (~100) 个元素。其他元素包括 <rect> , <image><path>元素。

因此,我注意到我的应用程序在我的笔记本电脑上并不是非常活泼,而且由于速度原因在 ipad 上处理起来非常烦人。但是,只要在滚动过程中删除或忽略文本元素,它就会立即达到不错的速度。

我尝试做一些速度测试(非常粗略的测试,使用 new Date().getTime() )并发现移动所有元素需要大约 10 毫秒,除了 <text>。元素,但是当 <text> 时需要 ~120 毫秒包括元素。

我相信会发生这种情况,因为每个字母都呈现为矢量形状,并且需要大量的处理能力来计算这种复杂结构究竟阻碍了什么。

是否可以只嵌入文本,使文本呈现为光栅图形,而不是形状?或者以任何其他方式提高渲染文本的性能?

我不需要背景透明度,也不使用任何花哨的字体。

最佳答案

您可以使用 Canvas 和 embed images into the SVG 预呈现文本.我不知道这与一般的文本元素渲染相比如何,但对于 our demos这非常有效(请参阅“层次结构”示例中的投影 - 它们首先呈现到 Canvas 中,然后从 SVG 中复制和引用)。

请注意,这些演示还大量使用了虚拟化,即如果您放大图像并且实际上只有一些元素在视口(viewport)内,则其他元素将从 SVG 中移除,这会带来巨大的加速。

演示不仅仅是移动元素,所以应该很容易获得相同甚至更好的性能。

虽然我不知道如何使用 raphael 执行此操作,但我相信您也应该能够使用 raphael 将 Canvas 图像中的数据 url 放入 SVG 中。

关于javascript - SVG 文本元素速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13477310/

相关文章:

javascript - CSRF 验证失败

javascript - 查找集合模型的 idAttribute

javascript - d3.js 中解析 x 属性时出现意外值无穷大

javascript - SVG中三 Angular 形的圆 Angular

raphael - 为 graphael 条形图添加标签?

javascript canvas - 检查是否加载了使用 toDataURL() 创建的图像

javascript - 如何在悬停时让弹出窗口保持事件状态[对于动态元素]

css - 无法在路径上消除 svg 文本的倾斜

javascript - 如何将整个 SVG 图像文件夹(或如何动态加载它们)导入 React Web App?

javascript - 使用 Raphael Js 停止拖放事件