iOS 发布 带有多张图片动态(类微信朋友圈) 速度的初步优化。

        最近在项目中优化了多图上传以及发布个人动态的功能,虽然也并没有很难,还是记录一下。

更新:中间有个版本我在App中使用的图片上传逻辑:选择完图片之后生成图片名称,生成图片名后在后台线程上传图片至OSS,该过程与心情发布可同时进行。但是后来在用户使用过程中,发现图片会有几率上传失败,但是之前未做任何处理,经检测失败原因可能是:

(1)、上传图片过程中杀死应用,导致上传线程被终止

(2)、上传图片过程中断网

因此后来采取了其他上传方式保证图片上传的成功率,最终所采用的上传方式是:

(1)、选择完图片之后生成图片名称。

(2)、图片名称为key,图片data作为value 存入缓存。

(3)、从缓存中读取图片名称及信息并上传,因为上传图片时是同步,每上传成功一张就从缓存中删除。

(4)、每次应用启动或者监测网络重新连接时去缓存中读取是否有图片需要上传。

我自己测试下来这种是可以避免已有的图片上传失败的问题的。

如果大家有什么其他好的方法也可以告知我,感谢!


        自己项目中的发布个人动态功能(类似于微信朋友圈,可发文字、图片、动图)速度贼慢(在带有图片时整个发布过程长达几秒钟,这对于用户来说肯定是无法忍受的),因此需要对这一块儿进行优化。说实话,刚开始领导的要求只是把图片上传由刚开始的先上传到公司服务器再由后台传到阿里云 改为 直接由移动端上传到阿里云,我也以为就这么简单,结果,在看了OSS的文档并在移动端集成了上传功能,而且上传前使用 UIImageJPEGRepresentation 压缩图片,并使用以下代码简单改了图片尺寸,但最后发现事情并没有那么简单,体验仍然是灾难级别的。

图 1 

        对比微信朋友圈,作为第一大社交应用,微信在性能优化方面真的是极尽所能,刚开始在网上搜了关于微信朋友圈机制的文章,微信朋友圈千亿访问量背后的技术挑战和实践总结,当然这篇是没有太大作用的,还有就是微信关于图片压缩的逻辑,这个是看其他大神博客总结的张小龙演讲的内容。其实对于朋友圈多图上传的逻辑,拿自己手机微信在联网和断网情况下多测几次,大概能猜出来。朋友圈在无网状态下,也是可以发布动态的,自己也可以看到,但是其他人是看不到的,在重新联网后,过一会儿,其他人就可以看到了。结合网上查到的资料,逻辑大概是用户在点击发布之后新建一条副本,给用户第一时间显示的是副本数据,后台开辟线程默默上传(断网状态下停止,联网状态下开始上传),当然内部逻辑肯定不会这么简单,但是按照这个逻辑我们基本可以写出来一个体验相对好的发布功能了。

图 2 -微信朋友圈图片上传压缩机制

        有了思路,接下来就是怎么实现的问题了。想着逻辑很简单,但是在写起来时还是费了不少时间的,因为要去考虑 多张图片异步上传、图片上传成功后取到图片URL发布动态、硬盘存储的多个副本数据的上传(一条副本数据相当于一条动态)等多个操作,在考虑之后我自己规定了操作之间的关系,大致为  多图上传采用异步请求,发布动态使用AFNetworking所以肯定是异步请求,而上传图片和发布动态之间,我使用的是同步请求,因为我想在发布动态的时候就确保图片已经上传成功了,当然也可以采用异步,因为图片名称是自己定义的,域名也都是已知的,直接可以拿到url,但是里面有些细节我没考虑好,所以暂不说异步。说回同步,想到这里的时候突然想起了之前去途牛面试的时候问到的一个问题,两个异步请求,但是希望两者间是个同步关系,怎么处理? 可能很多人都知道,我是查过之后才知道的,使用 dispatch_semaphore_t(信号量)关于信号量有很多讲解的文章,这里就不赘述了。简单说类似于设置资源量然后进行加锁。  然后就是多个动态发布操作之间的关系,也是同步。不然有可能造成多个副本中图片的混乱。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,263评论 25 707
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,672评论 2 59
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    X先生_未知数的X阅读 15,967评论 3 119
  • 我们高三, 习惯了在天朦胧的时候起床, 习惯了带着惺松的睡眼洗脸、刷牙、习惯了懒懒的… 习惯了边走着边咒骂着可恶的...
    麻油叶先生啊阅读 263评论 3 2
  • 参加了朋友女儿满月酒,自己去了,果然没有密不通风的,大家虽然还猜不到谁,但知道了大概。中文她说吃昨天的榴莲太多,今...
    笠翁阅读 177评论 0 0