说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Instagram工程师教你如何改善App的性能

HTML文档下载 WORD文档下载 PDF文档下载
扁平化设计最核心的地方就是放弃一切装饰效果,诸如阴影、透视、纹理、渐变等等能做出3D 效果的元素一概不用,所有的元素的边界都干净俐落,扁平化设计不仅是一个美丽的外表,它带来的还有性能上的提升,

【编者按】扁平化设计由于其简洁的外表,更少的按钮和选项使得界面干净整齐,从而减少认知障碍的产生。扁平化设计更是功能上的简化于与重组,相比于拟物化而言,扁平风格的一个优势就在于它可以更加简单直接的将信息和事物的工作方式展示出来。本文来自Instagram一名工程师的分享。

以下为译文:

扁平化设计仅仅只是一个漂亮的外表,还是一个性能利器,从而触发一场UI革命?实践证明是后者。

Tyler Kieft 是Instagram一名工程师,他详细解释了这其中的缘由,更详细的内容请关注他在@scale会议上的演讲: 标准安卓手机上的Instagram 。这个演讲是由Facebook提供的,是“如何在实际情况下设计移动应用程序”系列的一部分,这里的“实际情况”是指那些手机速度更慢、屏幕更小、网络比美国更慢的地方。

为标准手机设计App和高端手机并不一样,Instagram团队需要重新思考他们的设计。从Tyler的谈话中得到的启示之一是转变到扁平化设计,因为这将让应用程序更美观、更实用、并且还能大大提高性能。

这的确出乎我的意料,我曾经认为扁平化设计只是构建更美观的UI。现在想想真是愚蠢之极。感谢Tyler如此详细的解释了扁平化设计的好处, Instagram说明了一切。

扁平化设计是反拟物化,它采用简单的元素、简单的排版、单调的颜色以及简单的设计。

使用扁平化设计,Instagram可以减少120 ms的冷启动时间,同时应用程序更美观、更好用、并且更专注将内容传送到不同大小的手机上。

那么扁平化设计是如何实现的呢?

转变到扁平化设计

  • 为了更专注性能,Instagram重写他们的UI。
  • Instagram在2012年发布Android版本时,只有3个人的团队,花了大约4个月完成。其中两个工程师,一个设计师。Android版本使用了和iOS版本相同的设计。
  • 使用的丰富的渐变特性和大量的UI元素。
  • 过渡到扁平化设计后,产品更简单和更美观。没有更多的渐变,没有更多的阴影。
  • 通过采用扁平化设计,他们得到的经验是:

  • 扁平化设计使开发量更小,开发代码更快、更新产品更快,这对开发人员来说是个好消息。
  • 扁平化设计带来的是性能的提升,不仅开发人员做的少,而且速度更快。

  • 新Android版本的目标就是利用他们从iOS7扁平化设计中学习到的经验来重新设计:

  • 让它更扁平、更快。这不是重写,导航模式并没有改变。
  • 要有强烈的屏幕空间意识。用全新的眼光看待每一块屏幕,尽量让设计能更好地适应所有的屏幕尺寸。
  • 让它更美观。这是Instagram团队所做一切的基础。

  • 整体效果发生了显著的简化,那么发生了那些变化呢?

  • 去掉所有的渐变和光滑按钮。让图标回归鲜明的轮廓,取代渐变效果。保留纯色和扁平形状,以便UI融入背景。
  • 去掉评论图标,使评论占据屏幕的全部宽度,给予评论更多的文本空间。屏幕上重点强调内容,让小屏幕手机用户有更多的空间来读正文内容。
  • 拍照功能的重新布局。在小手机上,动作按钮设计在屏幕的顶部,而大屏幕手机所有的命令在底部。
  • App上不必要的UI全部去掉,让用户更多的关注内容。chrome搜索屏幕从三层减为两层。这给了小手机很多空间,给内容很多空间。

为什么扁平化设计

  • APK将更小,这对小型网络非常适合。神奇的是Asset tinting(我从来没听说过的东西)。Asset tinting意味着assets,在这种情况下是图像、可以以编程方式着色。例如,一个灰色的心可以通过编程方式变为红色。
  • 加载较少的assets。这意味着UI显示更快并且以更少的内存来存储位图。每个需要被显示的assets必须以闪存的方式读取并且解码成一个位图。越少这么做,App就会越快。
  • 更快的迭代时间。如果你想改变颜色或重新开发,你不需要一个设计师了,需要的事更改代码和编译。
  • 结果:

  • 在扁平化设计之前,需要29个不同的assets显示feed screen。扁平化设计之后,只用了8个。仅凭这些,就在所有设备上减掉120 ms的冷启动时间。
  • 扁平化设计之后,整个App更快了。更少的assets被加载,整个App变得更灵巧,速度变得更快了。

