QCon全球软件开发大会8折优惠倒计时,购票立减¥1760!了解详情 >>> 了解详情
写点什么

Instagram 性能优化之道

2014 年 11 月 05 日

@scale 2014 大会上,Instagram 工程师 Tyler Kieft 做了题为《普通安卓设备上的 Instagram 》的演讲,介绍其团队如何针对普通手机(相对高端手机而言)重新思考 Instagram 的设计。Highscalability.com据此报道了 Instagram 的性能优化之道。

转向扁平化设计

在开发新版本的 Android 应用时,Instagram 团队借鉴了开发 iOS7 应用时的扁平化设计经验,从以下几个方面做了改进:

  • 去掉了所有的渐变色和光滑的按钮,用轮廓形状代替。
  • 去掉了评论图标,使评论可以充分利用屏幕宽度,显示更多内容。
  • 为拍照功能创建了不同的布局。在小屏幕手机上,拍照按钮在屏幕上方;在大屏幕手机上,则是在下方。
  • 去掉了应用中所有不必要的 UI,更注重内容的展示。

这样做的好处是:

  • 资源传输减少,这意味着 APK 文件更小。借助“资源着色(Asset Tinting)”技术,图像可以通过编程进行着色。
  • 资源加载减少,这意味着 UI 显示速度更快,内存使用更少。
  • 迭代速度更快。如果开发人员想改变颜色,只需改变代码并重新编译,而不再需要设计人员参与。

扁平化设计使 Instagram 在所有设备上的启动时间减少了 120 毫秒。而且,整个应用的运行速度都更快了。

缩短冷启动时间

冷启动时间是指从应用开始启动到可以响应用户请求这段时间。为了缩短冷启动时间,提高冷启动速度,增强用户体验,Instagram 团队采取了如下措施:

  • 性能分析——反复对应用进行性能分析,找出增加应用冷启动时间的原因。通过延迟加载、重写速度慢的代码、将可以后台完成的任务交由后台线程处理等方法消除性能瓶颈。
  • 单例实例与 UI 分两部分并行加载, UI 无需等到前者加载完成就可以显示。
  • 将 Newsview 由 Webview 改为原生控件。仅此一项就使冷启动时间缩短了 30%。

通过上述改进,Instagram 在低端 Galaxy Y 上的启动时间由 3 秒降至 1.5 秒,在高端 Galaxy S5 上的启动时间由 750 毫秒降至 400 毫秒。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014 年 11 月 05 日 03:442189
用户头像

发布了 1008 篇内容, 共 321.1 次阅读, 收获喜欢 292 次。

关注

评论

发布
暂无评论
发现更多内容

收藏!一篇教会你写90%的shell脚本!

洋仔聊编程

Shell shell脚本编写 收藏教程

前端源码宝库

InfoQ_34a83d636158

非传统的“易观”,和他的技术驱动之路

易观大数据

Android 中的特殊攻击面(一)——邪恶的对话框

OPPO安全

android 安全攻防 安全

【架构师训练营】第 12 周作业

花生无翼

架构师培训十二周练习

小蚂蚁

数字货币交易系统应用开发,区块链交易所app

13530558032

Git技术干货!工作中"Git"的使用实践和常用命令合集!

洋仔聊编程

git git常用命令 git常用实践 工作中git的使用

为什么阿里巴巴的程序员成长速度这么快,看完他们的内部资料我明白了

Java迁哥

我们从Kubernetes发展中学到了什么(1)

华宇法律科技

Kubernetes 容器 k8s

交易所合约跟单系统源码开发,合约跟单平台搭建

13530558032

易观郭炜:流动水系数造未来

易观大数据

如何实现特定列脱敏?这两种方法你都要会

华为云开发者社区

postgresql 数据 脱敏 匿名 视图

架构师培训 -12 hadoop

刘敏

区块链USDT支付系统,USDT承兑支付软件开发

13530558032

加密数字货币钱包APP系统开发,数字货币钱包系统定制

13530558032

架构师训练营第十二周作业

叮叮董董

云小课 | 一份超实用的勒索病毒自救预防指南

华为云开发者社区

勒索病毒 弱密码 云小课 企业主机安全 病毒云查杀

除了方文山,用TA你也能帮周杰伦写歌词了

华为云开发者社区

AI 数据 周杰伦 modelarts 歌词

架构师训练营第 0 期第 12 周作业

无名氏

一文说透"静态代理"与"动态代理"

洋仔聊编程

源码分析 动态代理 静态代理

超声大数据应用

周冬辉

大数据

疫情对在线教育的影响

anyRTC开发者

在线教育 直播 RTC 安卓

LeetCode题解:155. 最小栈,使用链表代替栈,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

大数据作用

阿里巴巴Java开发手册-日志规约

魏杰

区块链技术创新应用势在必行 食品药品开启全链条溯源时代

CECBC区块链专委会

区块链 溯源 药品

释放数据价值:DAYU数据运营新能力解读

华为云开发者社区

大数据 数字化转型 华为云 代码原理 数据运营

SpreadJS 纯前端表格控件应用案例:Teammark知识管理库

Geek_Willie

SpreadJS

Android中的特殊攻击面(二)——危险的deeplink

OPPO安全

android 安全攻防 安全

Android的特殊攻击面(三)——隐蔽的call函数

OPPO安全

android 安全攻防 安全 函数

移动应用开发的下一站

移动应用开发的下一站

Instagram性能优化之道-InfoQ