【外评】SVG:好的、不好的、糟糕的
内容提要
SVG是一种可伸缩的矢量图形格式,本文讨论了SVG的优点和缺点,并提出了改进的建议。SVG功能强大且广泛支持,但其标准臃肿且复杂。它不够用户友好且缺乏明确的目的。作者建议开发一种更简单的面向机器的矢量图形格式和一种面向人类的用户友好格式,如TikZ。文章最后提到了作者计划创建一种面向机器的矢量图形格式和一种面向人类的图形库。
延伸解读
SVG 的定位困境:机器与人类之间的摇摆
文章指出 SVG 的核心问题在于目标受众不明确:它既想成为机器可处理的交换格式,又想成为人类可手写的语言,结果两方面都不理想。作为机器格式,它过于臃肿,解析和生成复杂;作为人类格式,它语法冗长,缺乏 TikZ 那样便于直接创建复杂图形的功能。这种定位模糊导致 SVG 在两种场景下都表现不佳。
实现与兼容性的现实挑战
SVG 规范长达 826 页,还涉及 XLink、CSS 和 JavaScript 等交叉标准,完整实现极为困难。大量规范只被部分实现,用户难以确定哪些功能可获得普遍支持。此外,SVG 文件可包含 <script> 标签,这增加了安全与复杂性考量。这些因素共同导致开发者和用户面临较高的使用门槛。
改进方向:分离机器与人类格式
作者建议开发一种简单的、面向机器的矢量图形交换格式,减少功能,可能基于 JSON 而非 XML,以便在几天甚至几小时内实现基本渲染器。同时,面向人类的格式可借鉴 TikZ 等语言,专注于易用性。两者分离后,可分别优化,并通过编译器实现兼容。作者计划创建超薄机器格式和 Haskell 图形库来实践这一理念。
Q&A
SVG的主要优点是什么?
SVG是一种可缩放的矢量图形格式,支持多种程序,作为网络标准,基于XML的可扩展性和强大的功能。
SVG存在哪些缺点?
SVG标准臃肿且复杂,用户体验不友好,难以实现和解析。
作者对SVG的改进建议是什么?
建议开发一种简单的矢量图形交换格式,减少功能,基于JSON而非XML。
SVG在机器和人类语言设计上存在哪些问题?
SVG不明确是为机器还是为人类设计,导致在两者之间表现不佳。
作者计划创建什么样的新格式?
作者计划创建一种以机器为中心的超薄矢量图形格式和一种以人类为中心的图形库。
SVG的复杂性对用户有什么影响?
SVG的复杂性使得用户难以理解和使用,手写和解析都很累。