改善冷启动时间

  • 冷启动时间是指应用程序启动和响应的时间。目标就是让应用程序启动更快,让用户在低端手机上有一个好的体验。
  • 几年前,在低端三星Y系列手机上 Instagram的启动时间是3秒,在高端三星S5上,启动时间是750 ms。
  • 现在三星Y系列上 Instagram启动需要1.5秒。在三星S5上是400 ms。
  • 怎么做?

  • 配置App。

  • 找出是什么减慢了这个App的速度。
  • 在Android上你可以使用method tracing,以及timing statements,两者兼用会事半功倍。

  • 修复最慢的部分。

  • 延迟加载。将项目从冷启动路径删除。
  • 重写代码。例如,缓慢的JSON解析代码重写后会更快。
  • 遵从后台线程。能在后台完成的不要在UI线程上做。

  • 迭代。再次启动配置步骤。

  • App-wide 单例模式被发现是缓慢的。

  • 很多重度单例模式先于App启动:HTTP客户机、Cookie存储、图像缓存、视频缓存。真的不需要这些东西来显示UI给用户。它们可以并行地在后台加载。
  • Two-part 延迟加载

  • 在后台初始化单例模式,不要让程序员必须检查一个单例模式是否是可用的。

  • 在UI线程上创建足够的对象,以便完善公共API功能。将功夫用到后台线程上。缓存从磁盘存储打开和阅读,客户端证书在后台加载。Cookies反序列化和解码在后台。通过这些改变,UI将更快地出现在屏幕上。

  • Newsview变慢。通过method tracing发现。

  • Newsview,显示你所有的喜好和评论,最初作为webview编写。它需要在启动时加载,以便尽可能快的显示用户数据。
  • 问题是没有控制webview,它有它自己的堆栈和缓存系统。转换到本地,需要2 - 4周。本地转换后的冷启动时间减少了30%。

经验

  • 快速冷启动时间是可以实现的,通过配置、修复、迭代。
  • 审慎使用像素。看看每一个屏幕不需要什么。其他国家用户手机的屏幕显著小于美国的。
  • 移动手机喜欢简单的设计,移动开发者也是如此,他们喜欢更简单、更快的设计。

原文链接:Instagram Improved Their App's Performance. Here's How. (责编/魏伟)

