为什么Facebook要将视频从Flash全面迁移到HTML5?
英文原文:Why we chose to move to HTML5 video
编者按:Facebook 前端高级工程师 Daniel Baulig 解释了 Facebook 为什么要将视频全面迁移到 HTML5,包括这样做的好处,带来的挑战和解决办法。
最近,我们将 Facebook 网络中的所有视频全部从 Adobe Flash 迁移到了HTML5。我们将继续与 Adobe 合作,为我们平台上的游戏提供一个可靠、安全的 Flash 体验,但我们会在所有的浏览器中默认使用 HTML5 技术播放视频。
从开发速度到易访问性,HTML5 提供了很众多好处。Facebook 体系庞大,需求复杂,迁移到 HTML5 能让我们更好地去提升创新的速度和规模。
HTML5 的优点
开发速度
使用 Web 技术使我们能够利用开源社区和 Facebook 中已有的优秀浏览器工具,不必重新编译代码,并能够在浏览器直接应用变化,从而让我们得以快速行动。
可测性
我们在 Facebook 有一个优秀的测试基础设施。迁移到 HTML5 视频后,我们可以自由地使用自己基础设施里所有的 web 工具,比如 Jest 和 Webdriver。
易访问性
HTML5 使我们能够建立一个完全支持屏幕阅读器和键盘输入访问的播放器。我们可以利用 HTML5 提供的辅助工具让视力障碍人士更容易地使用我们的产品。让所有人都能用上 Facebook 是我们使命(让世界更加开放和互联)中的一个重要组成部分。
我们必须应对的挑战
获得正确的日志
视频日志有助于我们了解人们如何使用视频播放器以及播放器的工作情况。我们会向公众分享一些数据,例如视频观看次数和视频发布者,而我们会使用其他的一些数据来确定应该将多少以及哪些视频展现给人们。我们必须确保在同一场景中,新的视频播放器记录的数据和老的播放器记录的数据一致。由于配置差异和其他的一些细节,要做到这一点异常的困难。为确保日志数据的正确性,我们创建了一个测试套件,在相同的用户交互场景下,同时运行两个视频播放器,然后验证日志记录是否一致。这样,我们才能确保新的 HTML5 视频播放器的报告数据会有一个很高的可信度。
浏览器 bug
在将视频转移到 HTML5 技术之前,我们要解决的一个主要问题是各种浏览器中存在的各种关于 HTML5 视频的 bug。在 Chrome 中使用 SPDY 协议的一个具体 bug 会导致浏览器在 News Feed 上停止加载和播放视频。我们最终确定了这个问题是由于同时加载了太多的视频触发的,所以我们减少了视频同时加载的数量,并确保如果加载的视频不再需要时我们会尽快将它们删除。
在旧浏览器上的糟糕表现
从理论上讲,现在使用的大多数浏览器都支持 HTML5 视频。然而,在实践中我们发现了很多老版本浏览器上使用 HTML5 播放器时会比使用 Flash 播放器表现更差。此外,我们还看到其他的一些错误,比如更长的加载时间和整体上更糟的体验。因此我们决定首先只在一小部分浏览器上推出 HTML5 播放器,然后一旦我们提升了性能并修复了小 bug,我们会逐渐推向更多的浏览器版本和操作系统。这就是为什么我们一直等到最近才在所有的浏览器中(除了很小的一部分)将视频播放技术默认切换到 HTML5。
页面加载时间变长
我们在推出 HTML5 播放器时面临的最后一个主要问题是,加载 Facebook 的时间变长了。在 Facebook,我们十分关心我们提供给人们的体验。用户需要多久加载 Facebook 是我们衡量用户体验的一个重要因素。当我们发布了 HTML5 播放器后,我们注意到,用户平均加载 Facebook 所花费的时间有所增加。通过修复几个小的性能问题,并进行了多项细微的优化,我们终于看到了一个让我们感到高兴的水平。
对指标和用户体验的影响
使用 HTML5 视频技术不仅简化了我们开发过程,同时也提高了人们在 Facebook 上的视频体验。切换到 HTML5 后,视频的播放速度更快了,人们点赞、评论和分享视频的数量更多了,并且用户报告的错误更少了。我们做出这项调整后,人们似乎开始在视频上花费更多的时间。
视频是你与周围的世界进行互联的一个精彩渠道,而我们很高兴地看到我们在使用 HTML5 技术后,能使 Facebook 的视频体验变得更好。
本文由WeX5君整理,WeX5一款开源免费的html5开发工具,H5 App开发就用WeX5!
阅读其他app 开发相关文章:http://wex5.com/cn/?p=3443
为什么Facebook要将视频从Flash全面迁移到HTML5?的更多相关文章
- FaceBook要在视频领域打败YouTube?
据<纽约时报>报道,FaceBook正在探索一项新的策略来直接把音乐视频嵌入到用户的News Feeds中.目前,具有代表性的视频网站有YouTube和Vimeo,它们可以在社交网络上分享 ...
- 可进可退,jQuery图片、视频、flash播放插件prettyPhoto使用记录
一.prettyPhoto简介 prettyPhoto是一款基于jquery的轻量级的lightbox图片播放浏览插件,它不仅支持图片,还同时支持视频.flash.YouTube.iframe和aja ...
- 让Flash内心崩溃的HTML5历史
对于HTML5,在今天这个互联网时代,大部分人应该至少都听说过这个名字,或许很多人对HTML5的了解都起于一句话:FLASH杀手. HTML5其实早已不是什么新鲜的事物了,其最初的雏形早在2004年就 ...
- Windows 10 (or 8)Chrome 观看视频发生flash不能加载,即"could't load plugins"原因之一
最近一直如题,不能看视频,后来发现从一个已经使用管理员权限打开的应用转到Chrome就可以加载flash,而从桌面打开Chrome就加载不了. 今天再次查找信息,从Ubuntu下Chrome不能加载f ...
- 如何下载网页上的视频和flash的方法
下面介绍一种下载视频的简便方法,这种方法不需要安装任何下载软件,而且适合所有 FLV(Flash Video)格式的视频文件. 第一步 清空Temporary Internet Files(临时网络文 ...
- 网页中创建音频、视频和Flash等多媒体:object元素
<object>元素:它主要用于定义网页中的多媒体,比如音频.视频.Java applets.PDF.ActiveX和Flash.Object标签是成对出现的,在object标签内可以使用 ...
- 浏览器中显示视频,flash等的代码处理
window.flashView=function(flash_url){ var html=''; html+='<div id="obj_flash_div">'; ...
- 播放视频插件swfobject.js与Video Html5
播放视频的方法: 方法一. 使用HTML5播放 <video src="./files/Clip_480_5sec_6mbps_h264.mp4" width="1 ...
- 无需Flash实现图片裁剪——HTML5中级进阶
前言 图片裁剪上传,不仅是一个很贴合用户体验的功能,还能够统一特定图片尺寸,优化网站排版,一箭双雕. 需求就是那么简单,在浏览器里裁剪图片并上传到服务器. 我第一个想到的方法就是,将图片和裁剪参数(x ...
随机推荐
- Wireshark抓包工具使用教程以及常用抓包规则
转载:http://fangxin.blog.51cto.com/1125131/735178 Wireshark是一个非常好用的抓包工具,当我们遇到一些和网络相关的问题时,可以通过这个工具进行分析, ...
- Eclipse常用快捷键集合
一.通用快捷键 [ALT+/] 此快捷键为用户编辑的神级好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁下 [Ctrl+T] 搜索当前接口的实现类 [Ctrl+O] 显示类中方法和 ...
- Android基本控件之GridView
我们在使用手机的过程中,会看到一些图片配上文字的一些情况,今天我们就来介绍一下安卓控件的GridView GridView组件用来以网格方式排列视图,与矩阵类似,当屏幕上有很多元素(文字.图片或其他元 ...
- LeetCode 203
Remove Linked List Elements Remove all elements from a linked list of integers that have value val. ...
- windows 端搭建nfs 服务器
因为最近虚拟机桥连模式总是用不了会出问题,所以今天花了半个小时研究了一下在Windows主机下搭建一个nfs服务器进行文件传输. 其实步骤很简单,如下: 1. 下载NFS Windows服务器软件,我 ...
- javascript工具--控制台详解(转自 阮一峰博客)
大神这篇博客是写在2011年,主要介绍 “Firefox” 浏览器插件 “Firebug” 的操作,如今主流浏览器对控制台都已经提供了很好的支持.我自己用的最多是谷歌的 “chrome” 浏览器,下面 ...
- Ehcache(2.9.x) - API Developer Guide, Key Classes and Methods
About the Key Classes Ehcache consists of a CacheManager, which manages logical data sets represente ...
- Android 线程Thread的2种实现方法
在讲解之前有以下三点要说明: 1.在Android中有两种实现线程Thread的方法: ①扩展java.long.Thread类: ②实现Runnable()接口: 2.Thread类是线程类,它有两 ...
- Sqlite事物与锁
1事务 事务定义了一组SQL命令的边界,这组命令或者作为一个整体被全部执行,或者都不执行.事务的典型实例是转帐. 2事务的范围 事务由3个命令控制:BEGIN.COMMIT和ROLLBACK.BEGI ...
- zookeeper启动报错(数据目录权限不对)
zookeeper启动报错日志: 2016-11-16 11:19:43,880 [myid:3] - INFO [WorkerReceiver[myid=3]:FastLeaderElection@ ...