是否应该处理浏览器之间的兼容性问题?

Should in-between browser compatibility issue be handled?

当我们谈论浏览器兼容性时,大多数时候我们将其定义为应用程序将支持的最低浏览器版本列表。例如:

IE9+、Firefox 25+、Chrome32+等

在测试兼容性时,我们通常会测试基线和最新版本。 如果我们想让它更广泛,我们可以使用诸如SauceLabs之类的工具来测试其间的所有版本。

我的问题不是我们是否可以测试兼容性,而是我们应该或我们应该如何考虑应该支持哪个版本的浏览器。

例如,我遇到了 aurelia-polyfills 的问题。

库无法在 Firefox 35 中加载 (function(o, s) { ... }(Object, Symbol))Symbol is not defined

此代码在 Firefox 29 和最新版本 (54) 中运行良好。不知道35前后有多少个版本会遇到这个问题

这个问题,IMO,更多地与 Firefox 有关,而不是与库有关,因为它应该将 Symbol 取消引用为 undefined 并让代码检查并正确处理它。类似于IE没有正确处理enum

等关键词的问题

现在的问题是,这应该被视为库的错误,还是库应该声明不支持此中间版本的 Firefox?

一方面,排除这个版本是有意义的,因为它是浏览器的 "wrong doing"。图书馆作者不能对浏览器造成的任何和所有问题进行殴打。尤其是如今,与过去相比,新版本的浏览器更加频繁。有些错误是必然会发生的。

另一方面,这正是 "browser compatibility" 的意义所在,应该加以处理。库作者不能因为客户使用它们而忽略它们。但在这种特殊情况下,它不会起作用,因为无论何时访问 Symbol 都会使系统崩溃。

还有一点就是当浏览器兼容性table更新时,会"shift"到那些有问题的版本。

这意味着要么将兼容性 table 从 "IE9+, Firefox 25+, ..." 更新为 "IE10+, Firefox 35+,..." 和 "WTF",要么强制使用更窄的 table,例如"IE10+, Firefox 52+,...".

我觉得要么硬着头皮继续支持"all-recent versions",要么在兼容性上留下一些漏洞table只支持"golden"版本

你会推荐什么?

顺便说一句,我对 Firefox 没有任何反对意见,只是以它为例。

我会选择所有浏览器的最新版本,但有一些例外:

  • 我有一个客户冻结了他们所有 PC 的 google chrome 版本。
  • 在另一种情况下,它们是固定在 linux 发行版稳定版本中的 firefox 版本。这些案件是单独处理的。
  • 我会为网站的所有用户提供浏览器兼容性问题的问题日志,以便在社区和您的测试和开发部门内讨论一个问题,如果这个问题足够重要以处理特定浏览器的特定版本。
  • 你还可以交流哪个这样的平台,你测试了哪些版本,你的最新版本。并捍卫你的 "latest version strategy".

自动更新浏览器(Chrome、FX、Safari、Edge)仅支持最新版本。 Corps 可以冻结旧版本,但支持旧版本是您既可以收费又可以反对的事情。如果客户需要 FX35 支持,那将是一个 非常 的单一请求 - 当您不知道他们会想要它时花时间测试它是不划算的.将这笔钱花在绝大多数客户首先需要的版本上。

另请注意,旧版本 高风险 - FX35 缺少 2.5 年的安全补丁,我什至不会让安装了它的机器访问我们的网络。

对于 IE,它要复杂得多。目前 'live' 有 IE8、IE9、IE10 和 IE11 - 都有自己的怪癖和不兼容性,都不再积极开发,而且几乎都死于非企业 space(非技术用户使用新 PC 必须竭尽全力获取 IE11 而不是 Edge,所以不会)。 IE11 是一个僵尸 - MS 已经停止开发它并且只修补安全问题(直到 2025 年),但它仍然在消耗各地 Web 开发人员的大脑。

一段时间以来,我认为 IE 中的最佳策略是完全支持 IE11,并通过非常有限的测试为 IE8、9 和 10 提供 cut-down/missing 功能。如果您在 IE8 中发现错误,请关闭该功能并建议升级 - IE8 用户无论如何都不期望流畅的动画和丰富的内容 UI。

这实际上归结为一个商业案例:支持大量旧版本会花钱,它会赚多少钱? 定义支持这些旧版本的预算,然后决定适合的测试和支持策略。

我将对支持一系列浏览器版本的替代观点添加一个声音。

即使使用 "autoupdate" 的浏览器,事实也是有一个采用时间。当然,你可以说大多数浏览器会在 N 天内切换到新版本,但在那之后还有一个尾巴。从专业的角度来看,那条尾巴很长。在所有用户离开特定浏览器之前需要 non-trivial 时间。

用户使用服务时有一个漏斗。有多少人最终访问了您的网站 -> 有多少人可以使用您的网站(由于旧浏览器)-> 有多少人点击了注册按钮 -> .... -> 其中有多少人用户购买你的产品(或其他)。

在任何时候移除该漏斗的 5% 都是有成本的。不仅在进行测试时,而且在决定支持哪些浏览器技术时,都应该考虑这一成本。

TL;DR:从支持尽可能多的客户的角度来看。只有当您在其他地方获得的收益超过缩小漏斗的成本时,才缩小您的漏斗。

例如,我们认为削减 < IE10 是值得的,这样我们就可以将我们的网站移动到 flexbox。这对使用该网站的 n% 的客户来说是值得的,因为我们的开发团队可以制作出更具可持续性的产品,让我们的所有其他用户从物质上受益。