【CTO俱乐部走进海尔】海尔的转型探索之路 十一问MongoDB CTO,谈NoSQL人气王的扩展、事务及运维 腾讯“创业•密码”开发者论坛 ChinaJoy引爆创业者关注 从F1赛车到智能手机,无线充电技术之崛起 助力梦想!MDCC免费为优秀App开发团队提供展位 为Symfony2和Redis正名,基于PHP的10亿请求/周网站打造 【聚焦API】教你如何选择最适合的NLP API服务商? 直接改应用!Flipboard开源iOS应用内调试工具FLEX 专访腾讯游戏运营总经理崔晓春:云时代游戏运营的变革与创新 嵌入式专家Bruce Douglass经验谈 门票销售过半 从2014微信开发者大会购票者特征说起 当来自金星的Devs碰上火星的Ops——共话应用扩展 移动平台市场占有率:Android首次赶超iOS 豌豆荚范怀宇 I/O大会总结:Android无处不在 轻博客始祖Tumblr:哈希以支撑2.3万Blog请求/秒 《近匠》FIR.im:简单易用的内测分发工具 传苹果公司将于9月9日召开新一代iPhone发布会 近百家微信开发商参与征集评选活动 TOP10正浮出水面 Java程序猿,手游引擎怎么选? MDCC 2014优秀移动团队免费展位火热申请中 【微信讲师面对面】你在企业服务号开发中遇到的坑和难点 五个解决方案让MongoDB拥有RDBMS的鲁棒性事务 浅谈Apache Spark的6个发光点 安卓 “假ID” 签名漏洞,竟然骗过了支付宝和360 从Social到Big Data,移动App蚂蜂窝转型推新品 《近匠》nice曹大鹏,从男装导购到潮人社区的心路历程 DevOps扼杀的不是开发者,而是开发生产力! 利用Docker构建开发环境 Netflix公布Cassandra新性能:基于AWS的百万次写入每秒 一周消息树:谷歌Android遭遇“颠覆”危机 微软发布新应用Snipp3t,iOS平台首发且无Windows Phone版 好象没什么人啊 祝斑竹zxyufan(宇凡)考试顺利 :) 高手请进!!!!!!! 怎么从一个字符串中截取字符串 关于软件的序列号的问题? 哪位高手给解释一下啊??? 各位DX:怎样在填完一个文本框后光标自动跳到下一个框里?很急的,解决一定给分! treeview问题,我只能给这么多分了,拜托大家,急死我了!!!! 连接数据库的一个参数:Initial Catalog=Music 是什么东西,在那里设置? 在DELPHI中能用ADO连接远程有固定IP的数据库服务器上的数据库吗?怎么连接? 各位兄弟姐妹,快来看呀! 请教各位大虾:我在上网的时候为什么老是死机,鼠标键盘一动不动了!!! pb中访问数据库必须通过datawindow么? 为什么就差这么一点了~???快帮帮忙啊~! OO里面的"is a"和"has a"应该如何理解啊?举个例子看看 请问在哪可以找到可以做简历封面的图片呀?后天就是招聘会啦,快快帮忙呀~~~ javaServlet的一个问题。急! DELPHI高手!-----300分 ASP开发问题,如何在用户提交注册信息时自动分配给它一个用户ID号? 我想在 Excel 中给文件字加双下划线,可是编译时提示变量没有定义 有谁能给我一份简单的COM代码? 有关interface??? 昨晚,初恋情人不经意的出现在梦中,你到底离你的初恋情人有多远,撒分了 一个昨天没搞明白的问题! redhat 7.2中如何设置代理服务器 求教高手一个Java中一直困扰我的问题,急!急!急! 谁能够给我个例子实现 Dll向应用程序单向通信 Dll->EXE?50分? 请问.......... 在数据窗口拖动垂直滚动条死机。只能ctrl+alt+del结束任务。倾听你的声音。 请教各位大虾两个Sql语句 哪里有visual studio.net下载? 那里有sql server 2000企业版下载的 xml的学习??????双儿 怎么比较两个LPTSTR字符串啊??? 语句“rs.Open sql,conn,1,1”中后边的两个数字参数是何意思? 如何获取datawindow中文本框内容? 请教公司大院网络系统设计方案要怎写?会遇到什么问题? 关于clientdataset的返回值问题 关于报表打印的问题!火急。。 这个世界上有多少C/C++程序员? 关于ARP广播域的问题????????????????、 请问什么服务器支持global.jsa 安装oracle数据库出错!!!!!!!!!!!! 如何在对话框的OnPaint()函数中得到该对话框的窗口大小? 一个看似简单却很棘手的问题,不得不请教各位。。。 哪里有将rm文件转换成avi或者mpg格式的软件? 关于ARP广播域的问题?????????????? 请问,,怎么设定mshflexgrid的属性,使其各列的宽度与数据源字段的宽度一致 请问这几个对象是否代表同一个对象? 菜鸟问题:如何跟随鼠标拉出一虚线矩形框?回复就有分! 高分寻Authorware v6.0 注册码 石灰与石膏怎么区分刷在墙上的是石灰还是石膏 石灰加水会爆炸吗? 已知10%的硫酸与98%的硫酸密度之比小于0.98.现将98%的浓硫酸配制成100ml10%的硫酸.所需要的量筒规格是:10ml和100ml为什么? 石膏和石灰是一样的吗?现在的石灰是袋装的,像浆状的,和以前的干石灰一样的吗? 虎门销烟中为什么用石灰加水?发生了什么化学反应? M5水泥砂浆砌筑外墙中的M5是什么意思啊 M5水泥砂浆中的M5是什么意思啊 砂浆强度等级和砼的强度等级一样吗?各有哪些等级啊?很多兄弟都说的对,可惜只能选一个答案~那我只好选第一个告诉 石膏和石灰之间到底是什么关系?石膏粉加水变石灰,还是石灰粉加水变石膏啊? 石灰加水为何会产生热能>?建筑房子时,石灰加水就会达到上百度,这是为何?请给出化学公式与说明```` M5水泥砂浆配比PS32.5 she变复数 石灰加水,能腐蚀纸吗? 配制500克30%的硫酸溶液,需要98%的浓硫酸多少克 几道英语题变复数.Who is I 改为复数 Who ___ ___?Who is she 改为复数 Who ___ ___?RT 在100千克浓度为50%的硫酸溶液中,再加入125千克浓度为5%的硫酸溶液,就可以配制成浓度为多少的硫酸溶液? 两个不可数名词一起做主语,谓语动词用单数还是复数? 在浓度为50%的硫酸溶液100kg中在加入多少kg浓度为5%的硫酸溶液就可以配制成浓度为25%的硫酸?(算式) 当先行词是one of .时 ,关系代词作主语,谓语动词用单数还是复数 动名词做主语时,谓语动词用单数还是复数? 50%的硫酸100kg和10%的硫酸500kg能配制多少kg30%的硫酸溶液? only one of,the only one of 做主语,谓语动词分别用单数还是复数?尤其是only one of. 主语是不可数名词时,谓语动词用单数还是复数?(这里的谓语动词不是Be动词!是像do等……词)单三还是普通? 某钢厂欲配制20%的硫酸溶液500kg,已有51%的硫酸溶液100kg,还需98%的浓硫酸()kg.水()kg one-fifth of the five apples 做主语,谓语动词用单数还是复数啊? 1:2.5的水泥砂浆是质量比还是体积比?在工地上用铁锹怎么混合? 有浓度90%的硫酸溶液100kg和浓度10%的硫酸溶液500kg,问使用这两种硫酸溶液最多能配成浓度为30%的硫酸溶液答案是400 为什么不是1400/3 干石灰1方有多少吨 1:4干硬性水泥砂浆是体积比还是质量比 一立方石灰等于多少吨 one or two +名词复数 谓语动词用单数还是 复数,请举例其他情况, 水泥砂浆的质量比和体积比是多少是水泥砂浆自身的配合比不是质量和体积比 一立方生石灰(粉)等于多少吨? 配制40%的稀硫酸溶液100ml,需要98%的浓硫酸多少毫升? 1:2水泥砂浆是质量比还是体积比 英语语法:名词单数变复数的几种形式 one or two 做主语事谓语动词用单数还是复数 两个不可数名词并列谓语动词用单数还是复数 英语单词,将名词单数形式改为复数形式boytomatomonthcomedypartykeyeggmovieclass就这些,有点多,改成复数形式,不确定的不要 经计算 配制100ml 1mol L的稀硫酸需要用量取上述浓硫酸的体积Ⅱ.现用该浓硫酸配制100 mL 1 mol/L的稀硫酸.可供选用的仪器有:①胶头滴管;②烧瓶;③烧杯;④ 药匙;⑤量筒;⑥托盘天平.请 20摄氏度时,将50毫升28%的硫酸溶液配成14%d的硫酸溶液,需加水多少克 WE的单数形式 SHE的复数形式 英语的名词单数变复数怎样变 One or two 之后的谓语动词用单数还是复数,那么,A book or two 呢 一堆沙,甲车运走十三分之五吨,剩下的沙占沙总量的九分之八,剩下多少吨沙?只求列式! 英语复数形式和单数形式复数形式和单数形式是什么.详解. 水泥砂浆楼地面和水泥砂浆找平的区别地面面层/水泥砂浆楼地面20mm厚,与地面水泥砂浆找平20mm不都是一样的吗,l两道工序有什么区别吗? she is a girl复数 在100千克浓度为50%的硫酸溶液中.再加入多少千克浓度为5%的硫酸溶液,就可以配制成浓度为25%的硫酸溶液?求算示,过程. 水泥砂浆找平层?水泥砂浆找平层,厚度每增减5mm是什么意思? She's a good girl 变复数 用碎砖的三合土配合比是怎样,一立方要多少石灰? 请问楼面水泥砂浆找平 需要压光吗,远设计有点坡度··现在用炉渣填平整了,在做面层砂浆找平层,需要压光吗?面层还有地板砖!急在补充一下··因为原先是作为屋面用的 有坡度,现在改为楼面 在100千克浓度为百分之50的硫酸溶液中,再加入多少千克浓度为百分之5的硫酸溶液,就可配置浓度百分之25硫酸溶液? 能不用方程就不用 石灰是由什么做成的?求大神帮助 1.much+不可数名词 作主语,谓语动词用单数还是复数?2.two/many pieces of+不可数名词 作主语,谓语动词用单数还是复数? 一堆沙,运走了它的8分之3,正好剩下24吨,这堆沙有9( )吨.数量关系(文字表示)( ) 列式:( ) 石灰学名叫什么求大神帮助 用98%的浓硫酸配制100g10%的稀硫酸,所需的仪器有____在实验前先要_____,需要查找的数据有_____浓度为5%的某溶液,蒸发掉64.3g水后,无晶体析出,剩余溶液体积为30ml,密度为1.19g/立方厘米,求剩余 用文字好了 [2又3分之1+(5.4-3又3分之2)×1又3分之2]÷3又9分之4 石灰加水什么样 浓硫酸配制稀硫酸的实验器材
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn