写点什么

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:452588
用户头像

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

关注

评论

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

对jdbc的讲解

楠羽

JDBC 笔记 9月月更

轻松理解20种常用AI算法

Baihai IDP

AI 算法

Java 并发编程解析 | 如何正确理解Java领域中的锁机制,我们一般需要掌握哪些理论知识?

Java快了!

Java并发 java;

WAIC 2022 | 洞见科技王湾湾出席BPAA第二届应用算法实践典范,共话前沿算法产业发展

洞见科技

Dubbo Mesh:从服务框架到统一服务控制平台

阿里巴巴中间件

阿里云 微服务 云原生 dubbo

使用 CRD 开启您的 Ingress 可观测之路

观测云

lodash 在vue3+vite中按需加载

木叶🐱

vite Vue3 lodash

蓝凌OA

科技云未来

2022服贸会 | 洞见科技姚明:从智能化到密态化,数据科技向善升级

洞见科技

数据治理的内核:数据质量

小鲸数据

数据治理 数据质量管理 数据质量 数据生命周期

发挥CODING 敏捷开发能力,腾讯云加速提升国产芯片研发效率

科技热闻

技术团队如何高效落地代码CR

慕枫技术笔记

架构 后端 9月月更

用过这个API接口工具后,确实感觉postman有点鸡肋......

Liam

Java Postman swagger API开发 API调式

Vue基础语法--插槽(Slot)基础使用

Sam9029

Vue 前端 基础 9月月更

验证一个小小的问题

艾小仙

Java MySQL 编程 程序员 compact

mysql查询 limit 1000,10 和limit 10 速度一样快吗?如果我要分页,我该怎么办?

Java快了!

MySQL

设计模式的艺术 第七章原型设计模式练习(在某销售管理系统中设计并实现了一个客户类Customer,其中包含一个名为客户地址的成员变量,客户地址的类型为Address。用浅克隆和深克隆分别实现Customer对象的复制)

代廉洁

设计模式的艺术

ShareSDK Android端主流平台分享示例

MobTech袤博科技

an'droid

为什么要用小程序容器做小程序生态

Geek_99967b

小程序 小程序容器 小程序开发

MobLink后台基本配置

MobTech袤博科技

android 开发者 iOS SDK

Dragonfly 基于 P2P 的文件和镜像分发系统

SOFAStack

容器 云原生 镜像 日志 文件

前端食堂技术周刊第 51 期:pnpm v7.10.0、8 月登陆网络平台的新内容、重新思考流行的 Node.js 模式和工具、打包 JavaScript 库的现代化指南

童欧巴

chrome Node React Chrome开发者工具 pnpm

设计模式的艺术 第八章建造者设计模式练习(开发一个视频播放软件,为了方便用户使用,该播放软件提供多种界面显示模式,例如完整模式、精简模式、记忆模式、网络模式等。在不同的显示模式下主界面的组成元素有所差异。例如,在精简模式下只显示主窗口、控制条)

代廉洁

设计模式的艺术

动态规划-编辑距离

wing

面向对象分析与设计的底层逻辑

阿里巴巴中间件

阿里云 云原生

WAIC 2022 | 洞见科技在可信AI论坛联合发布《可信人工智能产业生态发展报告》

洞见科技

观测云&亚马逊云科技「可观测性体验日」北京站圆满落幕

观测云

行业智能化走向何方?昇腾AICE带来的新范式,新起点

脑极体

与紧张为友,享受紧张

宇宙之一粟

读书笔记 个人成长 演讲 9月月更 享受紧张

Koordinator 0.6:企业级容器调度系统解决方案,引入 CPU 精细编排、资源预留与全新的重调度框架

阿里巴巴中间件

阿里云 云原生 Koordinator

ShareSDK iOS端微信如何获取authcode值

MobTech袤博科技

微信 iOS SDK

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