一个 GIF 引起的内存爆炸

2026-04-29 10:042阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

自从开始做 Dexo APP 以来,我在浏览帖子时会偶尔遇到掉帧、卡顿等问题,体验并不理想。让 AI 尝试优化几次,收效甚微。

昨天晚上,我决定主动介入,用很多年前残留的开发经验,尝试让 AI 实现了一版优化方案。

优化方案完成后,我在测试站测试了几个帖子,觉得效果还可以,就准备在 L 站进行最终测试。

然而,当我在 L 站随机打开一个帖子之后,随手一滑,APP 帧率居然有一瞬间掉到了 20 多,有明显可感知的卡顿。

测试多次以后,发现是必现问题,于是我就开启了此次解惑之旅。

解惑过程

简单分析

  • 对比其它帖子 — 没有发现异常,滑动效果达到预期
  • 检查帖子内容 — 特殊的地方只是比其它帖子多几张图片,文字内容较长,还有二楼有一个长图,但 APP 加载的都是缩略图,问题应该不大
  • AI 尝试解决 — 情况告诉 AI 后,它写了一堆代码,砍手又砍脚的加限制,没起作用

调试对比

  • 调试模式查看 — 进入这个帖子后,随手一滑, APP 占用内存暴涨
  • 分析内存占用 — 录制进入该帖子的 APP 内存状态, 结果发现占用内存最多的是 GIF 解码
  • 定位具体问题 — 用浏览器打开帖子,搜索 GIF,GIF 大多来自用户头像右下角的资质图标
  • 简单修复对比 — 隐藏资质图标,表现正常;显示资质图标但不再播放GIF,表现正常。

最终修复

通过以上操作,最终确定了是用户资质图标导致的异常,奇怪的是,只有这个帖子有问题。

于是我开始检查用户资质图标,下载该贴 2 楼用户的资质图标后查看,发现该图标分辨率是 512*512 ,且足足有 144 帧。

我原以为用户资质图标展示区域那么小,图片也应该非常小。因此我在使用的时候没有加任何限制,直接播放了 GIF,最终导致内存暴涨,滑动卡顿。万万没想到小小的图标下面,藏了个大。

最终在播放 GIF 时设置了缓冲区最大限制,问题得以解决。

本次优化将于今天更新至 TF,可能会带来其它未知问题,可通过提 issues 或者回复到下面这个帖子反馈

[开源推广] Dexo -支持 L 站的原生 iOS APP ,现已发布至 TestFlight 开发调优
本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容: 我的帖子已经打上 开源推广 标签: 是 我的开源项目完整开源,无未开源部分: 是 我的开源项目已链接认可 LINUX DO 社区: 是 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是 以上选择我承诺是永久有效的,接受社区和佬友监督: 是 以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出 写在前面 …
网友解答:
--【壹】--:

是的,我用的播放 gif 的库如果不配置,默认解码所有帧。
这会导致滚动的时候卡那么一下,后面就没事了。内存暴增其实系统会通知,也会自动清缓存,但总之不好就是了。
只是没想到有佬友会在头像右下角不起眼的位置放这么大一个 gif.


--【贰】--:

佬,考虑App里加个关注功能吗,还有浏览历史,以及搜索里面搜出来的内容点进去不是帖子,是别人回话,我点不到那个回话的主贴


--【叁】--:

[1]

image1060×1252 109 KB
算下来如果贴着极限的话?大概一层楼可以有1.4K图片说是
虽然说有单张图片4MB的限制的说…
但是烘焙的json可以直接起飞了说是


  1. HGaP2oYbQAA4k3s1183×1183 197 KB ↩︎


--【肆】--: Heykode:

考虑App里加个关注功能吗?,还有浏览历史

关注 这个是 L 站特有的功能,不太好调试,后面再抓包试着加一下
浏览历史不知道 app 读取的能不能获取到,因为我还没有上报看贴子的记录

Heykode:

搜索里面搜出来的内容点进去不是帖子,是别人回话,我点不到那个回话的主贴

搜索界面右上方最后一个选项你选择 话题 就行.
如果搜索到是帖子,点进去后下拉也能加载到主贴,可以试试 # 跳转到 1 楼.


--【伍】--:

播放几个 gif 不至于卡顿 + 巨吃内存吧。。

除非加载那一瞬间,要解码完所有帧,并缓存在内存里?

那碰到这种 3200 帧《贪吃蛇 GIF》,会不会也跟着爆炸了。。

截屏2026-04-24 23.10.382120×1254 99.1 KB


--【陆】--:

还是边播边解码好,内存 & CPU 压力都小。。

否则碰到个 3200 帧《贪吃蛇》,甚至 20000 帧《哪吒 2 片段》,机器就要炸掉了。。

截屏2026-04-24 23.45.551968×928 189 KB


--【柒】--:

发在帖子里的图片一般显示的都是缩略图,而且同屏幕展示不了这么多,所以最多就是内存占用多一些,不显示的时候清理掉就好.

我说的是用户头像右下角那个 gif 图标,这个是没有压缩的,本来以为是有尺寸和帧数限制,我就没做限制.
结果帖子里恰好有个佬友的图标是 512*512 144 帧的gif,不加限制全部解码然后播放会造成一下卡顿和内存暴增.

