SVG 优化和性能:人类(多边形、圆形等形状...)与应用程序(路径)

SVG optimization and performance: human (shapes like polygon, circle...) vs application (path)

有没有人经历过以下两者之间的性能差异:

什么在浏览器中渲染得更快?什么字节数更小?

我打赌这可能在很大程度上取决于实际图像,但我想知道是否有一些通用规则,以及我们是否可以作为一个社区提出一个模式。

这是对以下问题的跟进:Examples of polygons drawn by path vs polygon in SVG 作者:chris Frisina。

上下文:我正在努力通过使用数据 URI(在 DOM 节点和 HTTP 上保存)将简单的 JPEG 背景替换为 SVG(以节省字节)作为 CSS3 背景图像来减少绘制时间要求)。我无法决定是否应该使用 Human SVG 或 Application SVG,以及是否应该使用 Base64 编码(我读了很多现代浏览器可以将 UTF-8 用于 SVG 但我想知道这是否适用于 Human SVG 或仅适用于路径!).

假设 manually-created 和 application-generated svg 生成的 svg 图像完全相同,您将无法注意到 draw-time 中的差异。但是,即使保存到最优化的版本,程序生成的结果代码也可能大得多。这是值得关注的事情。如果您只需要一个三角形,就不要费心使用 inkscape 之类的东西。在这种情况下,手动创建总是更简单。

我回答这个问题是因为我在为一个更大的应用程序开发 semi-complex svg 应用程序时偶然发现了这个问题。我使用路径来创建大部分形状,但我想知道多边形是否会在性能上更好。我的形状是可拖动的,也可以有角 added/removed/dragged。他们中的许多人一前一后地移动。在我对这两个版本进行的少量测试中,我看不到加载、绘图等方面的差异。这似乎不适用于您的场景,但我将添加:因为我正在动态更新 d/points 属性,我必须测试从 x、y 坐标集连接字符串的两个代码示例。同样,无论是观察 运行 应用程序还是对代码本身进行基准测试,都没有明显的赢家。

因此,请使用您认为最好的那个。如果您不需要路径元素的某些特性(例如弯曲),多边形可能更符合上下文。

如果其他人有更多 in-depth 运行时性能测试,我很乐意看到它们。