写点什么

Facebook 经验:如何保证不同网络环境下的应用体验

  • 2014-09-25
  • 本文字数:1315 字

    阅读完需:约 4 分钟

在刚刚结束的 @Scale 2014 大会上,Facebook 分享了关于移动应用适配方面的演讲, High Scalability 在相关演讲的基础上进行了整理。如何保证移动应用在不同的网络环境、不同的屏幕上都有良好的用户体验一直是个难题,而 Facebook 有遍及全球的用户,他们一直致力于提高用户体验,在大会上,Facebook 重点从团队、技术方面分享了他们的经验。

一开始,Facebook 的应用只针对拥有高配置设备的用户,在低配置设备上,应用体验非常糟糕。而根据调查显示,很多 Facebook 用户使用的手机都是在 2011 年左右生产、双核心、内存小于 1GB。紧接着,为了满足这部分用户的需求,Facebook 专门开发了单独的应用,这些应用在动画切换等方面都做了特殊处理。对于小屏幕的手机,Facebook 也专门设计了适配的应用。根据 API 等级、屏幕大小的不同,Facebook 应用有 20 多个不同的 APK(Android)。

在团队方面,Facebook 以产品为中心来组织团队。每个产品都对应一个单独团队,这个团队负责保证产品的性能以及可靠性。另外会有单独的核心团队负责发现、分析并解决性能方面的问题。核心团队和产品团队各司其职,互相促进。

由于地区的差异,Facebook 用户的网络环境各不相同,所以访问 Facebook 应用的延时也各不相同。为了避免由于网络延迟而影响用户体验,Facebook 主要做了三方面的工作,具体如下:

  1. 减小图片大小(使用 WebP 格式的图片)
    大部分的 Facebook 应用数据都是图片,因此减少图片的大小就可以较少数据的下载量,从而加快下载速度,这一点在高延迟的网络环境下非常重要。Facebook 返回给客户端的图片都做了压缩处理,图片压缩方面业内主要使用 gzip 压缩,常见的服务器都支持 gzip 压缩。另外,Facebook 大规模使用了 WebP 格式的图片,WebP 是谷歌推出的一种新的图片格式,可以将图片大小减少 40%,目前淘宝也有使用这种格式的图片。WebP 不仅可以大幅度减少图片大小,而且还支持透明度和动画。对于一些不支持 WebP 的设备,Facebook 会在客户端把它转码为 JPEG 格式的图片。

前不久,Facebook 也赞助了来自 Mozilla 实验室的 JPEG 图像编码器项目 mozjpeg ,它可以在不降低图像质量且兼容主流的解码器的情况下,提供产品级的 JPEG 格式编码器来提高压缩率以减小 JPEG 文件的大小。感兴趣的读者可以尝试使用。
2. 网络质量检测
Facebook 在每个响应的的 HTTP 头中都提供了 RTT(Round Trip Time)估算,客户端根据平均吞吐量和 RTT 时间来确定网络连接的质量。网络连接质量会大致被评为几个级别:优秀、良好、一般、差。开发人员针对不同的网络连接级别来调整相应的功能,比如增加 / 减少压缩调整并行的请求数量、禁止 / 允许自动播放视频、预加载内容。另外,Facebook 还专门开发了 Air Traffic Control 以支持不同网络环境下的配置文件模拟。
3. 预加载内容
预加载可以使用空闲时间来预先下载 / 加载用户接下来很可能会浏览的资源,在高延迟的网络环境下,内容预加载可以减少用户的等待时间。比如在网络连接不好的情况下,Facebook 会在应用启动时加载基础数据。使用预加载内容方案时要注意不要让后台网络请求阻塞正常的网络请求,这块 Facebook 主要使用了一个优先队列来存储请求。

目前,相关的演讲也已经发布到了 YouTube,读者可以自行观看。

2014-09-25 04:452672
用户头像

发布了 219 篇内容, 共 152.3 次阅读, 收获喜欢 195 次。

关注

评论

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

iofod - Echart 图表全支持

iofod jude

Java 前端 低代码

实操指南:如何为 SAST 工具设置误报基准?

SEAL安全

应用安全 静态应用安全测试 SAST 应用安全测试 软件供应链安全

PSYNC 命令的实现

急需上岸的小谢

9月月更

【死磕JVM】用Arthas排查JVM内存 真爽!我从小用到大

Java快了!

Pipy + Sentinel 实现 Redis 的高可用

Flomesh

Service Mesh 服务网格

奇点云数据云平台发布DataSimba R3.8长期支持版

奇点云

奇点云

2022-09微软漏洞通告

火绒安全

microsoft 安全 终端安全 安全漏洞

华为云宣布全面建设全球初创生态,3年内赋能10000家高潜初创企业

华为云开发者联盟

云计算 创业 创新创业 企业号九月金秋榜

资源使用率提高25%,成本降低90%,云函数是怎么做到的?

最新动态

mysql 查询执行过程

急需上岸的小谢

9月月更

荣耀帐号服务,让用户获取变得更简单

荣耀开发者服务平台

手机 物联网 安卓 移动开发 honor

活动报名| MongoDB 核心功能及其原理分析

MongoDB中文社区

mongodb

【微信小程序】常用组件及基本使用详解

陈橘又青

小程序开发 9月月更

TiDB部署----openEuler2203/2003 单机部署TiDB 6.1.1

TiDB 社区干货传送门

安装 & 部署

住宅代理IP在网络攻击中的作用

郑州埃文科技

代理IP 安全检测 撞库攻击

MODBUS RTU 485 协议简要说明

矜辰所致

Modbus RS485 9月月更

论监控中事件管理的艺术

穿过生命散发芬芳

事件管理 9月月更

数据库发展史2--数据仓库

数据库 数据仓库 叶正盛 玖章

送你5个MindSpore算子使用经验

华为云开发者联盟

人工智能 算子 企业号九月金秋榜

FreeRTOS记录(十、FreeRTOS实现带 I2C 通讯的 ModbusRTU 协议从机实例)

矜辰所致

FreeRTOS 9月月更 ModbusRTU

Redis复制的实现

急需上岸的小谢

9月月更

计算机网络——码元、波特

StackOverflow

编程 计算机网络 9月月更

阿里云视觉智能开放平台2D视频转3D视频开启邀测啦

夏夜许游

人工智能 AI 3D

阿里云视觉智能开放平台商品图智能生成开启邀测啦

夏夜许游

人工智能 AI 电商 图像分割

编译器优化:何为别名分析

华为云开发者联盟

开发 编译器 企业号九月金秋榜

一步步搞懂MySQL元数据锁(MDL)

京东科技开发者

MySQL 数据库 元数据 数据库锁 mdl

阿里云视觉智能开放平台离线人脸识别SDK开启邀测啦

夏夜许游

人工智能 AI 人脸识别 离线包

压测平台在全链路大促压测中的实践

得物技术

中间件 全链路压测 QPS 企业号九月金秋榜

PhotoView——支持图片缩放、平移、旋转的一个优雅的三方组件

OpenHarmony开发者

Open Harmony

力扣151 - 反转字符串中的单词【双指针与字符串的火花】

Fire_Shield

双指针 LeetCode 9月月更

一招教你如何高效批量导入与更新数据

华为云开发者联盟

数据库 sql 后端 企业号九月金秋榜

Facebook经验:如何保证不同网络环境下的应用体验_Meta_小盖_InfoQ精选文章