刚刚,优酷的模版引擎,竟然开源了!

全自研客户端技术方案:优酷跨端动态模板引擎优酷跨端动态模板引擎 前言 优酷客户端是一个多平台【Phone、Pad、OTT、MacPC】的文娱生态综合体,为了降低多端产品迭代的开发成本,并提供给用户高性能、一致的产品体验,优酷技术团队在19年底启动了跨平台动态模板引擎技术方案的攻坚。 作为内容分发的主体,优酷客户端在产品展现层的主要特点是组件设计的规范化和卡片化。优酷动态模板引擎在问题定义上将组件作为了我们的问题空间模型,不仅很好的规避了如Weex、React Native等技术方案的复杂度和工程量,让我们可以快速实验及工程化。其次也在根本上让技术方案脱离JS Bridg 阅读详情

现在生活节奏很快,白天上班累死累活的,只有通勤的时候煲剧,看电影的时候,才是我的快乐时光。每天上下班坐在地铁上,我都要刷一会剧。不知道大家都用什么软件看电视剧,电影。菜鸟哥比较喜欢用优酷,里面电影,电视剧很多,而且非常有特色。

优酷客户端是一个多平台【Phone、Pad、OTT、MacPC】的文娱生态综合体,为了降低多端产品迭代的开发成本,并提供给用户高性能、一致的产品体验,优酷技术团队在19年底启动了跨平台动态模板引擎技术方案的攻坚。

作为内容分发的主体,优酷客户端在产品展现层的主要特点是组件设计的规范化和卡片化。优酷动态模板引擎在问题定义上将组件作为了我们的问题空间模型,不仅很好的规避了如Weex、React Native等技术方案的复杂度和工程量,让我们可以快速实验及工程化。其次也在根本上让技术方案脱离JS Bridge的老路,保证了端侧的高性能。

f6f47c8da1dd8d7f32024b86ff58ee29.png

概述

组件化在目前的移动端来说是非常常见的组件UI形态,在优酷客户端的分发场景中,组件则更多的承载了影剧综漫等内容的信息呈现。

95d050fd80452a3fe9f1d8c45458e765.png

当然,组件本身可以通过组合或嵌套来形成更加复杂的展现模式,但从原子化角度来讲,作为单一元素来看,组件有着非常强的结构化特征,抽象后其逻辑构成如下:

1).视觉元素:控件,图片、文本、富文本等

2).布局:视觉元素的位置控制信息及元素绘制样式信息,如坐标及字体、字号等

3).数据:要真实表达给用户的有意义的信息,如影剧综漫的名称、演职员、封面海报等

4).事件:对用户交互的反馈及逻辑响应,如点按钮收藏、预约、关注等

所有的原子化组件都可以抽象为上述的元数据,那如何把这套数据结构进行有机组合形成模板,并在多端场景按照同样的行为表现进行渲染,是本篇文章要详细进行阐述的内容。

什么是模板

7f06b792fa2b7c11008280b163192962.png

在概述中介绍到,我们可以将原子化的组件抽象为元素、布局、数据、事件四类核心信息,其中元素信息,我们通过JSON数据结构进行组织,来描述组件中的元素构成及层级关系;布局信息中布局关系通过符合css3规范的flexbox盒模型进行描述,样式信息则通过标准化的css来进行描述;数据模型引入了XPath的理念,由于组件元素中最终呈现的数据往往来自云端下发的JSON数据,因此,这部分要解决的是如何将组件中文本的text属性与云端JSON数据中某个层级的data实现动态绑定,类似于root.path.router.title; 至此,通过将上述数据结构整体组合,打包后形成的一个物理文件,我们称之为模板。当任一客户端完整实现了对这个模板文件的解析与渲染,便可完成组件的绘制工作,从而实现跨端。

3eabed2bd197401ca2d0d3723662d69f.png

优酷动态模板引擎核心实现方案

优酷动态模板引擎是由优酷技术团队自研的,提供对上述模板文件进行跨端标准化解析、构建、渲染的客户端技术方案。由于优酷内容分发场景对用户体验和技术性能有极其苛刻的要求,因此,我们制定的所有技术方案的最高前提是性能第一。

架构设计

