带你读《2022技术人的百宝黑皮书》——跨桌面端Web容器演进(4)https://developer.aliyun.com/article/1340342?groupCode=taobaotech
iframe增加appid自定义属性
PC小程序中的LocalWebview是利用iframe实现的,为了能够让不同的localWebView能证确的路由到小程序包,我们在iframe的标签中增加了自定义属性appid的解析。千牛端在识别appid后可以把资源获取路由到对应的小程序包中。小程序利用这一点支持了插件webview功能,从而实现了丰富的二次开放。
UserAgent增强
原生的UserAgent是跟随固定名称如Chrome/98.0.4758.102,一个应用程序中,UA是固定的,不允许随意更改。但我们提供WebView容器级别的UA定制。即同在千牛中,不同的WebView的UserAgent 可以增加自定义字段,从而实现在H5插件的WebView和小程序的WebView可以展现不同的UA。利用者一点,ISV可以实现一套代 码同时应用在插件和小程序上,完成自己特定的功能。
清理浏览器缓存
浏览器的缓存大大提升了浏览器加载速度,但是偶儿因为自身或服务端的异常,会导致浏览器缓存异常。我们通过在CEF中增加接口,沿袭Chromium内部清理缓存流程,实现了可以在不退出应用程序的情况完成缓存的清理。使 缓存出现异常的情况下能够恢复。
未来的演进
更好的内存回收策略
CEF的框架下,我们沿用了AEF时期的内存回收策略,更多的是在业务测进行。比如在判断用户空闲时对于不活动 的WebControl进行回收。在判断单Render进程内存超过一定阈值时重新启动相应Render进程。但这些都会损失 一定的用户体验。所以我们打算借鉴钉钉之前研究过的Tab休眠策略,让不活动的页面仅保留缩略图,从而在不损失用户体验的情况下,实现内存的优化。
白屏检测
之前我们做过相应的白屏检测的研究。有区于依赖前端技术的白屏检测,客户端做的检测会更贴近用户真实体验。因为前端只能通过检测DOM树的变化来感知,但是否在真的渲染以及真实呈现在用户视觉上的东西是无法感知的。 我们通过检测Render最后生成的渲染帧的绘制指令,以及观察最后窗口的贴图动作能最接近用户测的感知到是否白屏。但在之前预研中,我用统计出来的白屏却高于正常值,需要进一步调研,也欢迎有兴趣的同学一起探索。
团队介绍
我们是大淘宝技术部行业与商家技术跨终端技术团队,业务上负责为千万级商家打造最高效的一站式工作台千牛, 为淘宝上亿商家和消费者提供稳定高效的端到端消息IM服务;技术上深耕C++跨终端及PC桌面端技术(Win- dows&Mac),为商家,消费者提供稳定,可靠,高效的客户端产品。