写点什么

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

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

关注

评论

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

Java完全自学手册,从外包到大厂,再到年薪100万技术大佬都靠它

JAVA活菩萨

Java 程序员面试 大厂技能 秋招 大厂面经

Rust 入门指南(使用JSON)

王泰

rust

leetcode 20. Valid Parentheses 有效的括号(中等)

okokabcd

LeetCode 数据结构与算法 栈和队列

SpringMVC(二、请求和响应)

开源 springmvc 8月月更

开源一夏│别逗,作为程序员你竟还没参与过开源项目?

开源 经验分享 签约计划第三季 8月月更

架构师学习心得总结

泋清

#架构实战营

在北京参加UI设计培训到底怎么样?

小谷哥

腾讯SpringBoot高阶笔记,限时开源48小时

冉然学Java

编程 springboot 笔记 java 日志 #开源

结合实际聊聊电平转换电路(常用电平转换电路总结)

矜辰所致

电路设计 8月月更 电平转换电路

面向推荐的汽车知识图谱构建

之家技术

人工智能 机器学习 知识图谱 汽车

不得不服!真心被这份阿里大牛开源的“全彩版图解HTTP手册”折服了

JAVA活菩萨

Java 程序员面试 大厂技能 秋招 大厂面经

爆了!1213页LeetCode算法刷题神册(全彩),GitHub万星仅是开始

JAVA活菩萨

Java 程序员面试 大厂技能 秋招 大厂面经

看完腾讯大佬90天整理的“Redis深度笔记”,我直接当场膜拜

Java工程师

Java redis 源码

Github爆火!程序员疯抢的Java面试宝典(PDF版)限时开源

Java工程师

Java 面试 大厂

国际计费系统基于Sharding-Proxy大数据迁移方案实践

京东科技开发者

数据库 系统 数据迁移

从TRPO到PPO(理论分析与数学证明)

行者AI

dubbo 长连接

石臻臻的杂货铺

dubbo 8月月更

数据建模已死,真的吗?

Kyligence

数据建模 数据模型 数据指标

R7 6800H标压处理器+RTX 3050独显 无畏Pro15锐龙版高能开卖

科技热闻

《数字经济全景白皮书》银行业智能营销应用专题分析 发布

易观分析

金融 银行 白皮书 智能营销

双Q合璧:RabbitMQ与RocketMQ,电子版手绘脑图+学习指南+面试等

冉然学Java

RocketMQ RabbitMQ 架构设计 笔记 java 日志

兆骑科创创业大赛竞赛平台,双创服务,投融资对接

兆骑科创凤阁

宁夏等保测评机构有哪些?如何选择?

行云管家

等保 堡垒机 等级保护 等保测评 宁夏

深圳堡垒机厂家有哪些?重点推荐哪家?

行云管家

网络安全 堡垒机 深圳 运维审计

java软件培训费用怎么算

小谷哥

vivo手机上的系统级消息推送平台的架构设计实践

JackJiang

网络编程 架构设计 消息推送 即时通讯 即时通讯IM

【大厂面试真题解析】蔚来数字化业务后端一面(2022.8.6)

面试官问

后端 面试题 大厂面试 面经分享 蔚来

太厉害了!华为大牛终于把MySQL讲的明明白白(基础+优化+架构)

冉然学Java

Java MySQL 编程 架构 微服务

.NET现代应用的产品设计 - DDD实践

MASA技术团队

.net DDD 实战 MASA Framewrok

关于使用WebStorm两年所总结的一些常用插件和功能

安安安

前端 webstorm

兆骑科创创新创业大赛平台,人才引进,项目路演

兆骑科创凤阁

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