闲鱼技术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

相关文章
|
3月前
|
JSON Dart API
Flutter 使用图片和资源
Flutter 使用图片和资源
Flutter 使用图片和资源
|
5月前
|
开发框架 UED 计算机视觉
flutter:图片&stful 生命周期 (三)
本文档介绍了如何在Flutter中处理图片,包括加载网络图片、本地图片、创建圆形图片和带有圆角的图片,以及如何配置`pubspec.yaml`文件来添加资源文件。还展示了如何使用`AssetImage`对象来显示本地资源图片,并通过代码示例详细说明了这些操作的实现方法。最后,简要介绍了StatefulWidget的生命周期。
|
7月前
|
SQL 分布式计算 大数据
Flutter技术实践问题之Flutter应用过程中的基础建设如何解决
Flutter技术实践问题之Flutter应用过程中的基础建设如何解决
56 10
|
7月前
|
新零售 前端开发 小程序
Flutter技术实践问题之基于Flutter的Canvas的应用优势如何解决
Flutter技术实践问题之基于Flutter的Canvas的应用优势如何解决
65 2
|
7月前
|
Web App开发 新零售 前端开发
Flutter技术实践问题之阿里集团内Flutter体系化建设如何解决
Flutter技术实践问题之阿里集团内Flutter体系化建设如何解决
64 1
|
7月前
|
Kubernetes Cloud Native 搜索推荐
探索云原生技术:Kubernetes入门与实践打造个性化安卓应用:从零开始的Flutter之旅
【8月更文挑战第31天】云原生技术正改变着应用开发和部署的方式。本文将带你了解云原生的基石——Kubernetes,通过实际的代码示例,从安装到部署一个简单的应用,让你迅速掌握Kubernetes的核心概念和操作方法。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你进入云原生世界的桥梁。
|
2月前
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.报错如何解决-优雅草卓伊凡
26 1
|
1月前
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
186 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
2月前
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
132 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
6天前
|
IDE API 开发工具
HarmonyOS NEXT-Flutter混合开发之鸿蒙-代码实践
本文介绍了在Flutter三端分离模式下,将纯血鸿蒙混入Flutter项目的实践经验。基于咸鱼团队的flutter_boost和自定义FlutterPlugin实现,涵盖环境搭建、Flutter模块创建、flutter_boost集成、鸿蒙侧适配、双端通信及原生调用等内容。详细说明了Flutter与鸿蒙间的页面跳转、数据传递及方法调用的实现方式,为开发者提供参考。总结指出,通过管理页面栈和实现双端交互,可满足常规开发需求。

热门文章

最新文章

  • 1
    HarmonyOS NEXT-Flutter混合开发之鸿蒙-代码实践
    28
  • 2
    【Flutter 开发必备】AzListView 组件全解析,打造丝滑索引列表!
    39
  • 3
    flutter3-wetrip跨平台自研仿携程app预约酒店系统模板
    38
  • 4
    通过外部链接启动 Flutter App(详细介绍及示例)
    37
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    203
  • 6
    零基础构建即时通讯开源项目OpenIM移动端-Flutter篇
    108
  • 7
    flutter3-dart3-dymall原创仿抖音(直播+短视频+聊天)商城app系统模板
    72
  • 8
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    186
  • 9
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    59
  • 10
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    85