Flutter Skia sksl 着色器预热(小记)
纯Flutter项目开发时间大概3年多了,基本都是构建在Android和IOS平台的应用程序,至于Flutter性能方面,Android平台的体验和流畅度确实优于IOS,再加上安卓平台可以根据Skia着色器预热编译,使得页面导航、动画、裁剪等触发时更加流畅。
虽然IOS也可以缓存着色器数据,但是和安卓还是有很大不同的,着色器主要还是为了解决应用程序首次运行的编译卡顿,对于安卓,App从安装到首次打开,着色器预热编译数据就已经起到了很好的助攻效果,但是IOS则是每次打开App时都需要从0开始加载着色器数据,这就导致IOS在Flutter性能方面不如Android平台。
所以针对于IOS平台,除了着色器预热,还可以选择延迟加载的方式,出现卡顿的很大原因是Widget在绘制过程中更新了UI, 例如,页面导航时,请求服务器数据或者其他耗时的操作,可以在页面导航结束后再执行,例如Future.delayed 等等。
怀疑是着色器编译卡顿时,可以通过命令运行app,查看Timeline Raster耗时
- flutter run --trace-skia --profile
收集着色器数据
- flutter run --cache-sksl --profile