Cube 技术解读|Cube 小程序技术详解( 二 )





新老 Cube 版本,选择器支持上的差异如下:



注:

[1] 老版本 Cube 是指:钱包 10.2.0 以前版本;新样式能力基本上对标 Web 引擎的样式能力;新样式能力支持像这种复杂选择器 。

div > div.jartto p span.yellow a#t1 {}.pixel-ratio-2 .web1px::before {}div:nth-child(2n+1) {}input[type="button"] {}#blue,div > div.jartto p span.yellow a#t1 {}
支持自动分词,断行(Inline Text)


最初 Cube 用的是 Android 和 iOS 提供的文本计算和绘制能力 。这种技术方案(以下称为平台层 Text)存在3个问题:

性能问题:特别是 Android 下,利用 Android 平台层的接口实现文本布局计算,导致在文本较多的情况下,布局耗时在渲染整体耗时里占比较高;富文本特性:富文本以及许多文本特性支持较麻烦;各平台上实现文本效果存在细节差异或者兼容性问题 。



针对上述问题,在 Flow Layout 基础上增强支持 Inline Text 布局计算文本 。基于 Inline Text 可以较轻松实现以下富文本,图文混排,分词,自动换行等 。



1.富文本

2.自动换行和分词

Inline Text 实现前后的文本样式对比如下:



注:

假设原有 Cube 采用平台层接口实现的文本特性称为:平台层 Text;√表示实现细节上不完善或者不完全支持;在 Inline Text 基础上可以实现功能丰富的富文本组件;值得一提的是:该实现非常精巧,对于 Cube 包体积只增加了 170KB 。具体细节后续文章详细探讨 。



文本布局计算耗时对比(文本节点较多场景):

采用 QuickJS 替代 V8


V8 虽然是性能最高的 JS 引擎,但是存在内存占用大,初始化较慢等不足 。在 IoT 或者低端设备上这些不足会被放大 。因此在这些设备上,Cube 采用 QuickJS 取代 V8 。一方面降低内存占用,另外一方面提升初始化性能 。



Cube 内部目前适配了多个 JS 引擎,具体如下:

在 Android 移动端上使用 V8 和 JSIiOS 上使用 JSCIoT 等低端设备上使用 QuickJS



另外我们在开源 QuickJS 基础上做了些优化工作 。优化的结果大致如下(后续文章将详细介绍):

支持动画和多媒体组件


除了上述基础组件和能力之外,动画和多媒体也是部分小程序不可缺少的 。因此我们扩展支持了 Video,Canvas、Lottie,Live Player 等组件支持 。并应用于 TV 大屏小程序、小游戏以及直播场景上 。



在低端设备上,如何提高动画帧率并且降低内存占用也做了深度的优化 。以下是 Video 和 Canvas 组件在小程序中的效果图:

支持多种模式的小程序产物


目前 Cube 支持多种模式的小程序产物:Native,Cube,Shared 。

Native 模式:对应的是旧的 Cube 渲染小程序模式,不支持 CSS 样式表,只能支持内联样式和有限的几种 CSS 选择器 。性能最高,兼容性较低;Cube 模式:在 Native 模式进化而来,支持 CSS 样式表和多种 CSS 选择器 。性能良好,支持常用的 CSS 样式和特性(包括样式继承,多种 CSS 选择器);Shared 模式:为了降低 Web 渲染的小程序迁移或者过渡到 Cube 渲染而开发 。在同一个小程序产物里既支持 Web 渲染一部分页面又支持 Cube 渲染一部分页面 。而且 Cube 渲染的页面支持样式表 。这样在性能和兼容性平衡 。小程序产物相对于 Web 渲染的小程序,产物体积增加不会超过 10% 。



注:如果需要 Web 产物兜底,则 Native 模式 和 Cube 模式的小程序产物,比 Shared 模式大 。



研发进展

Cube 小程序在 TV 和 POS 机上和相关团队,一起打磨小程序技术栈(包括渲染引擎,JS 引擎,AppX,Ariver 容器)等 。


在 TV 上面临的问题:

内存少:有的设备只有 512MB 内存,长列表滚动容易卡;需要支持焦点切换;CPU 主频较低:有的只有 1GHz 。



短中期目标是用小程序技术栈替代 WeeX 单页 。当前进展如下:

小程序启动性能上超过 WeeX 单页(低端设备上优势更明显);内存占用上,小程序初始化后内存占用小于 10MB,典型小程序整体内存占用在 32MB 左右 。



具体细节后续文章详细总结 。



在 POS 机上面临的问题:


推荐阅读