iOS 15 把 AntV G2 搞挂了~ - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
50vip
V2EX    分享发现

iOS 15 把 AntV G2 搞挂了~

  •  1
     
  •   50vip 2021-09-26 16:54:28 +08:00 3397 次点击
    这是一个创建于 1542 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原文地址: https://www.yuque.com/antv/g2plot/trqnha

    iOS 15 9 月 20 日发布,同步携带 Safari 15,国内用户在 21 号凌晨收到升级推送,在第二天 22 号,就收到 issue 反馈,G2 在新版本全部挂了。 #3635

    image.png

    这个 safari 版本的配色,和 AntV 的官网整体配色毫无违和感。

    卡死的问题

    image.png

    没有任何报错,没有任何额外信息,就是卡死浏览器, 导致页面崩溃。只好一行一行代码的断点,从 G2 到 G 一两万行代码,以及直觉断了大概 2h,终于定位到最后的一行代码。 image.png 然后通过看 context 、text 等信息,最终排查到问题在于:**在 iOS 15 canvas 中绘制中文,如果使用 -apple-system 字体,直接卡死,而 G2 内置主题字体使用的 -apple-system 。**

    最小复现 DEMO:

    const canvas = document.getElementById('container'); const cOntext= canvas.getContext('2d'); context.fOnt= '20px -apple-system'; context.fillText('绘制中文', 0, 0); // 使用该字体绘制中文会出现问题 

    先不管为什么,先解决问题再说 #3640

    image.png

    -apple-system 字体问题

    -apple-system 这个字体从 G2 2.x 开始就作为内置主题的默认字体,所以这个问题影响到所有 G2 的版本。很奇怪,这个究竟是什么字体?为啥那么早就内置了,而实际 google 搜索,并不能搜到这个字体。

    image.png

    所以,我猜测大概率是:设计师的设计软件,在直接导出样式的时候,fontFamily 包含有这个字符串,这个字符串只是一个占位符,代表当前苹果系统的字体。

    如果是这样的话,上述复现 DEMO 中改成任意一个 xxx 不存在的字体,理论上同样可以复现。如果是这样的话,那 iOS 的这个 bug 就很严重了,如果使用不存在的字体在 Canvas 上绘制文本,就会卡死浏览器。

    测试结果,竟然是不会。那如果这样的话,意思就是 -apple-system 这个字体名称确实有他的含义,并且 iOS 系统对他也确实有额外的处理,导致了渲染卡死。

    下一步,理论上就是应该到 iOS 的源代码中去看对 -apple-system 字体的处理逻辑了。到这里就不好意思了,能力太差,无法深入到操作系统底层去排查,有相关经验的,可以进去走下。

    Safari 15 的正则解析

    image.png 这个问题,直接导致 AntV 的所有官网在 Safari 15 中都打不开,这段正则在 chrome 上解析正常,但是在 Safari 15 是一个不合法的正则,出现在 normalize-url 这个包中,最新版本的 7.x 已经修复,但是狗血的是,5.x 后的版本仅支持 node 环境,所以这个问题,目前只能锁定 4.x 版本解决。

    第 1 条附言    2021-09-26 17:56:36 +08:00

    经过网友指正,“-” 是搜索引擎的关键词,所以没有搜索到。重新搜索得到这篇文章

    fontFamlily 中的 system-ui 是指系统当前默认的字体,这个规范,而实际规范实施的时候呢,考虑到不同平台及向后兼容,在 macOS 和 iOS 上,我们需要使用 -apple-system 及 BlinkMacSystemFont来兼容适配 system-ui 标准。

    第 2 条附言    2021-09-27 09:55:41 +08:00

    欢迎关注我们的公众号,会定期更新技术文章,以及可视化相关内容。

    wechat

    12 条回复    2021-09-26 19:25:13 +08:00
    clf
        1
    clf  
       2021-09-26 17:00:12 +08:00
    一般移动端用 antv f2 。

    (我们的 G2 也翻车了,然后解决方案是直接更新成 F2.)
    fe619742721
        2
    fe619742721  
       2021-09-26 17:01:18 +08:00
    有意思,想了解下怎么 debug 定位到的
    clf
        3
    clf  
       2021-09-26 17:03:02 +08:00
    而且不止是 safari,包括钉钉内集成的 H5 、企业微信里集成的 H5 都崩溃了。
    mzlzero
        4
    mzlzero  
       2021-09-26 17:04:09 +08:00
    断点二分法是不是更快,不用一行一行断
    ss098
        5
    ss098  
       2021-09-26 17:05:10 +08:00
    查不到 -apple-system 是因为减号是 Google 的过滤语法,搜索 apple-system font 就可以了。
    50vip
        6
    50vip  
    OP
       2021-09-26 17:45:06 +08:00
    @ss098
    50vip
        7
    50vip  
    OP
       2021-09-26 17:45:46 +08:00
    @mzlzero 我是按照调用栈,树形打点,也是挺快的,只不过层级太深了。。。
    50vip
        8
    50vip  
    OP
       2021-09-26 17:46:53 +08:00
    @ss098 学习了,看来我的内容要重新更新一下。
    50vip
        9
    50vip  
    OP
       2021-09-26 17:48:41 +08:00
    @lychs1998 G2 升级一下就可以了,官方已经修复了。
    50vip
        10
    50vip  
    OP
       2021-09-26 17:49:17 +08:00
    @fe619742721 一直断点
    anguiao
        11
    anguiao  
       2021-09-26 18:03:02 +08:00   1
    可以搜“\-apple-system”,这样就能搜到了,其他类似的情况也可以这么处理。
    find456789
        12
    find456789  
       2021-09-26 19:25:13 +08:00
    希望有大神可以分享下, 排查这种错误的思路,方法
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3884 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 05:25 PVG 13:25 LAX 21:25 JFK 00:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86