17

在我看来,在为动态数据可视化编写代码时,我最终会在不同的语言/平台上一遍又一遍地做同样的事情。现在,如果我有一个跨平台语言(我有)和类似 SVG 的二进制版本,我可以让我的代码以它为目标,并为我目前需要使用它的任何平台使用/创建解释器。

我不想要 SVG 的原因是因为纯文本部分对于我的目的来说太慢了。我当然可以创建自己的中间格式,但是如果已经有一些东西可以通过各种东西实现,那么我的工作就更少了!

4

3 回答 3

5

根据您所说的“太慢”的含义,答案会有所不同:

文件过大

正式地,SVG 最接近二进制格式的是 SVGZ,它是带有.svgz扩展名的 gzip 压缩 SVG 文件。所有符合标准的 SVG 查看器都应该能够打开它。在 *nix 系统上制作一个很简单:

gzip yourfile.svg && mv yourfile.svg.gz yourfile.svgz

您也可以尝试Brotli 压缩,它往往会以更多压缩时间为代价来获得更小的文件大小。

包括其他资产是低效的

SVG 只能通过base64 编码捆绑位图和其他二进制数据,这具有相当大的开销。

PDF 可以包含原始二进制数据的“流”,并且在以编程方式生成时效率惊人。

解析文本数据耗时过长

这很棘手。PDF 及其兄弟Encapsulated PostScript也是旧的、受良好支持的矢量图形格式。不幸的是,它们的核心也是文本,具有可选的压缩。

你可以试试Computer Graphics Metafiles,它可以提前编译。但我不确定它们在消费类设备上的支持程度如何。

于 2017-07-07T21:09:57.173 回答
3

来自评论:

除了通过网络发送它的传输成本之外,SVG 的性能几乎没有什么取决于它是纯文本的

不,那是完全错误的。我在 CSIRO 工作,使用 XML 制作大型 3D 模型。GeoScience Australia 对解析速度进行了正式研究——与读取 4 或 8 字节二进制表示相比,从文本中解析浮点数对于大数据集而言相对昂贵。

我花了很多时间优化 Touchgram 的内部二进制格式,现在正在研究矢量图。

您可以使用的技术之一是结合

  1. 变长整数编​​码和
  2. 将您的点标准化为整数表示的比例,然后将路径存储为增量序列

这可能会产生每步通常只使用 1 或 2 个字节的路径,而不是典型的 12 个字节。

考虑一条基本线 <polyline class="Connect" points="100,200 100,100" />

我可以用 4 个字节而不是 53 个字节来表示。

到目前为止,我能在二进制 SVG 中找到的只是这篇关于链接到项目描述repo的 Go 项目的帖子

于 2021-08-13T04:53:48.533 回答
2

Adobe Flash SWF 文件可能有效。由于它以前无处不在,“播放器”和库是为许多平台编写的。规范是开放的,并且获得许可。对于简单的 2D 图形,更早的、更兼容的版本就可以了。

这些文件是二进制的并且非常小。

于 2020-04-16T08:40:29.900 回答