You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提升集合栈视图中23个Lottie动画的加载性能?

Lottie动画加载内存&耗时优化方案

1. 降低加载时的内存峰值

  • 增加自动释放池包裹动画加载逻辑,及时释放解析JSON过程生成的临时对象,避免老旧设备短时间内无法回收大量临时内存导致溢出
  • 错开主线程赋值时机,避免一次性向主队列塞24个UI更新任务导致主线程卡顿,同时降低加载优先级避免和主线程抢计算资源
    优化后参考代码:
// 将优先级从.userInteractive下调为.userInitiated,避免抢占主线程资源
DispatchQueue.global(qos: .userInitiated).async {
    for n in 0...23 {
        autoreleasepool {
            guard let animation = Animation.named("box\(n+1)", animationCache: LRUAnimationCache.sharedCache) else {
                continue
            }
            // 每个赋值任务错开50ms,避免主线程阻塞
            DispatchQueue.main.asyncAfter(deadline: .now() + Double(n) * 0.05) {
                self.lottieCollectionViews[n].animation = animation
                // 非立即播放的动画可以待需要展示时再调用play()
            }
        }
    }
}

2. 按需加载避免资源浪费

  • 如果24个动画不是进入页面就全部需要展示,仅加载当前屏幕可见区域的动画,其余动画待用户滚动到对应位置、或者需要触发展示时再加载,可将首次加载耗时从5-7秒压缩到1秒以内,内存占用也会下降80%以上
  • 多个视图使用相同动画时,直接复用同一个Animation对象即可,不要重复加载相同的JSON文件

3. 启用Lottie官方缓存

  • Lottie自带LRUAnimationCache LRU缓存机制,已经解析过的动画会直接从缓存读取,无需重复解析JSON,多次打开同个页面时加载速度会有明显提升

4. 优化动画源文件

  • 让设计师导出动画时精简冗余图层、无效关键帧,降低动画本身的计算量
  • 将JSON格式的动画转为官方的.lottie压缩格式,体积可缩小30%以上,解析速度也更快,老旧设备上的加载耗时会进一步降低

5. 降低渲染内存开销

  • 不需要透明背景的AnimationView可将opaque属性设为true,减少渲染时的内存占用
  • 动画播放完成后如果不需要回放,可将animation属性置为nil释放内存资源

内容的提问来源于stack exchange,提问作者Benjamin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:06:05