写点什么

AirBnb 开源动画引擎 Lottie:采用 Core Animation 提高性能

  • 2022-12-29
    北京
  • 本文字数:941 字

    阅读完需:约 3 分钟

AirBnb开源动画引擎Lottie:采用Core Animation提高性能

AirBnb宣布了其开源矢量动画引擎 Lottie 的第四次主要迭代。AirBnb iOS 工程师 Cal Stephens 表示,由于采用了核心动画(Core Animation),Lottie 4.0 提供了显著的性能改进,并降低了 CPU 负载。

 

Lottie 是一个用于 iOS 和 Android 的库,可以实时渲染 After Effects 动画。Lottie 中的动画是通过 JSON 文件描述的,可以使用Bodymovin插件从 After Effects 中导出。Lottie 将对 JSON 进行解码,并访问渲染动画所需的所有资源,就像它只是应用程序中的另一个静态资源一样。

 

在 Lottie 4.0 中,AirBnb 放弃了使用CADisplayLink在主 CPU 线程上制作图形动画的原始方法:

 

每帧一次,Lottie 将在主线程上执行代码,以推进动画的进度并重新渲染其内容。这意味着动画在播放时将消耗 5–20%以上的 CPU,从而减少了用于应用程序其余部分的可用 CPU 周期。

 

根据 Stephens 的说法,这使得 Lottie 在更复杂的情况下无法维持所需的帧速并且开始丢弃帧会变得相对常见。此外,当主线程忙于一些昂贵的任务时,动画可能会出现一些抖动。

 

切换到核心动画(Core Animation)意味着动画被卸载到 GPU 上,这有三个好处:利用硬件加速,减少 CPU 负载,并在 CPU 繁忙时提高帧速。

 

例如,Airbnb 应用程序在首次启动时显示 Lottie 动画。我们在这里进行了一项实验,发现切换到新的渲染引擎可以缩短应用程序的总启动时间,同时还可以提高启动动画的帧速和用户体验。

 

除了新的基于核心动画(Core Animation)的渲染引擎外,Lottie 4.0 还带来了一种新的文件格式,它使用压缩将一个或多个 Lottie JSON 文件及其相关资源聚合到一个文件中。JSON 解码管道已被重写,速度提高了约 2 倍。

 

Lottie 最初是用 Objective-C 编写的,两年前在 Swift 中被完全重写,最终发布了第 3 版。你可以从GitHub repo或使用包管理器(如 CocoaPods、Carthage 或 Swift 包管理器)安装它。

 

作者简介:

Sergio De Simone 是一名软件工程师。Sergio 已经在一系列不同的项目和公司担任软件工程师超过 15 年,其中包括西门子、惠普和小型创业公司等不同的工作环境。在过去的几年里,他一直专注于移动平台和相关技术的开发。他目前就职于 BigML,Inc.,负责 iOS 和 OS X 的开发。

 

原文链接:

https://www.infoq.com/news/2022/12/airbnb-lottie-4/


相关阅读:

React 源码解读之 React Fiber

虚拟角色赛道的新“闯入者”:3D 引擎 Cocos 和它的新故事

2022-12-29 08:009805

评论

发布
暂无评论
发现更多内容

几种2022年流行的跨端技术方案的比较

Geek_99967b

小程序

试着换个角度理解低代码平台设计的本质

Geek_z9ygea

Vue 前端 React 低代码平台

手把手带你体验Python实现人脸识别

迷彩

人脸识别 7月月更

zookeeper-集群和zab协议

zarmnosaj

7月月更

汽车电子行业开发者的内功心法:汽车软件开发V模型(瀑布模型)

不脱发的程序猿

嵌入式开发 瀑布模型 汽车软件开发 V模型

没有了可用Task slot,Flink新增任务会怎样?

程序员欣宸

Java flink 7月月更

Envoy监听管理

阿泽🧸

envoy 7月月更

使用Flutter开发小程序+App)的一种组合思路

Geek_99967b

小程序

jQuery 请求

Jason199

jquery js post GET 7月月更

python小知识-什么是上下文管理

AIWeker

Python python小知识 7月月更

C#入门系列(二十五) -- 接口

陈言必行

7月月更

MySQL的锁(一)

技术小生

MySQL 7月月更

RISC-V Linux 内核剖析 会议记录

贾献华

7月月更

LeetCode-数组中数字出现的次数(单身狗问题)

芒果酱

c++ C语言 数据结构算法 Leet Code 7月月更

QT|QLabel显示多行文本过多后显示省略号

中国好公民st

qt 7月月更

STM32+DHT11读取温湿度数据显示

DS小龙哥

7月月更

Kubernetes网络插件详解- Flannel篇

巨子嘉

云计算 容器 云原生

一篇文章带你快速学会Flex布局

bo

CSS 前端 Flex 7月月更

VLAN再见,我选择用QinQ!1000字带你详细了解QinQ技术

wljslmz

VLAN 网络技术 7月月更 QinQ

Java核心技术之泛型详解

小明Java问道之路

Java 后端 泛型 Java泛型 7月月更

系统刷JavaScripit 构建前端体系(语法篇)

程序员海军

JavaScript 7月月更

Flink实战:消费Wikipedia实时消息

程序员欣宸

Java flink 7月月更

【MySql 实战】高度聚合的数据项拆分为多行多列

安逸的咸鱼

MySQL 实战 7月月更

王者荣耀商城异地多活架构

Pengfei

读书笔记之数据密集型应用的可维护性

宇宙之一粟

设计数据密集型应用 7月月更

分享 15 个 Vue3 全家桶开发的避坑经验

Geek_z9ygea

Vue Vue3

qt 实现日历美化

小肉球

qt 7月月更

Prometheus 发布 LTS 长期支持版本啦

耳东@Erdong

release Prometheus 7月月更

数据平台的发展历程

奔向架构师

大数据 7月月更

【愚公系列】2022年7月 Go教学课程 013-常量、指针

愚公搬代码

7月月更

Java中的设计模式

Java学术趴

7月日更

AirBnb开源动画引擎Lottie:采用Core Animation提高性能_语言 & 开发_Sergio De Simone_InfoQ精选文章