寻找研究:PNG Sprite vs SVG sprite vs Icon fonts

Posted

技术标签:

【中文标题】寻找研究:PNG Sprite vs SVG sprite vs Icon fonts【英文标题】:Looking for a research: PNG Sprite vs SVG sprite vs Icon fonts 【发布时间】:2014-02-13 17:49:53 【问题描述】:

我们目前在生产中使用 PNG 来制作图标,但作为一名设计师,我正在努力推动使用 SVG 来获得以下好处: 一种。在 Retina 上渲染。 湾。放大的视障用户。 C。创建图标时更简单的工作流程。

有没有比较这三种方法的研究? (PNG Sprite vs SVG sprite vs Icon 字体)在性能方面?

如果不是,您会比较它们以及如何比较它们? (例如,我听说 SVG 需要更多的 CPU 能力,但我不知道如何测试它或有什么后果)。

非常感谢!你们是一个了不起的社区。​​p>

顺便说一句,这是我能找到的:svgs are cool, but icon fonts are just 10% of their file sizeSVG + Icon Fonts:Iconserving - SVG or Webfont?Ten reasons we switched from an icon font to SVG

【问题讨论】:

【参考方案1】:

不是答案,但在 cmets 中不可读

PNG 是光栅图像

因此,对于渲染,它们只需要解压缩,这需要 CPU 能力,但现在这还不错。

SVG 是矢量 XML 文件

这意味着您需要:

    读取XML文本 将其解码为一些支持矢量图形的引擎/类 渲染基于矢量图形的图像

复杂的 SVG(>300MB 矢量 utf-8)即使在快速机器上也有加载/解码/渲染时间(如果已解码所有内容)。如果您只解码基本功能,您可以在几秒钟内完成相同的操作,但会丢失高级功能。

许多人不会同意这一点:“问题是没有一个 100% 兼容且易于实现的 SVG 库……至少我知道”但请记住,我不使用 WEB 之类的框架或环境JAVA 或 php ...每个 SVG 库都有自己的怪癖。如果您比较不同 Web 或图像查看器之间呈现的 SVG,那么它是不一样的,并且许多功能并非在所有地方都受支持。

您可以编写自己的 SVG 解码器,但这有点复杂。如果您只想要path 之类的基本功能和没有动画或渐变的形状,那么它相对容易实现,但如果您想要实现所有功能,您将花费大量时间

有一段时间我很难找到好的免费 SVG 编辑器。我发现唯一一个“可用”的是 Inkspace,但它很慢,而且对我的口味有点用户不友好。另一方面,它可以打开我以正确方式使用的几乎所有类型的 SVG...

[备注]

如果您想为图标使用 SVG,我强烈建议您在应用启动时将它们渲染为光栅,然后仅使用内存中的位图等光栅图像以避免性能问题。

【讨论】:

补充...只是做了一些测试(没有完整的研究):我测试了 svg 和 png 中的 23 个图标。 svg 非常简单且经过优化。 svg 的总文件大小比 png (64x64px) 大 160%。 png 的渲染速度更快(尤其是在移动设备上)。 我没有任何可量化的数字,但这个性能问题很可能是过早的优化。用于图标的 SVG 将小而简单,并且应该具有可以忽略不计的性能特征。同样用于解码 PNG。上面关于在应用启动时渲染 SVG 和使用光栅图像的最终建议确实是不必要的。 我不确定我是否同意那个 mlissner。 SVG 导致我的 Web 应用程序严重滞后,我需要找到一种更快的方式来显示图标。

以上是关于寻找研究:PNG Sprite vs SVG sprite vs Icon fonts的主要内容,如果未能解决你的问题,请参考以下文章

vue 使用 svg 小图标

Vite中使用 svg-sprite-loader

svg-sprite:符号转换为单个 svg 图标

(转)Cocos2dx-JS 在 Sprite 上使用 Shader

[SVG] Combine Multiple SVGs into an SVG Sprite

react项目中使用svg-sprite-loader按需加载svg