闲鱼技术2022年度白皮书-Flutter主题-节日献礼:Flutter 图片库重磅开源!(中)

简介: 闲鱼技术2022年度白皮书-Flutter主题-节日献礼:Flutter 图片库重磅开源!

接上篇:https://developer.aliyun.com/article/1225988?spm=a2c6h.13148508.setting.15.2f394f0e7JCBdO

五、 整体架构

 

我们将两种解决方案非常优雅地结合在了一起:

 

image.png

我们抽象出了PowerImageProvider,对于external(ffi)、texture,分别生产自己的ImageInfo即可。它将通过对PowerImageLoader的调用,提供统一的加载与释放能力。

 

蓝色实线的ImageExt即为自定义的Image Widget,为texture方式透出了imageBuilder。

 

蓝色虚线ImageCacheExt即为ImageCache的扩展,仅在flutter <2.2.0版本才需要,它将提供ImageCache释放时机的回调。

 

这次,我们也设计了超强的扩展能力。除了支持网络图、本地图、flutter资源、native资源外,我们提供了自定义图片类型的通道,flutter可以传递任何自定义的参数组合给native,只要native注册对应类型loader,比如「相册」这种场景,使用方可以自定义imageType为album,native使用自己的逻辑进行加载图片。有了这个自定义通道,甚至图片滤镜都可以使用PowerImage进行展示刷新。

 

除了图片类型的扩展,渲染类型也可进行自定义。比如在上面ffi中说的,为了降低内存拷贝带来的峰值问题,使用方可以在flutter侧进行解码,当然这需要native图片库提供解码前的数据。

 

六、 数据

 

1. FFI vs Texture

 

image.png


机型:iPhone 11 Pro;

图片:300张网络图;

行为:在listView中手动滚动到底部再滚动到顶部;

native Cache:20 maxMemoryCount

flutter Cache:30MB

flutter version 2.5.3

release模式下

 

这里有两个现象:

 

FFI:186MB波动

Texture:194MB波动

 

在2.5.3版本中,Texture方案与FFI,在内存水位上差异不大,内存波动上面与flutter 1.22结论相反。

 

图中棋格图,为打开checkerboardRasterCacheImages后所展示,可以看出,FFI方案会缓存整个cell,而Texture方案,只有cell中的文字被缓存,RasterCache会使得FFI在流畅度方面会有一定优势。

 

2. 滚动流畅性分析

 

image.png


设备Android OnePlus 8t,CPU和GPU进行了锁频。

CaseGridView每行4张图片,300张图片,从上往下,再从下往上,滑动幅度从500,1000,1500,2000,2500,5轮滑动。重复20次。

方式for i in {1..20}; do flutter drive --target=test_driver/app.dart –profiledone跑数据,获取TimeLine数据并分析。

 

结论

 

UI thread耗时texture方式最好,PowerImage略好于IFImage,FFI方式波动比较大。

 

Raster thread耗时PowerImage好于IFImage。Origin原生方式好是因为对图片resize了,其他方式加载的是原图。

 

3. 更精简的代码

 

dart侧代码有较大幅度的减少,这归功于技术方案贴合flutter原生设计,我们与原生图片共用较多代码。

 

image.png

FFI方案补全了外接纹理的不足,遵循原生Image的设计规范,不仅让我们享受到ImageCache带来的统一管理,也带来了更精简的代码。

 

4. 单测

 

image.png

为了保证核心代码的稳定性,我们有着较为完善的单测,行覆盖率接近95%。

 

 


接下篇:https://developer.aliyun.com/article/1225984?groupCode=idlefish

相关文章
|
10月前
|
JSON Dart API
Flutter 使用图片和资源
Flutter 使用图片和资源
252 2
Flutter 使用图片和资源
|
11月前
|
开发框架 前端开发 定位技术
Flutter框架中的插件市场及开源资源的利用方法。内容涵盖插件市场的扩展功能、时间节省与质量保证
本文深入探讨了Flutter框架中的插件市场及开源资源的利用方法。内容涵盖插件市场的扩展功能、时间节省与质量保证,常见插件市场的介绍,选择合适插件的策略,以及开源资源的利用价值与注意事项。通过案例分析和对社区影响的讨论,展示了这些资源如何促进开发效率和技术进步,并展望了未来的发展趋势。
243 11
|
SQL 分布式计算 大数据
Flutter技术实践问题之Flutter应用过程中的基础建设如何解决
Flutter技术实践问题之Flutter应用过程中的基础建设如何解决
106 10
|
开发框架 UED 计算机视觉
flutter:图片&stful 生命周期 (三)
本文档介绍了如何在Flutter中处理图片,包括加载网络图片、本地图片、创建圆形图片和带有圆角的图片,以及如何配置`pubspec.yaml`文件来添加资源文件。还展示了如何使用`AssetImage`对象来显示本地资源图片,并通过代码示例详细说明了这些操作的实现方法。最后,简要介绍了StatefulWidget的生命周期。
|
新零售 前端开发 小程序
Flutter技术实践问题之基于Flutter的Canvas的应用优势如何解决
Flutter技术实践问题之基于Flutter的Canvas的应用优势如何解决
141 2
|
Web App开发 新零售 前端开发
Flutter技术实践问题之阿里集团内Flutter体系化建设如何解决
Flutter技术实践问题之阿里集团内Flutter体系化建设如何解决
127 1
|
Kubernetes Cloud Native 搜索推荐
探索云原生技术:Kubernetes入门与实践打造个性化安卓应用:从零开始的Flutter之旅
【8月更文挑战第31天】云原生技术正改变着应用开发和部署的方式。本文将带你了解云原生的基石——Kubernetes,通过实际的代码示例,从安装到部署一个简单的应用,让你迅速掌握Kubernetes的核心概念和操作方法。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你进入云原生世界的桥梁。
|
9月前
flutter开发中Use ‘const’ with the constructor to improve performance. Try adding the ‘const’ keyword to the constructor invocation.报错如何解决-优雅草卓伊凡
flutter开发中Use ‘const’ with the constructor to improve performance. Try adding the ‘const’ keyword to the constructor invocation.报错如何解决-优雅草卓伊凡
127 1
|
8月前
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
479 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
9月前
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
319 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