动态模板引擎在优酷内部代号为GaiaX,按照分层设计理念共分为4层。基础依赖层坚持最小依赖原则,要重点说明的是,为了保证模板布局计算的高性能,我们引入了由RUST编写的StretchKit高性能布局计算引擎[https://github.com/vislyhq/stretch],其具备跨端、较小的包体积(170K)、计算性能卓越等特点;核心渲染层构成模板引擎的渲染内核,解决模板文件解析、虚拟节点树构建、布局计算、表达式构建解析等核心逻辑;模板中心及模板服务层则更面向业务,与优酷业务架构进行结合实现对现有能力的复用,避免重复造轮子,并向上层业务提供标准化模板渲染及接入服务。

9874c128b0b81577edb6427d5450458e.png

总线设计

对于动态模板引擎来说,输入结构化的模板文件,经过文件IO、数据解析、虚拟节点树构建、布局计算、表达式运算、渲染树构建到真实视图树组成了完整的总线链路。

b75eeccbda9c66c2daea4ee35b6e004d.png

核心实现,虚拟节点树

虚拟节点是链接模板文件,生成布局,绑定样式,以及最后渲染view的核心模块,整个链路是属于线程安全,可以在在线程进行操作和布局,在生成view的时候回到主线程,可以为后续的预渲染和性能优化提供可靠的保障。

下图是描述index.json通过GaiaNode和视图View的对应关系:

4f688d63c7c9ee689e8c0a5e3562e9ed.png

  • Node作为基础的虚拟节点,负责CSS中Style信息生成客户端样式属性,以及CSS布局信息通过StretchKit生成的frame布局信息,同时获取父node,以及和子node数组的对应关系。

  • Node和View的关系是一一对应的,Node通过creatView的方式创建不同的view视图,以及renderView的方式将样式和frame一次性赋值给view,减少重复的赋值操作。

  • 在此基础上根据模板中的视图type衍生出rootNode,viewNode,imageNode,以及textNode。

性能保障

  • StretchKit库的优势

选中Stretch看中的就是其有着极好的性能表现和较高的内存使用率,而这些都是Rust语言特性所带来的。Rust速度惊人且内存利用率极高,标准Rust性能与标准C++性能不相上下,某些场景下效率甚至高于C++。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的场景。

e43789f6d41c59e395c87c0f58529931.png

  • AST层级极简

AST即虚拟节点树是根据模板文件构建的逻辑树,其层级结构的合理性完全受制于模板创建者对flexbox布局的熟悉程度,为了提高整体技术方案的性能下线,动态模板引擎在进行虚拟节点树构建过程中,会主动进行层级优化和拍平,从而减少不必要的元素冗余关系,提升渲染性能。

3390501a4839dc1b67a4eebe49c83fab.png

  • 线程减负

    • 通过对虚拟节点树进行DIFF运算,当真实存在数据改变时才提交更新处理

    • 减少线程池线程数,避免不必要的并发线程间的资源开销及抢夺

    • 对数据遍历、JSON解析赋值、布局计算等处理进行异步化,保证对于主线程非必要不提交

e282e0b1a91adf55cfd19256a1163fcf.png

关键数据,技术方案横向对比

技术方案

DSL

最佳实践

胶水层

渲染方案

研发团队

Weex

Vue/Rax

页面动态化

JSBridge

Native渲染

阿里巴巴手淘技术团队

ReactNative

React

页面动态化 /

App整体架构方案

JSBridge

Native渲染

Facebook

MTFlexbox

XML

组件级接入

无

Native组件半异步渲染

美团终端业务研发团队

GaiaX动态模板引擎

JSON

组件级接入

无

Native组件半异步渲染

优酷应用技术团队

性能表现

iOS

Android

低端机

中端机

高端机

低端机

中端机

高端机

54.0

57.0

58.0

38.99

57.5

58.81

55.0

58.0

57.0

38.9

58.09

58.91

55.0

58.0

57.0

40.6

57.77

58.86

线上效果

7beb9a87bd3742f5e8d7ade6415f5814.png

优酷动态模板引擎业务赋能

目前在优酷15+业务团队中,均接入使用了动态模板引擎作为跨端提效技术方案;经过自2020年起一整年业务应用,从实际效果来看,对于多端组件开发整体研发效率提升可达30%左右,单组件研发人力投入可由0.5-1人日下降至0.25-0.5人日。

8fc57ae6df2a7591ea4b7aa18025fb29.png

项目开源

动态模板引擎在优酷业务场景上线后,无论是线上的用户体验、还是研发端的效能度量上都有比较良好的表现。从整个端侧开源社区来看,面向组件级的跨端动态化方案还是比较少的,因此,优酷技术团队在2021年10月决策将方案进行开源,一方面无论是发现issue还是贡献代码,希望通过社区的力量对技术方案实现持续迭代演进,将其打造为功能更加强大的有社区影响力的产品。另外,也希望成熟稳定的技术能力可以帮助更多的个人开发者及中小技术团队,解决客户端日常开发中的痛点问题,实现多赢。

开源计划

81e7b9449a9b1d157efea14ae24c8040.png

项目空间

  • 项目地址:https://github.com/alibaba/GaiaX

  • 开源协议:项目遵循Apache2.0协议

  • 项目文档地址:https://www.yuque.com/biezhihua/gaiax

总结与展望

优酷动态模板引擎在优酷整体业务架构中,已经作为分发场基础能力被各业务广泛使用。由于模板DSL是前端技术栈范畴,对于客户端同学来说有一定的学习成本,因此,技术团队在引擎技术能力稳定后的主要研发方向是为使用者提供可视化、搭建化的LowCodeIDE平台能力。目前,该能力也已经交付到各技术团队中,从实际效果来看,对降低模板搭建成本非常有效。在动态模板引擎的开源项目中,IDE本身也进行了同步输出,广大社区开发者可以直接使用平台进行模板搭建。

随着技术方案的开源,团队会根据社区的反馈将开发者关注的问题和能力尽快进行实现,同时,在业务场景孵化的一些新特性,也会实时向社区推出,让更多的开发者受益。

优酷技术团队目前在阿里巴巴开源社区已经开源上线了不少技术方案,后续还将推出更多的能力,也希望广大技术爱好者关注阿里巴巴开源社区(https://github.com/alibaba),关注优酷端侧技术的发展。

直达项目,点亮star!

GaiaX开源解读 | 跨端动态化模板引擎详解,看完你也能写一个 本篇中将进一步深入GaiaX的各个细节,深度解读GaiaX团队同学是如何进行方案落地的,看完本篇内容相信你一定会有所收获。 阅读详情

相关推荐

GaiaX开源解读 | 基于优酷业务特色的跨平台技术

文章会从优酷的业务特色、客户端研发效能的瓶颈问题、提出解决研发效能问题的思路这三个方面分别来进行介绍,带大家进一步了解GaiaX的起源。

阿里文娱技术 1688

对优酷客户端开发的初步理解

优酷开放平台介绍¶ 优酷开放平台是基于优酷海量视频库的开放的发现、订阅、分享与交流平台。优酷开放平台为您准备了几乎无限的存储空间、以及随时在增长的服务带宽,满足您从上传、传播、播放到分享、聚合、交流的全部需求。

u011267583的专栏 958

已开源 优酷动态模板研发体系为分发提效30%

概述 优酷是一个多屏、多端,以内容分发及内容消费为主体的文娱生态综合体。 在内容分发场景,存在大量的客户端开发需求,包括视觉升级、各场景的业务需求迭代、大小屏设备需求同步等,为了降低研发在跨端场景中组件重复开发的技术成本,优酷技术团队于2019年底开始探索跨端动态化研发提效解决方案,经过2年多时间的努力,目前跨端动态化能力已经在优酷各业务场景落地,帮助研发团队在分发业务上实现提效30%左右。 动态模板技术体系以跨端动态化SDK为中心,通过在设计阶段、研发阶段、联调阶段降低对接、开发、调试等核心工作的技术成

阿里文娱技术 3278

适用于pc的优酷api调用方式和适用触屏端的api调用方式

写在前面 因为公司有需求需要用到视频播放,以前的需求只是需要视频可以播放,可以暂停即可,并不需要对视频的播放情况进行记录。新的需求下来,我马上去寻找优酷的api,然而我以此关键词搜索了百度,全是各大论坛的使用优酷api的方法,点进去,有的也贴了 优酷api 的官方文档地址。我开心的点开: http://open.youku.com/tools/ ,404了解下。我想会不会是youku倒闭了,我颤...

西装暴徒_12138的博客 1745

阿里开源!轻量级深度学习端侧推理引擎 MNN

AI科学家贾扬清如此评价道:“与 Tensorflow、Caffe2 等同时覆盖训练和推理的通用框架相比,MNN 更注重在推理时的加速和优化,解决在模型部署的阶段的效率问题,从而在移动端更高效地实现模型背后的业务。这和服务器端 TensorRT 等推理引擎的想法不谋而合。在大规模机器学习应用中,考虑到大规模的模型部署,机器学习的推理侧计算量往往是训练侧计算量的十倍以上,所以推理侧的优化尤其重要。...

阿里云云栖号 2813

基于优酷业务特色的跨平台技术 | GaiaX 开源解读

GaiaX 跨端模板引擎,是在阿里优酷、淘票票、大麦内广泛使用的 Native 动态化方案,本系列文章《GaiaX 开源解读》,将带大家看看过去三年GaiaX的发展过程。

qq_32198115的博客 1395

优酷全自研跨平台动态模板引擎重磅开源啦!

动态模板引擎大大提升了优酷的线上用户体验,同时也大大减少了研发门槛。为了和大家交流以及让更多的人享受这一技术,优酷已经将其开源。通过和社区合作,动态模板引擎将会发展的越来越好,实现多赢。前言优酷客户端是一个多平台【Phone、Pad、OTT、MacPC】的文娱生态综合体,为了降低多端产品迭代的开发成本,并提供给用户高性能、一致的产品体验,优酷技术团队在19年底启动了跨平台...

过往记忆大数据 542

阿里开源高性能搜索引擎 Havenask - Ha3

本文会重点介绍一下阿里系的搜索引擎中间件 Havenask(内部代号Ha3),在阿里内部支持了淘宝、天猫、菜鸟、优酷、高德、饿了么等在内的阿里搜索业务。Ha3 支持千亿级别数据实时检索、百万qps查询,百万TPS高时效性写入保障,毫秒级查询延迟和数据更新。开源地址:http://github.com/alibaba/havenask。

小田的专栏 5976

10 年磨一剑,阿里开源自研搜索引擎 Havenask!

信息化时代,搜索引擎是很多兵家必争之地。这一场的角逐也从传统的互联网领域逐渐拓展到了分布式系统之上。近日,阿里重磅开源了自研的搜索引擎 Havenask(https://github.com/alibaba/havenask),它也在今年双 11 活动中大展身手,支持了淘宝、天猫、菜鸟、优酷在内整个阿里的搜索业务,旨在为用户提供高性能、低成本、易用的搜索服务。

优快云资讯 5260

FreeMarker模板引擎:开发指南与实战手册

本文还有配套的精品资源,点击获取 简介:FreeMarker是一个开源的模板引擎,主要用于生成动态文本内容,特别适合Java环境下的Web应用开发。它支持与Spring MVC等框架集成,通过分离业务逻辑和视图层,提高开发效率。本文详细介绍FreeMarker的核心概念、语法、Web集成、性能优化以及与其他技术的结合。学习FreeMarker将帮助开发者利用这一工具快速、安...

weixin_42509507的博客 1503

工业金属表面缺陷检测:4种光学成像方案(明/暗/漫/背光)选型与实测对比

本文深入探讨工业金属表面缺陷检测中的4种光学成像方案(明/暗/漫/背光),详细解析其物理原理、适用场景及实测效果。通过对比不同照明方案在铝合金轮毂、不锈钢餐具等实际工业场景中的表现,提供科学的选型决策树,帮助提升缺陷检出率至99%以上,为计算机视觉在工业质检领域的应用提供实用指南。

weixin_33624741的博客 388

优酷播控实践:基于规则引擎的投放管控模型

简介: 我们在很多场景下需要规则引擎将规则运算和业务解耦,但规则引擎不是银弹。如果规则很简单,或者变化频次非常低那么使用 if-else 可能是最行之有效的实现方式,引入规则引擎反而增加维护成本。需要根据具体的业务形态选择是否使用规则引擎,以及要是什么样的规则引擎。作者| 阿里文娱高级开发工程师 王士欣 一、规则引擎介绍 1. 为什么需要规则引擎 在很多企业的业务系统中,经常会有大量的业务规则配置,而且随着企业管理者的决策变 化,这些业务规则也会随之发生更改。例如,通信运营商的优惠活动:1)用户

阿里云开发者 1743

MPU6050运动中断唤醒STM32低功耗休眠模式实战

本文详细介绍了如何使用MPU6050运动中断唤醒STM32低功耗休眠模式的实战方案。通过配置MPU6050的运动检测中断作为STM32的唤醒源,实现设备在静止时进入低功耗Stop模式,运动时快速唤醒,大幅延长电池续航。涵盖硬件连接、软件配置、参数调试等关键步骤,并提供实际应用案例和优化建议。

rgv23456789的博客 703

太强了!阿里开源自研高性能核心搜索引擎Havenask

编辑 | Tina近期,阿里开源了自研的大规模分布式搜索引擎 Havenask(内部代号 HA3)。Havenask 是阿里巴巴内部广泛使用的大规模分布式检索系统,支持了淘宝、天猫、菜鸟、优酷、高德、饿了么等在内整个阿里的搜索业务,是过去十多年阿里在电商领域积累下来的核心竞争力产品。大数据时代,数据检索是必备的基础能力。Havenask 支持千亿级别数据实时检索、百万 QPS 查询,百万 TPS ...

HollisChuang's Blog 1755

Windows下CMake的下载与安装详解

目录一、CMake介绍二、CMake的下载与安装 一、CMake介绍 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。它能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。 二、CMake的下载与安装 CMake下载链接:https://cmake.org/download/。 下载最新稳定版即可(Latest Release): 下载完成后,单击“Next”按钮,在下图中勾选“I acce

Wendy的博客 8万+

ArcGIS+PLUS+InVEST三件套实战:从零搞定土地利用变化与碳储量预测(附完整数据包)

本文详细介绍了如何整合ArcGIS、PLUS模型和InVEST模型,构建土地利用变化与碳储量预测的完整研究流水线。通过多情景模拟和生态系统服务评估,提供从数据准备到结果验证的实战指南,助力研究者高效完成生态评估项目。

weixin_30399821的博客 543

优酷视频元素内容召回系统:多级多模态引擎探索

DataFunCon线上大会,火热报名中~点击图片了解详情分享嘉宾:崇懿 阿里文娱 技术专家编辑整理:李沛欣内容来源:阿里文娱技术出品平台:DataFunTalk导读:多级多模态引擎是为...

abcdefg90876的博客 621

UCIe物理层 —— 逻辑协议 (2)

本章开始主要介绍UCIe协议第四章,物理层逻辑定义和规范。如其他的通信协议一样,接口的物理层包含两个部分,逻辑子层和电气子层。其中逻辑层主要负责:1.定义接口信号和时序2. 定义发送端如何将上层数据分发到各个物理通道以及接收端如何把从各个通道收到的数据恢复成byte stream(Flit)。3. Broken Lane的repair和remap。4. 链路初始化,训练(training)和电源状态管理/切换。5. 扰码Scrambling和training sequence的产生。

m0_47581558的博客 1478

开源|优酷动态模板研发体系为分发提效30%

动态模板技术方案将客户端研发链路实现了串联,通过完备的工具化支撑体系,让开发者可以高效完成组件由原始设计稿到可运行代码的最短通路,本文将对研发体系中涉及到的核心模块就行介绍,希望对技术社区及广大开发者有一定帮助。

数据库技术 311

A B C三个气象站的小波分析结果解读

在小波分析的过程中,信号的不同频率分量会在不同的尺度上显现,而纵轴上的数值表示信号在相应尺度上的强度或能量。2. **小波方差的横轴(水平轴)**:横轴上的尺度表示用于分析的小波函数的尺度。1. **共同趋势:** 在所有三个点的小波方差图中,随着尺度的增加,方差逐渐增大,尤其是在较大的时间尺度上。3. **尺度30的特殊性:** 在所有点的小波方差图中,尺度30似乎是一个特殊的点,对应着一个较长的时间尺度上的波动或变化。2. **方差的大小:** 方差的大小反映了在相应尺度下信号的波动强度。

weixin_44259522的博客 859

系规备考论文:论IT服务规划设计

系规备考论文:论IT服务规划设计

liuxu324的博客 1144

基于 Flutter 的 Web 渲染引擎「北海」正式开源!

简介:阿里巴巴历时 3 年自研开发的 Web 渲染引擎北海(英文名:Kraken)正式开源,致力打造易扩展,跨平台,高性能的渲染引擎,并已在优酷、大麦、天猫等业务场景中使用。 作者 | 染陌 来源 | 阿里技术公众号 阿里巴巴历时 3 年自研开发的 Web 渲染引擎北海(英文名:Kraken)正式开源,致力打造易扩展,跨平台,高性能的渲染引擎,并已在优酷、大麦、天猫等业务场景中使用。 官网:https://openkraken.com Github:https://github.com/open.

阿里云云栖号 1670

MIT液态神经网络(LNN)深度研究:原理、应用与未来

液态神经网络(Liquid Neural Networks, LNNs)代表了人工智能领域,特别是神经网络架构设计中的一次范式转移。它从根本上挑战了传统深度学习模型依赖大规模参数和静态架构的惯例,转而寻求一种更为动态、高效且受生物神经系统启发的计算范式。LNN的核心创新在于其将神经网络的计算过程从离散的、基于时间步的更新,转变为连续的、由微分方程驱动的动态系统演化。这种转变不仅赋予了模型前所未有的适应性和鲁棒性,还使其在处理复杂的时序数据和因果推断任务时表现出色。本章节将深入剖析LNN的技术原理,从其核心的

步子哥的博客 2590
上一篇: 推荐5个超级实用的 Python 模块,不知道就out啦!
下一篇: 王心凌的「爱你」,我们用Python跳起来!
菜鸟学Python
博客等级 码龄9年 8062粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值