当前位置:网站首页>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自绘制实现,实现双端一致性;
边栏推荐
- Digital management medium + low code, jnpf opens a new engine for enterprise digital transformation
- ORB_ Slam2 visual inertial tight coupling positioning technology route and code explanation 3 - tight coupling optimization model
- MITM(中间人攻击)
- Get to know RPC
- Wechat applet closes the current page
- Golang uses reflection to directly copy data from one structure to another (through the same fields)
- 微信小程序 滑动到顶部
- Kubernetes 1.24: preventing unauthorized volume mode switching
- 百度开源ICE-BA安装运行总结
- 4、再遇Panuon.UI.Silver之窗体标题栏
猜你喜欢

opencv神经网络库之SVM和ANN_MLP的使用

How to solve the problem that SVN cannot open the URL address

Information theory and coding 2 final review BCH code

Applet network request promise

Beginner pytorch step pit

How the autorunner automated test tool creates a project -alltesting | Zezhong cloud test

Day10/11 recursion / backtracking

点击解锁广和通5G模组“关键词”

“绽放杯”5G应用奖项大满贯!广和通多个联合项目荣获通用产品专题赛一、二、三等奖

This article introduces you to j.u.c's futuretask, fork/join framework and BlockingQueue
随机推荐
ORB_ Slam2 visual inertial tight coupling positioning technology route and code explanation 1 - IMU flow pattern pre integration
推荐一个好用的设计师导航网址
Wechat applet slides to the top
opencv#4 手写体识别:自建训练集完美
Vins theory and code explanation 0 -- theoretical basis in vernacular
OpenTelemetry Metrics发布候选版本
Information theory and coding 2 final review BCH code
ORB_SLAM2视觉惯性紧耦合定位技术路线与代码详解1——IMU流型预积分
苹果式中文:似乎表达清楚意思了,懂了没完全懂的苹果式宣传文案
产品设计软件Figma用不了,国内有哪些相似功能的软件
Day10/11 recursion / backtracking
MITM(中间人攻击)
How to open an account for agricultural futures? Are there any financial conditions?
ORB_ Slam2 visual inertial tight coupling positioning technology route and code explanation 0 - overall framework and theoretical basic knowledge
云图说|每个成功的业务系统都离不开APIG的保驾护航
Jaeger引入了对OpenTelemetry的原生支持
RSA a little bit of thought
如何构建以客户为中心的产品蓝图:来自首席技术官的建议
虚拟机ping不通的几种原因及解决办法
Detailed explanation of binary search