SVG 2 的困境

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 $200 免费积分!

我们今天所熟知和喜爱的 SVG 是“SVG 1.1 第二版”。 SVG 2 处于 W3C 的编辑草案状态,它有很大的风险永远无法通过这一阶段,因为它的章程可能在达到推荐状态之前无法续签。

Tavmjong Bah 关于原因的一部分

虽然令人震惊且出乎意料,但这并非空穴来风。 工作组的积极参与人数已降至少数几个人,没有一个人代表任何浏览器供应商。 事实上,最后两次“面对面”会议的参与者只有三名常驻成员,其中一人来自佳能(将在年底退出 W3C 会员资格),另外两人是受邀专家,他们正在无偿工作。

和 Tavmjong 一样,我最近也与 Doug Schepers 谈论了 SVG 2。 他向我介绍了大部分主要的新功能。 这是一个不错的页面,其中列出了这些功能以及它们的状态。 我对此的看法是

  • 对于普通网页开发者来说,并没有太多杀手级功能,因此我对人们普遍兴趣减退并不感到意外。
  • 一些实际上属于 SVG 2 的非常实用的功能已经获得了相当好的支持(例如 non-scaling-stroke)。
  • 我通常对事情持怀疑态度。 SVG 2 的功能有可能解锁我目前无法理解的惊人事物。

有一些功能相当明显地非常有用。 其中之一是:z-index。 目前,除了源代码顺序之外,没有其他方法可以控制 SVG 元素的堆叠顺序。 SVG 2 支持 z-index,它将直接生效,这将非常有用。 还没有浏览器支持它,它被认为“有风险”。

三方舞蹈

通常,我认为网络上的新功能是三方之间的舞蹈,分别是

  • 开发者。 他们使用这些功能。 他们是想要什么的声音。 他们是衡量什么真正被使用的标准。
  • 浏览器。 他们实现这些功能。 他们是守门人。 他们有自己对什么需要的想法。 他们是企业。
  • 规范。 它们记录了功能应该如何工作。 浏览器查看它们以了解如何实现功能,因为实现功能的互操作性存在激励机制。 他们是中间人。 他们也有自己对什么需要的想法。

他们中的任何一方都可以施加力量并推动功能发展,尽管最终每个人都必须同意。 开发者可以非常大声地表达他们的需求,这可能会激发浏览器想要为他们提供服务,或者规范作者介入并定义如何工作。 规范作者可能非常渴望完善和发展语言及其 API 并自行推动事物发展。 浏览器可能会强烈地认为他们的客户想要某样东西(或者提供某样东西对业务有利),并率先进行早期实现。

也存在大量的交叉。 浏览器供应商的人可以担任规范人员。 开发者遍布各地。

SVG 2 感觉主要是一项规范驱动的努力。 开发者现在对 SVG 非常感兴趣,但可能没有太多关于 SVG 缺陷的呼声。 我发现开发者大多只是在努力理解已经存在的东西。 但这种新发现的热情可能是推动长期参与 SVG 规范的人继续推进 SVG 2 的原因。

作为一项规范驱动的努力,它需要激发其他各方采取行动。 这部分目前进展不顺。 从开发者的角度来看,我认为这是缺乏杀手级功能。 从浏览器的角度来看,Bah 再次表示

只有两种重要的浏览器实现:Blink(Chrome/Opera)和 Gecko(Firefox)。 在这些浏览器中,只有 Blink 拥有快速完整实现新功能的资源,尽管 Gecko 已实现更多 SVG 2 功能。 Chrome 在浏览器市场份额中占据主导地位(几乎 75%)。 Google 有一个习惯,即单方面从 Blink 中删除它不喜欢的功能,基本上决定从规范中删除这些功能。

另外两个重要的浏览器实现,WebKit(Safari)和 Edge,更多的是跟随者,而不是领导者,并且其市场份额相对较小(分别为 5% 和 4%)。 例如,微软明确表示,在规范成为候选推荐规范之前,他们甚至不会考虑 SVG 2。

读:Blink 想做什么就做什么;Gecko 速度很慢;Edge 不会碰它;WebKit 会静观其变。

情况更糟。

三方 四方舞蹈

对于 SVG 2 来说,还有一个重要的第四方参与者:软件

据我估计,网络上使用的大多数 SVG 并非由开发者直接创作,而是由软件输出的。 Inkscape、Adobe Illustrator、Sketch、Affinity Designer…… 有许多软件可以导出 SVG。

让我们再举一个 SVG 2 功能,即 bB 命令,它是路径语法的一部分。 看起来它可以通过允许您更改后续路径命令的轨迹角度来实现更高效的路径输出。

这很好,但为什么像 Adobe 这样的公司会触碰它? 如果他们实现它,他们就有风险输出任何浏览器都不支持的 SVG,这毫无用处,而且肯定会激怒客户。 他们几乎肯定需要等到浏览器支持非常稳定之后才能着手处理类似的事情。 这就开始了恶性循环:为什么浏览器会实现还没有人准备好利用的东西?

因此,即使规范达到了某种完成状态,并且浏览器也采纳了它,我们仍然受制于软件也需要利用它。

直觉

在不知道更多信息的情况下,我倾向于同意浏览器供应商的观点。 Bah 报告

浏览器供应商的普遍共识是,SVG 2 应该完成,但应该限制为修复 SVG 1.1 第二版中的问题以及一些精心挑选的新功能(例如“paint-order”),这些功能已经由多个浏览器实现。 新功能(网格、阴影等)应该删除。

听起来删除新功能非常痛苦,但这可能是为了让它通过山口而不得不从货车上扔掉的宝藏。