对于大部分开发者来说,版本兼容是一件存在感很低的事情,因为它在绝大部分情况下都是一行配置,在一些前端工具链(例如 Babel、CoreJS,Autoprefixer 等工具)的帮助下适配到目标浏览器,只会在一些大的 break change 事件(例如 Vue3 必须在支持 Proxy 的现代浏览器下才能运行)下才会关注这件不起眼的事情。
但当你稍微研究一下的时候,才会发现这块儿内容知识非常杂,因为版本兼容的相关知识没有那么多内在逻辑性,很多细碎的知识点散落在在各个商业公司的博弈和版本变更中。前段时间因工作需要对部分语言/浏览器特性重点关注了一下,以此文做一下记录。
本文主要记录了移动端的版本适配问题,未对桌面端做更多的研究,后面有可能补充相关内容。
1.iOS & Safari
iOS 和 Android 虽然都是一年更新一个大版本,但受益于生态的封闭性,iOS 的更新率极高,基本上最近的两个版本就能覆盖 95% 以上的人群。
例如 Apple 官方统计[1],截止到 2022-05-31,Apple 四年内推出的新机型中,iOS 15
已经有 89% 的装机率,iOS 14
也有 10% 的装机率;而在所有历史机型里,iOS 15
和 iOS 14
加起来也有 96% 的装机率,隔壁 Android 都羡慕哭了:
为什么如此关注 iOS 的版本号?因为 iOS 版本基本上和 Safari 版本一一对应的,例如 iOS 15.6
上安装着 Safari 15.6
,iOS 14.5
上安装着 Safari 14.1
,具体的映射关系可见 MDN 的映射表[2],或者可以看 core-js: SafariToIOS[3],所以我们基本上只要比对 iOS 版本号即可。
另外一个问题是,有一定 C 端开发经验的开发者可能还会关注 iOS 上运行的是 UIWebView 还是 WKWebView,在 2022 年这个时间点其实已经不需要关注了,因为 Apple Store 已经发过公告[4],2020 12 月之后已经禁止含 UIWebView 的 APP 上架了,所以 iOS 平台只有 WKWebView 这一个 WebView 了,而且它兼容性也不错[5],最低支持到 iOS 8
。
2.Android & Chrome
说完 iOS 我们再谈谈 Android。因为两个操作系统的发展策略不同&