问题描述:

自从开始做 Dexo APP 以来,我在浏览帖子时会偶尔遇到掉帧、卡顿等问题,体验并不理想。让 AI 尝试优化几次,收效甚微。

昨天晚上,我决定主动介入,用很多年前残留的开发经验,尝试让 AI 实现了一版优化方案。

优化方案完成后,我在测试站测试了几个帖子,觉得效果还可以,就准备在 L 站进行最终测试。

然而,当我在 L 站随机打开一个帖子之后,随手一滑,APP 帧率居然有一瞬间掉到了 20 多,有明显可感知的卡顿。

测试多次以后,发现是必现问题,于是我就开启了此次解惑之旅。

解惑过程

简单分析

  • 对比其它帖子 — 没有发现异常,滑动效果达到预期
  • 检查帖子内容 — 特殊的地方只是比其它帖子多几张图片,文字内容较长,还有二楼有一个长图,但 APP 加载的都是缩略图,问题应该不大
  • AI 尝试解决 — 情况告诉 AI 后,它写了一堆代码,砍手又砍脚的加限制,没起作用

调试对比

  • 调试模式查看 — 进入这个帖子后,随手一滑, APP 占用内存暴涨
  • 分析内存占用 — 录制进入该帖子的 APP 内存状态, 结果发现占用内存最多的是 GIF 解码
  • 定位具体问题 — 用浏览器打开帖子,搜索 GIF,GIF 大多来自用户头像右下角的资质图标
  • 简单修复对比 — 隐藏资质图标,表现正常;显示资质图标但不再播放GIF,表现正常。

最终修复

通过以上操作,最终确定了是用户资质图标导致的异常,奇怪的是,只有这个帖子有问题。

于是我开始检查用户资质图标,下载该贴 2 楼用户的资质图标后查看,发现该图标分辨率是 512*512 ,且足足有 144 帧。

我原以为用户资质图标展示区域那么小,图片也应该非常小。因此我在使用的时候没有加任何限制,直接播放了 GIF,最终导致内存暴涨,滑动卡顿。万万没想到小小的图标下面,藏了个大。

最终在播放 GIF 时设置了缓冲区最大限制,问题得以解决。

本次优化将于今天更新至 TF,可能会带来其它未知问题,可通过提 issues 或者回复到下面这个帖子反馈

[开源推广] Dexo -支持 L 站的原生 iOS APP ,现已发布至 TestFlight 开发调优
本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容: 我的帖子已经打上 开源推广 标签: 是 我的开源项目完整开源,无未开源部分: 是 我的开源项目已链接认可 LINUX DO 社区: 是 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是 以上选择我承诺是永久有效的,接受社区和佬友监督: 是 以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出 写在前面 …
网友解答:
--【壹】--:

是的,我用的播放 gif 的库如果不配置,默认解码所有帧。
这会导致滚动的时候卡那么一下,后面就没事了。内存暴增其实系统会通知,也会自动清缓存,但总之不好就是了。
只是没想到有佬友会在头像右下角不起眼的位置放这么大一个 gif.


--【贰】--:

佬,考虑App里加个关注功能吗,还有浏览历史,以及搜索里面搜出来的内容点进去不是帖子,是别人回话,我点不到那个回话的主贴


--【叁】--:

[1]

image1060×1252 109 KB
算下来如果贴着极限的话?大概一层楼可以有1.4K图片说是
虽然说有单张图片4MB的限制的说…
但是烘焙的json可以直接起飞了说是


  1. HGaP2oYbQAA4k3s1183×1183 197 KB ↩︎


--【肆】--: Heykode:

考虑App里加个关注功能吗?,还有浏览历史

关注 这个是 L 站特有的功能,不太好调试,后面再抓包试着加一下
浏览历史不知道 app 读取的能不能获取到,因为我还没有上报看贴子的记录

Heykode:

搜索里面搜出来的内容点进去不是帖子,是别人回话,我点不到那个回话的主贴

搜索界面右上方最后一个选项你选择 话题 就行.
如果搜索到是帖子,点进去后下拉也能加载到主贴,可以试试 # 跳转到 1 楼.


--【伍】--:

播放几个 gif 不至于卡顿 + 巨吃内存吧。。

除非加载那一瞬间,要解码完所有帧,并缓存在内存里?

那碰到这种 3200 帧《贪吃蛇 GIF》,会不会也跟着爆炸了。。

截屏2026-04-24 23.10.382120×1254 99.1 KB


--【陆】--:

还是边播边解码好,内存 & CPU 压力都小。。

否则碰到个 3200 帧《贪吃蛇》,甚至 20000 帧《哪吒 2 片段》,机器就要炸掉了。。

截屏2026-04-24 23.45.551968×928 189 KB


--【柒】--:

发在帖子里的图片一般显示的都是缩略图,而且同屏幕展示不了这么多,所以最多就是内存占用多一些,不显示的时候清理掉就好.

我说的是用户头像右下角那个 gif 图标,这个是没有压缩的,本来以为是有尺寸和帧数限制,我就没做限制.
结果帖子里恰好有个佬友的图标是 512*512 144 帧的gif,不加限制全部解码然后播放会造成一下卡顿和内存暴增.