01#
写在前面
随着HarmonyOS NEXT的正式发布,越来越多的应用开始拥抱鸿蒙原生开发。作为国内领先的视频平台,爱奇艺也在积极布局鸿蒙生态,致力于为用户带来更流畅、更优质的观影体验。
在移动应用场景中,图片加载是影响用户体验的关键环节。海报、焦点图、活动图、角标……这些看似普通的图片资源,却承载着用户的第一印象。如何在鸿蒙平台上实现极致的图片加载体验,成为爱奇艺技术团队面临的重要课题。
本文将分享爱奇艺在鸿蒙原生应用开发中的技术实践——基于仓颉语言自研高性能图片库的全过程,包括技术选型思考、架构设计、性能优化以及实践成果。
02#
挑战:鸿蒙图片加载的痛点
2.1 ArkTS的性能瓶颈:
在鸿蒙应用开发中,ArkTS是官方推荐的主要开发语言。然而在实际开发过程中,我们发现ArkTS在处理图片密集型任务时存在一些性能瓶颈:
单线程语言模型的局限:ArkTS基于单线程事件循环模型,当遇到复杂的图片解码、处理任务时,容易造成主线程阻塞,引发UI卡顿。特别是在列表滑动、快速翻页等场景下,用户体验受到影响。
多线程使用成本高:虽然ArkTS支持Worker和TaskPool实现多线程,但开发者需要手动处理内存隔离、线程间通信、参数序列化等问题。Worker数量和TaskPool执行时间受限,需要根据任务类型进行权衡,开发和维护成本较高。
2.2 AVIF格式的迫切需求:
爱奇艺作为视频平台,对带宽和存储成本高度敏感。为了在保证画质的同时降低传输成本,爱奇艺线上图片资源已广泛采用AVIF格式。
AVIF是由开放媒体联盟推出的新一代图片格式,相比传统格式具有显著优势:
更高压缩效率:在相同视觉质量下,AVIF 相比 JPEG 通常可减少约 40–50% 的文件体积,相比 WebP 也可进一步降低约 20–30%,显著节省带宽与存储空间。
更丰富的图像质量能力:支持 10-bit / 12-bit 色深、4:4:4 色度采样及更好的渐变过渡,减少色带和压缩伪影,在复杂纹理和渐变场景下表现更稳定。
HDR与现代特性支持:原生支持 HDR、广色域(如 BT.2020)、透明通道(Alpha)以及动画帧,适合高质量图片与新一代显示设备。
然而,当前鸿蒙系统自带的Image组件尚未支持AVIF格式,这成为爱奇艺鸿蒙原生应用开发的一大痛点。如何在鸿蒙端实现高效稳定的AVIF加载,成为亟待解决的核心诉求。
2.3 图片库密集型任务的特性:
图片库是典型的计算密集型+IO密集型应用,主要包含三类任务:
任务类型 | 特点 | 挑战 |
图片加载 | 频繁网络请求与磁盘I/O | 并发控制、超时管理、缓存策略 |
图片解码 | 高计算量和内存占用 | CPU密集型、需要异步处理 |
图片处理 | 缩放、裁剪、滤镜等 | 高频耗时任务、需要GPU加速 |
这些任务对语言的并发能力、内存管理、性能表现都提出了较高要求。
03#
选型:为什么是仓颉?
面对上述挑战,爱奇艺技术团队进行了深入的技术调研,最终选择了仓颉(Cangjie)语言作为图片库的核心开发语言。
3.1 仓颉语言简介:
仓颉是华为自研的面向全场景智能的新一代编程语言,专为鸿蒙生态打造。它融合了多种现代编程语言的优点,具备以下核心特性:
静态强类型与内存安全
仓颉采用静态类型系统,在编译期即可发现大部分类型错误,减少运行时异常。同时,仓颉内置内存安全机制,通过所有权和生命周期管理,有效避免内存泄漏、野指针等问题,让开发者更专注于业务逻辑。
高效并发模型
仓颉提供了用户态线程模型,轻量级执行实体拥有独立上下文,却能共享内存空间,兼顾隔离与高效。编译器与运行时系统对并发任务进行了专项优化,结合轻量线程和并发对象库,实现更佳的资源管理与调度效率。
跨语言互操作
仓颉语言提供了强大的跨语言互操作能力,支持与C语言和ArkTS的无缝集成。这意味着:
可以充分利用现有的C语言图片解码库(如libavif、libwebp等)
可以与ArkTS UI层进行双向通信
可以复用现有的鸿蒙UI组件和生命周期机制
平滑迁移
对于已有ArkTS代码的项目,仓颉支持渐进式迁移。开发者可以选择性能关键模块使用仓颉重写,保持其他模块不变,降低迁移风险和成本。
3.2 支持ArkUI组件:
仓颉可以直接支持和创建ArkUI组件,这意味着图片库可以无缝集成到鸿蒙的声明式UI框架中:
这种设计让业务层可以像使用普通组件一样使用仓颉图片库,无需关心底层实现细节。
04#
架构设计:仓颉图片库的技术方案
4.1 整体架构:
爱奇艺仓颉图片库采用分层架构设计,核心组件包括:
4.2 仓颉/ArkTS混合架构:
为了兼顾开发效率和性能,我们采用了仓颉/ArkTS混合架构:
ArkTS层:负责UI展示、生命周期管理、业务逻辑
仓颉层:负责图片加载、解码、缓存、任务调度等核心功能
C语言层:复用成熟的编解码库(libavif、FFmpeg等)
这种架构的优势在于:
UI层保持ArkTS开发效率,无需切换语言
核心性能模块使用仓颉,发挥语言性能优势
复用成熟C库,避免重复造轮子
4.3 图片处理流程:
图片库采用「缓存优先、网络兜底」的三级缓存策略(内存LruCache → 磁盘缓存 → 网络请求),结合静态图与动图的差异化解码方案。加载流程从主线程 loadImage 通过 spawn 触发异步任务,经缓存层快速响应后进入解码处理:静态图直接解码为单帧 PixelMap,动图经 avif 解码和帧管理后输出多帧 PixelMap 序列,最终所有图片统一转换为PixelMap 格式,通过 launch 机制触发 ArkUI Image 组件渲染展示。这种分层设计让 UI 层无需关心图片来源,兼顾开发效率与极致性能。
4.4 动图解码优化:
动图解码是图片库的技术难点之一,我们针对仓颉语言特性进行了专项优化:
帧级锁机制:
按帧串行处理,确保帧顺序,防止画面错乱
使用仓颉的并发原语实现高效的锁机制
同步机制:
保证解码后的帧数据正确及时传递至渲染线程
平衡解码速度与渲染帧率,避免内存堆积
任务队列管理:
高效调度多个解码任务,避免线程阻塞
支持动图优先级管理,优先保证可见区域动图流畅播放
05#
性能优化:魔鬼在细节
5.1 关键优化点:
互操作回调优化
通过互操作回调实现ArkTS生命周期事件与仓颉端的衔接,如aboutToReuse、aboutToRecycle等。在组件复用和回收时,及时释放仓颉侧资源,避免内存泄漏。
内存复制优化
基于memcpy高效完成C侧解析buffer的内存复制与传递。减少不必要的数据拷贝,降低内存带宽压力。
标准库优化
利用仓颉标准库优化网络请求与文件操作性能:
使用仓颉异步I/O接口,提升并发处理能力
复用连接池,减少TCP握手开销
批量读写磁盘,减少系统调用次数
线程调度优化
减少不必要的线程切换,内存缓存等轻量场景直接在主线程完成处理。仅在真正需要异步执行的任务(如网络请求、图片解码)才使用后台线程。
5.2 内存优化成果:
通过仓颉的内存管理优势,我们在内存占用方面取得了显著优化:
内存峰值降低60%+:相比纯ArkTS方案,仓颉图片库的内存峰值大幅降低
更稳定的内存曲线:避免GC抖动带来的性能波动
更可控的资源释放:利用所有权机制,确保资源及时释放
06#
实践成果:数据说话
6.1 性能提升:
我们使用12张不同类型图片进行加载耗时对比测试(单位:毫秒):
图片类型 | 仓颉实现 | ArkTS实现 | 优化幅度 |
网络静图 | 231 | 305 | -24% |
硬盘静图 | 63 | 122 | -48% |
内存静图 | 26 | 50 | -48% |
网络动图 | 406 | 1648 | -75% |
硬盘动图 | 122 | 134 | -9% |
内存动图 | 32 | 38 | -16% |
核心结论:
整体加载耗时显著降低,特别是网络动图场景优化幅度达75%
自定义程度提升,可针对业务场景进行深度优化
编码耗时分布更均衡,避免单一任务阻塞
6.2 用户体验提升:
在实际产品场景中,仓颉图片库带来了明显的用户体验提升:
首屏加载速度提升:首页海报加载更快,用户进入即可看到内容
列表滑动更流畅:长列表滑动时图片加载无卡顿
动图播放更顺滑:动图帧率稳定,无掉帧现象
内存占用降低:应用运行更稳定,减少OOM风险
07#
未来展望
仓颉图片库的建设是一个持续演进的过程,我们规划了以下发展方向:
7.1 功能补齐:
借助仓颉语言的高性能与并发特性,持续完善图片库能力:
更多格式支持:更多图片格式解码支持
更丰富的图片处理:滤镜、水印、智能裁剪等
内存优化:更精细的缓存策略,支持图片预加载与智能回收
7.2 跨平台拓展:
利用仓颉的跨平台优势,将图片库能力拓展至更多终端与平台:
多端复用:一套代码,支持鸿蒙手机、平板、车机、TV等多终端
跨平台支持:探索仓颉在其他平台的应用可能性
一次开发,多端复用:降低多平台维护成本
7.3 生态共建:
我们希望将仓颉图片库的实践经验回馈社区:
开源计划:逐步开源核心模块,与社区共建
最佳实践分享:通过技术文章、演讲等形式分享经验
仓颉生态共建:与仓颉技术团队深度合作,推动语言生态发展
08#
写在最后
仓颉图片库的建设是爱奇艺在鸿蒙生态探索中的一个缩影。从最初的技术调研,到架构设计,再到性能优化,每一步都凝聚着团队的心血。
在这个过程中,我们深刻体会到仓颉语言在系统级应用开发中的优势:
内存安全让开发更省心
高效并发让性能更出色
跨语言互操作让生态更开放
我们相信,随着仓颉语言的不断成熟和鸿蒙生态的持续发展,会有越来越多的开发者加入到这个生态中来。爱奇艺也将继续深耕鸿蒙平台,为用户带来更优质的视听体验。
特别感谢仓颉技术团队在项目过程中提供的支持!
也许你还想看
零侵入、低成本!轻松为老系统注入 AI 灵魂
治愈 Cursor AI 编程的 “幻觉”?用它就够了!
速看如何跑赢碎片化时代的流量竞速
在爱奇艺做研发,用AI写代码是什么体验?
创新高! 2025年爱奇艺申请发明专利880件 过半是AI相关专利