写点什么

Facebook 和 Instagram 的经验:面向新兴市场改进 Android 开发

  • 2014-11-16
  • 本文字数:1915 字

    阅读完需:约 6 分钟

@Scale 2014 大会上,来自 Facebook 和 Instagram 的工程师做了题为《 Scaling Android Apps for Emerging Markets 》的演讲,就如何面对不同的 Android 设备和不同的网络连接速度改进其应用的表现分享了相关经验。

Facebook

Facebook 将团队送到了亚洲、非洲、中美洲和南美洲的一些国家,去评估当地的手机市场。他们购买和使用了当地流行的设备,以了解在这些设备上访问 Facebook 的应用时的用户体验。Chris Marra 是 Facebook 的 Android 开发产品经理,他就这些新兴市场中 Android 设备和网络连接情况分享了一些发现:

  • 通常访问 Facebook 的设备模型有 10 000 种左右
  • 在发展中国家,有两种占据统治地位的移动设备:功能机和低端入门级 Android 手机
  • 这些设备通常是使用上一代硬件制作的
  • 互联网连接还属于高级服务,存在网络堵塞
  • 手机较慢,屏幕较小,网络连接状况往往比较差
  • 美国的 3G 网络覆盖率达 70%,而像巴西和印度,覆盖率分别是 38% 和 7%

在给这些市场把过脉之后,Facebook 就开始改进其应用了。他们发现,因为内存有限,经常会导致 OutOfMemory 错误,使用较老手机的用户碰到应用崩溃的情形明显要多得多,所以他们决定提供一个不同的版本,以确保应用在这类设备上运行更平滑。因为用户在较老的手机上体验不好,Facebook 不得不砍掉了动画和其他很耗 CPU 的界面操作。

在看到了应用在某些低端手机上的表现情况之后,Facebook 创建了一些工具,帮助团队了解存在的问题,同时开始改进在这类设备上的用户体验。屏幕大小是必须考虑的一个因素,10% 的 Facebook 用户使用的是分辨率较低(120 DPI)的手机。开发团队决定裁剪用户界面,去掉或者简化窗口小部件(widget)和图标。

Facebook 的工程经理 Andrew Rogers,详细介绍了他们为改进用户体验所做的一些步骤。

图片大小。在 Facebook 的 Android 应用上,图片数据占到了 85%。在 Facebook Messenger 应用中,图片数据占到了网络传输数据量的 65%。应该尽可能减小图片大小。这是通过如下手段实现的:

  • 在服务器上调整图片大小
  • 提供分辨率不同的多份图片:用于新闻摘要(feed)的预览图、用于个人信息显示的缩略图和用于照片存储的较大的图
  • 根据屏幕大小下载小型图片
  • 只有用户放大的时候才使用全尺寸图片;大部分时间,用户只需要较小的缩略图或预览图
  • 在 Android 上,90% 的图片使用 WebP 格式,与 JPEG 格式相比,质量相同的图片大小要小 30%。存在的问题是,Android 4.2+ 才提供了对 WebP 的原生支持,所以之前的 Android 版本上,还需要在设备上将图片转码成 PNG 或 JPEG

网络质量。Facebook 意识到,根据网络类型来确定网络速度还不够。尽管使用的是同样的技术,如 Edge、HSPA 或 LTE 等,某些国家的网络速度可能会比其他国家慢 2 到 3 倍。像印度或巴西,WiFi 的速度要比 LTE 慢,所以最好动态确定真实的网络速度。

为减少下载时间,他们决定:

  • 进一步压缩图片
  • 发出更多并行的请求
  • 关闭自动播放
  • 预取更多内容

为了能够在部署之前在不同的网络上测试其应用,Facebook 创建了 Air Traffic Control 这款工具来模拟 WiFi 上的不同网络连接类型,它能够配置最大带宽、丢包率、上行线路 / 下行线路的往返时延。

预取内容。Rogers 提到的另一个改进用户体验的方式是预取某些内容。对于延迟较高的网络,这特别有用。但是预取也不能过度使用,因为这会填充缓存,再就是预取的数据不能肯定会用到。

Instagram

Tyler Kieft 是 Instagram 的一位 Android 开发工程师,他介绍了他们团队为改进其 Android 应用的性能和用户体验所做的一些调整。其一是使用现代的扁平式设计重写了界面,去掉了渐变效果、抛光色彩和阴影等,这在各种 Android 设备上都带来了性能提升。

