发布日期:2025-10-08 11:25浏览次数:
昨儿个加班改bug改得头昏眼花,突然瞅见项目里有个列表滑起来卡成ppt。特么新买的iPhone 15 Pro都带不动,这还了得?立马打开电脑开整,顺便把踩坑过程记一记。
戳开Xcode跑了下性能监测,好家伙!滚动时帧数直接掉到40以下。按住Cell来回滑动,Instrument里那些红的黄的竖条跟窜天猴似的往上蹦。扒拉代码发现Cell里堆了六七个圆角视图,图片加载还是同步的——这能不卡?
赶紧动手:大刀砍图层。原来每个头像框套着两层圆角容器,直接合并成单个UIImageView。再打开离屏渲染开关,代码写成这样:
* = 头像框高度/2* = true
* = true
改完顺手把图片加载扔进后台线程,主线程只更新UI。重新编译完滑动列表——嚯!跟抹了润滑油似的丝滑!
刚爽了没两分钟,测试妹子微信轰炸过来:”你这商品详情页图片咋反复横跳?“跑过去一看,每次下拉刷新图片都先变空白再加载,跟抽风似的。
一拍脑门想起来:原生缓存压根没开!火速翻出三年前写的网络工具类,往图片请求里塞缓存策略:
顺手把过期时间设成一周,再测试时图片加载直接闪现——加载速度比隔壁老王抢超市打折鸡蛋还快!
早上地铁上想测下改动效果,结果点开App盯着启动页看了十秒广告——这破软件比我上班还不想开工?
打开启动流程排查:好嘛冷启动时挤了七个任务:什么读取用户标签、拉推送配置、初始化埋点...全特么堵在主线程排队。直接动手:
改完重装测试:启动时间直接从8.2秒干到2.3秒!比我从被窝爬起来关闹钟的速度快多了!
下午用着用着手机发烫,一看内存吃了我1.2G。查了下发现商品详情页的4K高清图加载后从来没释放,二十多个页面堆在内存里开养老院!
抓着ViewController生命周期一顿改:
override func viewDidDisappear {
高清大图 = nil
顺手在内存警告通知里加了个清缓存,跟保洁阿姨大扫除似的把不用的对象全踹走。改完再测——内存稳定在500M左右,手机后背也不烫手了!
折腾一天到晚上十点,抬头看办公室就剩我和保洁阿姨。测试妹子发来验收结果:”这回更新包才35M,比上回180M强多!“ 我抱着半凉的盒饭猛扒两口——这波优化,值了!