pet*_*ter 18 performance svg visualization
假设一个相对现代的,支持SVG的桌面浏览器和一个由数百个类似的简单节点组成的SVG:
<circle>
,<line>
等)具有定义其自己的属性. <symbol>
元素和许多单独的<use>
实例,将它们放置并适当调整大小(W3规范). 我理解使用<symbols>
/ 的语义和代码维护原因<use>
,但我现在不关心那些,我正在严格尝试优化渲染,转换和DOM更新性能.我可以看到<symbol>
类似于在Flash中重用sprite,保存内存并且通常是一种很好的做法.但是,如果浏览器供应商一直在考虑这种方式,我会感到惊讶(这并不是该功能的真正意图).
编辑:我不希望在SVG的生命周期中更改或添加基本符号,只是实例位置,大小等
<symbol>
/ <use>
表现有明确的模式吗? <symbol>
vs <g>
与嵌套之间是否存在差异<svg>
?F L*_*has 11
Rohit Kalkur使用use
直接创建SVG符号形状来比较创建5000个SVG符号的渲染速度,请参见此处.事实证明,SVG
使用渲染形状的速度use
几乎要慢50%.他的理由是:
use元素从SVG文档中获取节点,并在非公开的DOM中复制它们
考虑到这一点,我认为使用SVG symbol
最多只需要手动创建symbols
s形状.
如果您更改 ag 或 svg 元素的内容,则 UI 可以查看绘制旧内容的区域以及将绘制更新的区域,并简单地重绘这两个区域,甚至如果它们相同(例如更改),则仅重绘一次形状的颜色。
如果更新符号的内容,则必须重新绘制所有实例。通过计算要重绘的旧部分和新部分的每个实例来做到这一点比较困难,因为这些区域可能会受到变换的影响,而重绘所有实例的所有部分则更简单。有些浏览器可能会执行前者,有些浏览器可能会执行后者。
无论哪种情况,UI 都必须至少跟踪符号中的更改并将这些更改传播到所有实例。这很可能会产生一些开销。
当然,如果您只是移动单个符号实例并且内容是静态的,则不需要跟踪并且性能可能相似。