扁平化设计还带来了一个效果,实现了资源裁剪。应用不再需要各种颜色的资源,而是只有一种颜色即可。Instagram 将应用的一个视图所需要的资源从 29 个减少到了 8 个。其结果是,UI 显示提速,占用的内存空间减少,冷启动时间下降了 120 毫秒。此外,用户对于新的界面和性能改进反应非常积极。

据 Kieft 介绍,为确定哪里比较慢,他们使用 Android Traceview 和计时语句分析了应用的性能。 然后采用了下列措施:

  • 从冷启动路径中去掉较慢的东西
  • 重写了较慢的代码
  • 将一些东西延迟到一个后台线程中
  • 重复以上步骤(分析、重写)

他们还使用了两步的惰性加载:在 UI 线程上创建单件(singleton)对象,但是在这些对象上执行的动作,比如访问 cache 的磁盘存储信息、加载 HTTP 客户端的证书和反序列化 cookies 等,都放到了一个后台线程上。

另一个减少应用冷启动时间的手段是,使用原生代码代替 WebView,在不同版本的 Android 上,平均节省了 30% 的时间。

查看英文原文: Facebook & Instagram Lessons on Android Development for Emerging Markets

2014-11-16 00:222885
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 150.5 次阅读, 收获喜欢 35 次。

关注

评论

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

创新释放:Atlassian 人工智能引领现代工作

跟YY哥学Jira

人工智能 项目管理 Jira Confluence ChatGPT

提升淘宝商品详情搜索效率,看这篇API接口详解

联讯数据

公司敏感数据被上传Github,吓得我赶紧改提交记录

程序员小富

git

23年总结-对于开发者来说AI带来的影响和AI未来的趋势预测

肥晨

AI

OPPO ColorOS全球创客大赛总决赛在即 加速潘塔纳尔生态成型

极客天地

高效挖掘数据价值,天翼云分析型数据库TeleDB For AnalyticDB申请出战!

极客天地

MatrixOne完成与麒麟软件服务器操作系统的兼容互认

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne HTAP数据库

国内外免费的SCADA软件工具有哪些?

2D3D前端可视化开发

物联网 组态软件 SCADA软件 组态工具 HMI系统

【写作训练营打卡|04】

什么是API数据接口该怎么使用?

Noah

当创建statefulset资源后,k8s组件如何协作

华为云开发者联盟

云原生 k8s 华为云 华为云开发者联盟

大模型训练中CPU高负载与GPU低使用率的优化策略

百度开发者中心

gpu 大模型

大模型训练中错误数据集的影响及应对策略

百度开发者中心

大模型 人工智能’

大模型训练引领AI新时代

百度开发者中心

人工智能 大模型 LLM

从0到100TB,MatrixOne助您轻松应对

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne HTAP数据库

Vue3.0在软件开发中的能力展示

互联网工科生

Vue DOM vue3.0

DAPP智能合约质押挖矿系统开发丨详情开发

l8l259l3365

王炸升级!PartyRock 10分钟构建 AI 应用

伤感汤姆布利柏

人工智能

深入探讨 Swagger Array:开发者的步步为赢指南

Liam

后端 开发工具 swagger API 文档 web 开发

一个 41 岁老程序员的 2023 年总结 - 利用 AI 延长自己的编程寿命

汪子熙

人工智能 AI 总结思考 ChatGPT 2023年

教育行业为什么管理特权账号?

尚思卓越

运维 网络安全

学校建设云教室方案应该考虑哪些?

青椒云云电脑

云教室 云教室解决方案

新一代私有云部署四大优势和案例解读

青椒云云电脑

云电脑平台

如何构建适合工业设计企业的云端图形工作站?

青椒云云电脑

图形工作站

云电脑和一体机有什么区别?

青椒云云电脑

云电脑 桌面云一体机 云桌面一体机

矩阵起源与深圳大学达成专利开放认可合作,坚持科技是第一生产力

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne HTAP数据库

如何进行代码混淆?方法与常见工具介绍

Mint Blockchain,一个聚焦在 NFT 领域的 L2 网络

NFT Research

NFT\ NFTScan Layer 2

Facebook和Instagram的经验:面向新兴市场改进Android开发_Meta_Abel Avram_InfoQ精选文章