hxh

SVG 2 的难题

hxh · 2016-12-21翻译 · 8745阅读 原文链接

我们所熟悉并热爱的 SVG 现在到 1.1 第二版了。SVG 2 处于 W3C 草案编辑阶段,这是从来没有过的巨大风险,它的章程在推广之前不能续用。

这是 Tavmjong Bah 中提到的部分原因:

> 令人震惊和意想不到的是,它没有从狭小的空间走出来。工作组中只剩下少数人积极参与,其中没有任何浏览器厂商代表。最后的两次“面对面”会议只有三名经常参加会议的人出席。一名来自佳能(W3C在年底降低会费加入的),另外两名是免费工作的邀请专家。

和 Tavmjong 一样,我最近与 Doug Schepers 谈论有关 SVG2 事情。他把大部分的主要新功能跟我过了一遍。 这是一个很好的页面,用来查看新功能的列表和它们的进展情况。 我的热情来自以下几点:

  • 它没有为外行Web开发者提供许多的杀手锏,因此身边人对它的兴趣逐渐降低并没有使我感到惊讶。

  • 从技术上来说,SVG 2 真正有用的几个特性已经足够了(例如 non-scaling-stroke)。

  • 我经常会误解一些东西。因此这是一个揭开 SVG2 神奇面纱的很好的机会,尽管我现在还不了解它。

SVG 2 有几个功能是非常有用的。其中一个是 z-index。现在为止,除了控制资源顺序之外,没有任何办法能够控制 SVG 元素的堆叠顺序。 SVG 2 支持 z-index 并即将能够运用,对于使用 SVG 是很有帮助的。但是现在没有浏览器支持这一特性,因为它被认为是有风险的。

三者共舞

通常我认为 web 中的新特性在以下三者之间旋转:

  • 开发者 特性的使用者。他们是需求的声音,是特性能否应用到实际中的衡量尺寸。

  • 浏览器 特性的执行者。他们是把关人,对于需求有自己的想法,属于商业机构。

  • 规范 特性如何工作的记录者。考虑到互操作性的实现,浏览器会向它们查询特性如何实现。他们是中间人,对需求也有自己的想法。

它们中的任何一个都具有影响力,能够推动特性的发展,即使是最终需要三者都同意。开发者对于需求的声音可以很响亮的,这样能够刺激浏览器为他们提供相应的需求,或者使规范的作者参与并定义它们如何工作。因为规范作者可能非常希望能够自己完善和发展语言及其 API。浏览器可能能够强烈地感觉到客户的需求(或者利用良好的商业敏感性),提前实现。

这其中有很多交叉的地方。浏览器厂商同时也可以是规范的作者。开发者遍布满地。

SVG 2 感觉更像是一个 spec-driven 的努力者。现在有相当多的开发者对 SVG 感兴趣,但也许并不是很多人了解它的缺点。我发现大多数的开发者只是尝试目前已有的东西。这新的热情或许是 SVG 规范的长期参与者参与到 SVG 2 中的动力。

作为 spec-driven 的努力者,激励其他各方采取行动是他们的责任。但至今进展的并不好。从开发者角度看,我认为 SVG 2 缺少杀手锏。从浏览器角度看,在 Bah 中表示:

> 只有两款主流浏览器实现了:Blink(chrome/Opera)和 Gecko(Firefox)。其中只有 Blink 有资源完全实现新功能,Gecko实现了 SVG 2 的大部分新功能。虽然 Chrome 在浏览器市场中占有很大的占有率(接近 75%)。但谷歌却习惯单方面的删除 Bllink 中它不喜欢的功能。 > > 另外两款重要的浏览器,WebKit(Safari)和 Edge,相比于领导者更像是追随者,而它们拥有相对较少的市场占有率(分别为 5% 和 4%)。例如,微软曾明确表示,SVG 2 成为规范推荐的候选之前,连看都不会看它。

由此可知:Blink 会做任何它想做的事情;Gecko 的速度比较慢;Edge 不会去接触;WebKit 则会等待。

这会变得有点糟糕。

四者共舞

对于 SVG 2,有第四个主要参与者:软件。

我估计,在 web 上使用的 SVG 绝大多数不是直接编写的,而是通过软件输出的。Inkscape, Adobe Illustrator, Sketch, Affinity Designer。。。有许多的软件能够输出 SVG。

一起看一下 SVG 2 的另一个特性,b或者B,路径语法的一部分。它允许你在随后的路径命令中改变轨迹角度,从而更有效的输出路径 。

这是非常好的,但为什么像 Adobe 这样的公司会插手 SVG 2 呢?如果它们实现 SVG 2,是冒着没有浏览器支持这些输出的 SVG 的风险,这没有用的功能无疑会是客户厌烦。它们肯定需要等待浏览器非常稳定的支持之后才将这功能添加到软件中。但这是一个恶性循环:浏览器为什么要实现没有人使用的功能呢?

因此,即使规范已经处于完成的状态,浏览器实现了它,我们仍然会在一些友善的软件中使用它。

凭直觉

由于了解的不多,我更加赞同浏览器厂商的意见。 Bah 报道称:

> 浏览器厂商一致认为,SVG 2 应该被制定完成,但它应仅限于修复 SVG 1.1 第二版本中的问题以及少数已经被多数浏览器实现的可选择的新功能(例如‘paint-order’)。其它的新功能(meshes,hatches等等)应该被移除。

移除新功能很艰难,但这可能是你必须抛弃的使其能够通过的一箱黄金。

相关文章