Enviar pesquisa
Carregar
FtnApp 的缩略图实践
•
0 gostou
•
727 visualizações
Frank Xu
Seguir
Tecnologia
Vista de apresentação de diapositivos
Denunciar
Compartilhar
Vista de apresentação de diapositivos
Denunciar
Compartilhar
1 de 36
Baixar agora
Baixar para ler offline
Recomendados
部門會議 950619 Leon的錦囊妙計
部門會議 950619 Leon的錦囊妙計
Leon Chuang
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewave
OpenCity Community
MongoDB at Qihoo 360
MongoDB at Qihoo 360
MongoDB
Ceph bluestore-tiering-2018-11-15
Ceph bluestore-tiering-2018-11-15
Jiaying Ren
HBase@taobao for 技术沙龙
HBase@taobao for 技术沙龙
bluedavy lin
Java内存管理问题案例分享
Java内存管理问题案例分享
bluedavy lin
Mysql fast share
Mysql fast share
rfyiamcool
Sun jdk 1.6内存管理 -使用篇
Sun jdk 1.6内存管理 -使用篇
bluedavy lin
Recomendados
部門會議 950619 Leon的錦囊妙計
部門會議 950619 Leon的錦囊妙計
Leon Chuang
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewave
OpenCity Community
MongoDB at Qihoo 360
MongoDB at Qihoo 360
MongoDB
Ceph bluestore-tiering-2018-11-15
Ceph bluestore-tiering-2018-11-15
Jiaying Ren
HBase@taobao for 技术沙龙
HBase@taobao for 技术沙龙
bluedavy lin
Java内存管理问题案例分享
Java内存管理问题案例分享
bluedavy lin
Mysql fast share
Mysql fast share
rfyiamcool
Sun jdk 1.6内存管理 -使用篇
Sun jdk 1.6内存管理 -使用篇
bluedavy lin
Database.Cache&Buffer&Lock
Database.Cache&Buffer&Lock
Lixun Peng
Vim 实用技术,第 1 部分: 实用技巧
Vim 实用技术,第 1 部分: 实用技巧
King Hom
Golang 高性能实战
Golang 高性能实战
rfyiamcool
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
ykdsg
并发编程交流
并发编程交流
bluedavy lin
Redis分享
Redis分享
yiihsia
Sun jdk 1.6 gc
Sun jdk 1.6 gc
bluedavy lin
美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术团队
线上问题排查交流
线上问题排查交流
Edward Lee
NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析
iammutex
深入Docker的资源管理
深入Docker的资源管理
SpeedyCloud
PC服务器阵列卡管理简易手册 叶金荣@CYOU-20121223
PC服务器阵列卡管理简易手册 叶金荣@CYOU-20121223
Jinrong Ye
云计算环境中Ssd在cassandra测试的性能表现
云计算环境中Ssd在cassandra测试的性能表现
july19850903
Ceph in UnitedStack
Ceph in UnitedStack
Rongze Zhu
Sun JDK 1.6内存管理 -调优篇
Sun JDK 1.6内存管理 -调优篇
bluedavy lin
雲端的架構開發 (Designing Cloud Application Architecture with Windows Azure Platform)
雲端的架構開發 (Designing Cloud Application Architecture with Windows Azure Platform)
Jeff Chu
UC奇趣百科性能优化分享
UC奇趣百科性能优化分享
linx4200
Design realization and application of RBD NBD - Wang Li
Design realization and application of RBD NBD - Wang Li
Ceph Community
豆瓣网技术架构变迁
豆瓣网技术架构变迁
reinhardx
Sheepdog内部实现机制
Sheepdog内部实现机制
Liu Yuan
Beyond rails server
Beyond rails server
Michael Chen
Vulkan introduction
Vulkan introduction
Jiahan Su
Mais conteúdo relacionado
Mais procurados
Database.Cache&Buffer&Lock
Database.Cache&Buffer&Lock
Lixun Peng
Vim 实用技术,第 1 部分: 实用技巧
Vim 实用技术,第 1 部分: 实用技巧
King Hom
Golang 高性能实战
Golang 高性能实战
rfyiamcool
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
ykdsg
并发编程交流
并发编程交流
bluedavy lin
Redis分享
Redis分享
yiihsia
Sun jdk 1.6 gc
Sun jdk 1.6 gc
bluedavy lin
美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术团队
线上问题排查交流
线上问题排查交流
Edward Lee
NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析
iammutex
深入Docker的资源管理
深入Docker的资源管理
SpeedyCloud
PC服务器阵列卡管理简易手册 叶金荣@CYOU-20121223
PC服务器阵列卡管理简易手册 叶金荣@CYOU-20121223
Jinrong Ye
云计算环境中Ssd在cassandra测试的性能表现
云计算环境中Ssd在cassandra测试的性能表现
july19850903
Ceph in UnitedStack
Ceph in UnitedStack
Rongze Zhu
Sun JDK 1.6内存管理 -调优篇
Sun JDK 1.6内存管理 -调优篇
bluedavy lin
雲端的架構開發 (Designing Cloud Application Architecture with Windows Azure Platform)
雲端的架構開發 (Designing Cloud Application Architecture with Windows Azure Platform)
Jeff Chu
UC奇趣百科性能优化分享
UC奇趣百科性能优化分享
linx4200
Design realization and application of RBD NBD - Wang Li
Design realization and application of RBD NBD - Wang Li
Ceph Community
豆瓣网技术架构变迁
豆瓣网技术架构变迁
reinhardx
Sheepdog内部实现机制
Sheepdog内部实现机制
Liu Yuan
Mais procurados
(20)
Database.Cache&Buffer&Lock
Database.Cache&Buffer&Lock
Vim 实用技术,第 1 部分: 实用技巧
Vim 实用技术,第 1 部分: 实用技巧
Golang 高性能实战
Golang 高性能实战
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
并发编程交流
并发编程交流
Redis分享
Redis分享
Sun jdk 1.6 gc
Sun jdk 1.6 gc
美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践
线上问题排查交流
线上问题排查交流
NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析
深入Docker的资源管理
深入Docker的资源管理
PC服务器阵列卡管理简易手册 叶金荣@CYOU-20121223
PC服务器阵列卡管理简易手册 叶金荣@CYOU-20121223
云计算环境中Ssd在cassandra测试的性能表现
云计算环境中Ssd在cassandra测试的性能表现
Ceph in UnitedStack
Ceph in UnitedStack
Sun JDK 1.6内存管理 -调优篇
Sun JDK 1.6内存管理 -调优篇
雲端的架構開發 (Designing Cloud Application Architecture with Windows Azure Platform)
雲端的架構開發 (Designing Cloud Application Architecture with Windows Azure Platform)
UC奇趣百科性能优化分享
UC奇趣百科性能优化分享
Design realization and application of RBD NBD - Wang Li
Design realization and application of RBD NBD - Wang Li
豆瓣网技术架构变迁
豆瓣网技术架构变迁
Sheepdog内部实现机制
Sheepdog内部实现机制
Semelhante a FtnApp 的缩略图实践
Beyond rails server
Beyond rails server
Michael Chen
Vulkan introduction
Vulkan introduction
Jiahan Su
Nova与虚拟机管理
Nova与虚拟机管理
OpenCity Community
快速打包工具Quick build
快速打包工具Quick build
tb-vertical-guide
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
leneli
【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制
【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制
裝機安 Angelo
Hacking Nginx at Taobao
Hacking Nginx at Taobao
Joshua Zhu
浅析浏览器解析和渲染
浅析浏览器解析和渲染
Ailsa126
My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎
frogd
数据库与ssd的实践与探索-2011数据库技术大会
数据库与ssd的实践与探索-2011数据库技术大会
freezr
从零开始做首页
从零开始做首页
fangdeng
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践
孙立
网站存储经验谈pdf
网站存储经验谈pdf
Yu Lin
网站存储经验谈-pdf
网站存储经验谈-pdf
Yu Lin
腾讯大讲堂08 可扩展web架构探讨
腾讯大讲堂08 可扩展web架构探讨
George Ang
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践
Wensong Zhang
Taobao base
Taobao base
mysqlops
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践
lovingprince58
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践
drewz lin
Mysql企业备份发展及实践
Mysql企业备份发展及实践
maclean liu
Semelhante a FtnApp 的缩略图实践
(20)
Beyond rails server
Beyond rails server
Vulkan introduction
Vulkan introduction
Nova与虚拟机管理
Nova与虚拟机管理
快速打包工具Quick build
快速打包工具Quick build
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制
【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制
Hacking Nginx at Taobao
Hacking Nginx at Taobao
浅析浏览器解析和渲染
浅析浏览器解析和渲染
My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎
数据库与ssd的实践与探索-2011数据库技术大会
数据库与ssd的实践与探索-2011数据库技术大会
从零开始做首页
从零开始做首页
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践
网站存储经验谈pdf
网站存储经验谈pdf
网站存储经验谈-pdf
网站存储经验谈-pdf
腾讯大讲堂08 可扩展web架构探讨
腾讯大讲堂08 可扩展web架构探讨
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践
Taobao base
Taobao base
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践
Mysql企业备份发展及实践
Mysql企业备份发展及实践
Mais de Frank Xu
Watcher
Watcher
Frank Xu
淘宝交易平台前端重构
淘宝交易平台前端重构
Frank Xu
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
Frank Xu
排行榜V3项目总结
排行榜V3项目总结
Frank Xu
JsDoc的使用
JsDoc的使用
Frank Xu
Web Developing In Search
Web Developing In Search
Frank Xu
淘宝搜索前端优化
淘宝搜索前端优化
Frank Xu
Mais de Frank Xu
(7)
Watcher
Watcher
淘宝交易平台前端重构
淘宝交易平台前端重构
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
排行榜V3项目总结
排行榜V3项目总结
JsDoc的使用
JsDoc的使用
Web Developing In Search
Web Developing In Search
淘宝搜索前端优化
淘宝搜索前端优化
FtnApp 的缩略图实践
1.
FtnApp 的缩略图实践
AyangXu
2.
Agenda 列表缩略图和预览大图 图片缓存策略(磁盘,内存) 耗时操作的应对(读写、压缩) 大图滑动的逐步调优
3.
两种缩略图的异同
4.
列表缩略图 文件小(15-20k) 文件多(列表) 滑动的时候频繁读 高缓存命中
5.
预览大图 文件大(200k+) 绘制耗时长 重用率低 内存控制要求更高
6.
共同特点 平滑性要求高 多重检查:本地 ➜ 原图(压缩)
➜ 网络 过度状态(ICON / loadingView)
7.
loadThumbnail small
big QMCache thumb.db file original file web thumbnail
8.
小图的缓存策略(磁盘)
loadThumbnail small QMCache thumb.db original file web thumbnail
9.
小图的缓存策略(磁盘) 全部小图保存到⼀一个 DB 启动的时候子线程加载(15k*100张) 滚动停止时,只更新 visibleCells 先更新内存,显示,再在后面更新
DB 不要在 cellForRowAtIndexPath 里做太多事情
10.
图片缓存策略
11.
小图的缓存策略(内存) 内存更新策略 缩略图只加不减 全部小图,包括默认的
ICON 都只读⼀一次
12.
大图的缓存策略(内存) NSCache NSDiscardableContent
/ NSPurgeableData 不Copy Key,释放时机不可控 QMCache NSMutableArray w/ NSMutableDictionary 自定义 Capacity,多了就删
13.
耗时操作的应对
14.
本地 ➜ 原图
➜ 网络 QMCache 难点: thumb.db file 两种 IO 操作 original 两个网络操作 file 相互嵌套 web thumbnail
15.
GCD VS
OperationQueue GCD 保留作用域,线程池 不好控制并发任务,不好取消 NSOperationQueue w/ NSBlockOperation FIFO,封装了 GCD,可配置并发数,支持取消 保留还在队列里的 URL,避免重复的操作 快速滑动时,取消未开始的任务,优先留给当前页
16.
dispatch_async(
dispatch_get_global_queue(0,0), ^{ dispatch_async( dispatch_get_main_queue(),^{/*UI*/}); }); VS [queue addOperation: [NSBlockOperation blockOperationWithBlock:^{ dispatch_async( dispatch_get_main_queue(), ^{/*UI*/}); }]];
17.
大图滑动的逐步调优
18.
大图滑动的基本实现
19.
两层UIScrollView
1 2
20.
⼀一次性准备ContentSize { numOfImages *
(width + padding), height }
21.
将读取逻辑扩展出去 [previewImage renderMultipleImages: ^(int
page, downloadImageCallback callback) { asyncLoadImage(page, ^(UIImage *image) { callback(image); }); } ];
22.
评估工具
Instruments Core Animations Allocations
23.
大图滑动 V1 图片和 loadingView
分开两个数组 未渲染部分用 [NSNull null] 占位,提前创建 好N个 loadingView 检查是否 [NSNull class] 来判定是否需要加 载 scrollViewDidEndDecelerating 时加载 每次加载时创建 view,加载过的不会释放
24.
大图滑动 V1 FPS 10-15 不断创建新的
view,不断释放 在 scrollViewDidEndDecelerating 才加载,太 慢 进列表时间很长,初始化东西太多
25.
大图滑动 V1.1 动态补充 loadingView 将绘制逻辑改到
scrollViewWillBeginDragging 缓存第二层的 zoomingScrollView
26.
大图滑动 V1.1 进列表时间有所改善 所有第⼀一次翻动都很卡 FPS:
10-15 Cache 过的 view 不需重新创建 FPS: 20-30
27.
大图滑动 V1.2 提前加载左右 N
页 判定是否到了 N 页,再进行加载 N=5
28.
大图滑动 V1.2 预加载左右 5
张,进列表时间又长了⼀一点 左右 5 张之内 FPS 30-40 第 6 张⼀一次性又要加载5张 FPS 10-20
29.
大图滑动 V1.x zoomingScrollView 基本不可重用
大图缓存的命中率很低 每⼀一次绘制都需要遍历三个N长数组 图片,loadingView,zoomingScrollView 每次翻动的时间跟列表长度相关 O(N) 创建后不移出 view,subviews 越来越多
30.
大图滑动 V2 不采用单独的 loadingView
数组和 [NSNull null] 用 zoomingScrollView 来引用 loadingView 跟 image View的缓存和回收 NSMutableSet 无序,NSObject 不重复 visiblePages / recyclePages
31.
大图滑动 V2 scrollViewDidScroll 判定当前可见的页(<=2) 如果需要绘制,从 recyclePages
里 dequeue ⼀一个放到 visiblePages 回收不可见的页,从 visiblePages 里挪到 recyclePages 如果不需要绘制,什么都不做
32.
大图滑动 V2 FPS 40-50 保持外层
UIScrollView 的 subviews,最多只 有两个 减少不断创建新 view 的开销 减少 scrollViewDidScroll 时的遍历开销 O(1)
33.
进化路线 滑动时的 FPS 15
=> 45 滑动时的遍历:O(n) => O(1) 内存增长: view 的创建和回收: N => 2
34.
Next? 大图内存没有尽快释放 [obj
release] 只是引用-1,并没有马上释放 采用小图策略,DB 保存等比小图 ⼀一次加载到内存,内存只缓存小图 (20k * 100) 快速滑动时拉伸小图,模糊,但是快 scrollViewDidEndDecelerating 时绘制大图 view 不可见时马上清大图 image = nil;
35.
And.. [NSURLConnection sendSynchronousRequest:returningResponse:error:] 所有网络数据都 load
到内存,并发下载三个, 内存涨了 10M (Oh my!) 对可能的大图片,异步 IO + 文件流
36.
Thanks Q&A
Baixar agora