当前位置:网站首页>Cube 技术解读 | Cube 渲染设计的前世今生
Cube 技术解读 | Cube 渲染设计的前世今生
2022-06-10 15:25:00 【InfoQ】

- 《Cube 技术解读 | Cube 小程序技术详解》
- 《Cube 技术解读 | 支付宝新一代动态化技术架构与选型综述》
- 《Cube 技术解读 | Cube 卡片技术栈详解》
Native原生渲染的问题
跨平台异步渲染方案
异步渲染

跨平台架构

异步渲染技术选型
Android平台技术选型
SurfaceView、GLSurfaceView

TextureVIew

Bitmap+普通View
iOS平台技术选型
渲染技术的演进
常见术语
- LayoutTree:DomApi通过add、update、remove构建的经过yoga布局的,用来描述节点父子关系,包含布局信息的原始树型结构;
- RenderTree:用来描述绘制节点父子关系,包含绘制信息的树型结构,与layoutTree的区别举例:一个layoutNode visible为gone,则该节点不会在RenderTree中出现;
- Layer:一般情况下,根节点及其子节点绘制在同一个画布上,定义为一个layer,对应平台层一个view,当子节点有动画属性,或者超出父节点范围,则需要独立出一个layer;
- LayerTree:上面提到的layer节点,构建的树型结构,一个layer对应平台层一个view,我们叫ContainerView;
- 实体节点:需要独立layer的节点为实体节点;
- 虚拟节点:除了实体节点以外,其他节点均会被绘制在父容器的画布上,这些是虚拟节点。
演进过程
调研初期——1.0验证方案的可行性



- 不能支持多layer结构
- 实体view没有复用,也就是朋友动态列表中有多少item/cell,就会有多少“赞”、“赏”,“评”实体组件
产品化时期——2.0支持多layer


- 主线程计算量大,可能造成卡顿
- render节点既包含绘制信息,是绘制对象,还包含逻辑,例如display:"none"节点忽略不显示,职责不清晰。
优化时期——3.0取长补短


- render线程繁忙时造成的闪白率升高
存在的问题
两端一致性问题
- cube目前的绘制api,采用的系统平台层提供的CanvasApi(iOS是CoreGraphics),这就导致了两个平台在绘制点线面的细节上必须两端人工代码对齐,否则就会产生效果差异,当新增一些feature,例如支持点划线,需要两个平台各自实现DrawDottedLine接口,但这个问题,cube团队正调研自绘制,即使用skia api将绘制接口下沉到c++,实现跨平台自绘制;
- 文本也是容易产生差异的一个点,利用平台层api对文本进行布局,在绘制时调用布局的api进行绘制,因此可能会产品平台差异,但cube团队目前已经在Cube小程序上把文本布局,布局算法下沉在c++层,不依赖平台api,实现双平台一致;限于内存/性能的约束尚未在Cube卡片上应用。
闪白问题
未来规划
- 渲染快照,提高冷启的渲染效率,减少闪白时间;
- 渲染策略,例如预渲染、同异步绘制自适应、线程模型优化、组件缓存和预加载等,减少闪白率,提升渲染效率;
- 用于Cube卡片的yoga布局引擎优化,提升layout布局效率;
- skia自绘制实现,实现双端一致性;
边栏推荐
- Lua table operation
- 音视频处理三剑客之 AEC:回声产生原因及回声消除原理
- How the autorunner automated test tool creates a project -alltesting | Zezhong cloud test
- Cap version 6.1 Release Notice
- 企业如何提升文档管理水平
- Jiabo gp2120tu label printer installation and use tutorial (PC)
- 点击解锁广和通5G模组“关键词”
- How to write a global notice component?
- 数据库创建触发器的问题
- Wechat applet color gradient
猜你喜欢

One-way hash function

在什么场景下,我们不能使用箭头函数?

Using GDB to quickly read the kernel code of PostgreSQL

Yuntu says that every successful business system cannot be separated from apig

Development of stm8s103f single chip microcomputer (1) lighting of LED lamp

This article introduces you to j.u.c's futuretask, fork/join framework and BlockingQueue

Software intelligence: formal rules of AAAS system metrics and grammars

ORB_ Slam2 visual inertial tight coupling positioning technology route and code explanation 3 - tight coupling optimization model

ORB_SLAM2视觉惯性紧耦合定位技术路线与代码详解1——IMU流型预积分

无线通信模组如何助力智能无人机打造“空中物联网”?
随机推荐
Kubernetes 1.24: preventing unauthorized volume mode switching
Kubernetes 1.24: 避免为 Services 分配 IP 地址时发生冲突
ORB_SLAM2视觉惯性紧耦合定位技术路线与代码详解1——IMU流型预积分
无线通信模组如何助力智能无人机打造“空中物联网”?
Self recommendation - in depth understanding of the rust Standard Library Kernel
一文带你了解J.U.C的FutureTask、Fork/Join框架和BlockingQueue
Digital management medium + low code, jnpf opens a new engine for enterprise digital transformation
After class assignment for module 8 of phase 6 of the construction practice camp
ORB_ Slam2 visual inertial tight coupling positioning technology route and code explanation 2 - IMU initialization
The product design software figma cannot be used. What software with similar functions is available in China
3. Encounter the form of handycontrol again
TensorFlow实战Google深度学习框架第二版学习总结-TensorFlow入门
ORB_SLAM2视觉惯性紧耦合定位技术路线与代码详解0——整体框架与理论基础知识
企业如何提升文档管理水平
音视频处理三剑客之 AEC:回声产生原因及回声消除原理
Technology sharing | quick intercom, global intercom
推荐一个好用的设计师导航网址
CentOS Linux is dead! Oracle Linux may be a better alternative
Super practical operation! Calibration and registration of Kinect depth map and RGB camera for hands-on teaching
[rust daily] 2022-04-19 performance evaluation of rust asynchronous framework