阅读更多

6顶
0踩

移动开发

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

经验

  • 快速冷启动时间是可以实现的,通过配置、修复、迭代。
  • 审慎使用像素。看看每一个屏幕不需要什么。其他国家用户手机的屏幕显著小于美国的。
  • 移动手机喜欢简单的设计,移动开发者也是如此,他们喜欢更简单、更快的设计。
来自: CSDN
6
0
评论 共 3 条 请登录后发表评论
3 楼 Tyrion 2014-10-09 14:57
 
2 楼 mojianpo 2014-10-09 09:42
好文章,不错
1 楼 Jclick 2014-10-08 10:30
好文~!

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 数据库读取clob字段

    关于在oracle数据库中读取clob大字段问题

  • 使用ODBC连接db2数据库

    如果使用Pythono的ibm-db库,则3.1以上版本会自动下载odbc的驱动,本文提供只使用odbc连接db2的方式。

  • 金仓数据库KingbaseES ODBC使用指南一 --概述

    概述 KingbaseES ODBC 是纯C的 ODBC 驱动程序,它支持 Microsoft ODBC 3.0 标准。通过 KingbaseES ODBC Driver,应用程序可以完成与数据库的连接、执行SQL语句、从数据库中获取结果、获取状态及错误信息、终止事务和连接等操作。 在本章中详细说明了 KingbaseES 对 ODBC 3.0 的标准接口函数、函数参数、参数选项的支持情况,以及使用时应该注意的问题。 ODBC特性支持限制 KingbaseES 对 ODBC 3.0 的支持是有限制的,.

  • 在 .NET 中使用大对象

    开发人员:.NET 在 .NET 中使用大对象作者:Jason Price 了解如何使用 .NET 读写大对象 (LOB) 以及如何通过 BFILE 读取数据。 本文相关下载:· 示例代码· Oracle 数据库 10g· ODP.NET(版本 10.1.0.2.0 或更高版本,如果需要的话)· Microsoft .NET Framework 和 SDK 本文是上一篇...

  • 在.net中用odbc连db2,取clob字段

    最近维护系统时遇到了一个问题:在.net中用odbc连db2,取不clob字段。令人吃惊的是当执行select * from table 时,竟然连那个clob字段的名字都取不出来。 最后查了资料,在odbc里设置一下。具体是在odbc里的高级\数据类型属性\长对象二进志处理,值选作为longvar,再选个最大值即可。 不知大家遇到这种取大字端的问题吗?说来听听 转载于:https://www...

  • .NET连接IMB DB2数据库的一些问题及最终完美解决方案!

    其实本来不是很难的东西,只是网上的教程颇少,而且一些复杂容易误导人的教程总是容易被搜索,真正正确简单又通用的方法却被埋没. 先说说网上的常见的方法(都是大坑,不感兴趣的可以跳过直接往下面看). 1.使用 Microsoft OLEDB Provider for DB2 来连接,此种方法是可以不用安装DB2客户端 . 但是必须需要安装合适的SQL server版本。是的,你没看错,这里就是要对应...

  • IMB DB2 开发客户端连接驱动(.net 等开发使用DB2数据库的连接库).zip

    安装后,在安装的目录或bin目录中有开发连接DB2所要使用的dll和jar等(如 IBM.Data.DB2.dll),ODBC驱动里也会添加有IBM DB2 DRIVER

  • 对主要数据库Clob/Blob操作的总结

    Clob和blob的操作主要分为3种:插入,更新和读取显示。 对于插入,可以分为两类。一类是可以直接按照正常的字段处理,一类为必须先插入空clob/blob再更新为真正的内容。 [b]插入:[/b] 对于大部分的数据库,在插入lob时都可以通过PreparedStatement.setAsciiStream或PreparedStatement.setBinaryStream直接写入,...

  • 常规sql读取CLOB

    plsql下,普通sqlsql-cmd下总结:常规的sql,查询clob字段,只能显示部分内容。查clob内容select dbms_lob.substr(c_content) from table_content t dbms_lob.substr将大文本转换字符类型读出来.dbms_lob.substr的转换对字段content的内容大小有限制~!一般几十k就已经超出了~!如果想读取全部,需要...

  • db2 clob

    由于项目的需要.用到了大字段Clob.以下是读取方法   第一种:   Clob clob = rs.getClob(“remark”);//java.sql.Clob   String detailinfo = “”;   if(clob != null){   detailinfo = clob.getSubString((long)1,(int)clob.len...

  • 第二十六章 类关键字 - OdbcType

    文章目录 第二十六章 类关键字 - OdbcType用法详解对子类的影响默认 第二十六章 类关键字 - OdbcType 指定通过ODBC或JDBC公开此数据类型时使用的类型。每个数据类型类都必须指定一个ODBC类型。此关键字仅适用于数据类型类。 用法 要指定通过ODBC或JDBC投影此数据类型时要使用的类型,请使用以下语法: Class MyApp.MyString [ ClassType = DataType, OdbcType = odbctype ] { //class members } 其

  • 如何在客户端配置ODBC来访问远程DB2 for Windows服务器

    本文详细地介绍了如何在客户端配置DB2 for Windows的ODBC数据源,然后又以“万能数据库查询分析器”的中文版本《DB 查询分析器》为工具,通过配置的ODBC数据源来访问远程基于Windows2000 Server操作系统的DB2数据库服务器。 本文同样适应用在客户端配置远程 DB2 for Other OS, 如Aix、Linux、或者Solaris等等。

Global site tag (gtag.js) - Google Analytics