文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

腾讯客户端工程师赵裕:跨平台自渲染UI引擎在Web平台的探索之旅​

2024-11-30 11:18

关注

WOT全球技术创新大会2023《大前端最佳实践》专场中,腾讯客户端工程师赵裕带来了《跨平台自渲染UI引擎在Web平台的探索之旅》的主题分享,全面介绍了跨平台、WebGLWasm等前沿技术的落地过程。

牛刀小试:从Mobile/PCWeb

将运行在PC平台和Mobile平台上的自渲染跨平台UI引擎移植到Web端,是赵裕此次分享的重点内容。赵裕表示,跨端一定不只是瞄准跨Mobile(Android/iOS)、跨PC(Windows/MacOS/Linux),而且还要跨Web,例如腾讯文档,就是一个跨多端的应用,阿里的语雀文档和飞书,也都有Web应用场景。

那么,如何才能更好地支持Web。第一个种思路就是用最原始的Web开发方式,用HTML+CSS+JS对项目进行重写,但从成本角度考虑显然不行。第二种思路就是利用WebAssembly。

虽然使用WebAssembly能够更容易写出高性能的代码,但同样会面临着以下四个挑战

1)项目文件多,依赖关系相对复杂,通常基于CMake/GN/Bazel组织。

2)每个平台存在一定数量的胶水代码,如Java / OC / JS / TS

3)存在对三方库的依赖(.a / .so) ,需要构建对应的Wasm制品。

4)本身的场景与宿主有复杂的交互,不是一个功能单一的模块。

解决挑战的方法是利用Clang的交叉编译。如果编译成WebAssembly,则只需要用cmcmake+emmake工具进行包装之后,再进行编译即可。

赵裕表示,将所有C++编译到另外一个目标平台的二进制文件,归根结底就是一个交叉编译的过程。这个CMake交叉编译文件把我们经常用到的ClangClang++工具改成了emc++和emcc去编译。由于C++文件并不能直接转译成WebAssembly,因此借助LLVM的中间形式的字节码,先通过Clang把它转移成中间的表达形式,然后才能把这个中间的表达形式翻译成asm.js。

除此之外,还可以利用Binaryen工具将asm.js翻译成WebAssembly。不过,用WebAssembly编译C++时,因为要有一个中转过程,所以构建耗时Native平台要慢很多。目前,LLVM组织开发了一个能直接把C++转译成WebAssembly的功能,让编译效率变得更快。

在接下来的时间里,赵裕从Wasm线程的局限性与适配、C++JavaScript的互操作、渲染与WebGL、图片与文字(基于Skia)四个维度,详细介绍了Web适配和渲染适配的详细过程,分享了工作中的经验。

赵裕认为,从Mobile/PCWeb,一要基于强大的LLVM实现交叉构建;二要在跨平台的设计中,快速适配线程、交互、WebGL等限制;三要解决Web平台限制为后续留下的包大小、性能、扩展性等隐患。

深度优化:从可用到好用

判断跨平台自渲染UI引擎在Web平台是否好用,主要有三个依据:

首先要具备更快的启动时间,尤其是加载+显示第一帧的时间要足够快;其次要具备稳定流畅的帧率;最后CPU/内存的占用率要做到更低。

赵裕表示,从可用到好用,必须从各个维度进行深度优化。在接下来的时间里,赵裕详细介绍了包大小的优化思路。

首先是从SkiaTGFXSkia是一个2D渲染引擎,底层为OpenGL,并提供了更上层的接口。Skia拥有功能完备、质量稳定、生态成熟三大特点,但也会导致Web平台的包体积过大。

作为一个开源的产品,TGFX是一个动画库的底层组件,它更加专注于硬件渲染能力,并兼容软绘。能够让用户充分利用平台能力精简库增量,充分复用现代硬件的高并发等特性。与Skia相比,TGFX更加安全,环境管理更加便捷,内部团队的沟通协作也更加方便。

两者的不同点在于,Skia用了freetypeICUHarfbuzzTGFX则用了Core Graphics(在Apple平台),这是苹果自己的API,可以用来画文字。

其次,在图片解码方面,如果利用Skia解码一张PNG图片,就要先把PNG库导入,再用C++进行解码,这种方式将会占用包大小。那么,有没有一种能做到相同功能,但是又没那么占用包大小的方式呢?答案是,可以使用Web自带的解码能力进行实现。实际上,在Android/iOS等平台上可以使用类似的方式,复用原生平台的图片编解码能力,裁剪包大小。

最后,在文字渲染方面,往往面临着特殊样式、特殊字符、特殊语言、缩放下的像素级对齐、系统字体与回退兜底和多种编码等挑战,在进行自渲染时,一般可以利用文字渲染的三兄弟: ICU+Harfbuzz+Freetype

赵裕表示,把一段文字直接渲染成UI,可以利用Freetype+Harfbuzz。其中,Harfbuzz是加载之后计算文字在某一个特定大小下的宽高,把它渲染出来之后,就会知道每一个文字渲染在哪个位置。因此,把每个文字渲染的位置用Harfbuzz计算出来,Freetype就会根据这个字体里面的矢量路径将光栅化变成位图,然后得出渲染结果。

落地展望:从技术到业务

自渲染技术如何更好地推动业务发展,赵裕也分享了自己的一些看法。

赵裕表示,做好自渲染平台之后,之前Hippy想要在Web平台渲染,需要写一个Web Render。但是,有了WebAssembly能力之后,我们可以去对接Hippy底层,把DomTree直接渲染到Web Canvas上

此外,赵裕还演示了如何在一个嵌入式系统落地这套框架。

通过WebAssembly的适配工作基于我们框架开发的业务不仅能够在移动端运行,在PC端运行,也能在Web上运行,甚至能让这个图表在一块嵌入式设备运行。这样,就可以快速部署到各式各样的场景(从一块嵌入式终端设备到各大场景的浏览器)中。

我们虽然在渲染这块做了一些优化,但是总体来说还有很多Web的能力需要探索和优化,例如动态加载、多线程等。演讲最后,赵裕强调,在Web的探索上,正如万里长征,我们只迈出了一小步。

本文整理自腾讯客户端工程师赵裕在WOT2023大会上的主题分享,更多精彩内容及现场PPT,请关注《51CTO技术栈》公众号,发消息【WOT2023PPT】即可直接领取。



来源:51CTO内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