2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

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

关注

评论

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

升哲科技携全域数字化方案亮相2022全球数字经济大会

SENSORO

人工智能 大数据 物联网 数字经济

直播|一次镜像,处处运行!如何制作一个 StarRocks Docker 镜像?

StarRocks

C#/VB.NET:从 PDF 文档中提取所有表格

Geek_249eec

C# PDF 表格 VB.NET

以消费场景为驱动的CMDB要怎么建?

鲸品堂

使用常见问题解答软件的好处有哪些?

Geek_da0866

开源一夏 | 手撸代码,Redis发布订阅机制实现

知识浅谈

开源 8月月更

LeaRun.net快速开发动态表单

力软低代码开发平台

使用设备树时对应的驱动编程

贾献华

8月月更

Open Serverless Benchmark Initiative: 华为云联合上海交大发布ServerlessBench 2.0

华为云开发者联盟

Serverless 华为云

为你的“架构”安排定期体检吧!

凌晞

构架 软件架构治理 架构治理

DBPack SQL Tracing 功能及数据加密功能详解

峨嵋闲散人

分布式事务 分库分表 读写分离 dbmesh Database Mesh

今年最火爆的词:商业分析,看这一篇就够了!

博文视点Broadview

电商库存系统的防超卖和高并发扣减方案

京东科技开发者

技术 电商 电商系统

使用JDK的同步容器时,应该避免那些坑

华为云开发者联盟

后端 开发 华为云

突破边界,华为存储的破壁之旅

脑极体

基于BiGRU和GAN的数据生成方法

行者AI

人工智能

面试必问系列之最强源码分析,带你一步步弄清楚Spring如何解决循环依赖

小隐乐乐

Java 面试题 Spring5源码解析

【LeetCode】设计食物评分系统Java题解

Albert

LeetCode 8月月更

实战模拟│微信 JSSDK 实现自定义分享、手机选图拍照、图片音频处理、地理位置、摇一摇等功能

经验分享 微信开发 签约计划第三季 8月月更 jssdk

SENSORO成长伙伴计划 x 怀柔黑马科技加速实验室丨以品牌力打造To B企业影响力

SENSORO

品牌 产业生态 创新生态

Database Plus 的云上之旅:SphereEx 正式开源 ShardingSphere on Cloud 解决方案

SphereEx

数据库 ShardingSphere SphereEx #开源

彻底透彻Docker常用网络模式及应用场景

知识浅谈

开源 8月月更

研发团队数字化转型实践

思码逸研发效能

研发效能 数字化

有点奇怪!访问目的网址,主机能容器却不行

华为云开发者联盟

云计算 主机 云网络 后盾

AIOps智能运维的领跑者擎创科技正式入驻InfoQ 写作社区!

擎创夏洛克AIOps

AIOPS 智能运维 IT运维 大数据运维 智能运维AIOps

JavaScript高级程序设计-迭代器

掘金安东尼

JavaScript 前端 8月月更

如何看待腾讯云数据库负责人林晓斌借了一个亿炒股?

雨果

DaaS数据即服务

不要再使用MySQL online DDL了

Qunar技术沙龙

经验共享|在线文档协作:企业文档处理的最佳选择

Baklib

浅谈游戏音效测试点

行者AI

游戏测试

直播系统聊天技术(八):vivo直播系统中IM消息模块的架构实践

JackJiang

网络编程 架构设计 即时通讯 IM

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