9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

Netflix 为什么选择使用 React 来提升用户体验

  • 2015-02-03
  • 本文字数:1142 字

    阅读完需:约 4 分钟

为了提升用户体验,在线影片租赁提供商 Netflix 正使用由 Facebook 开源的 React 库对其桌面和移动平台进行重大修改。近日,他们在官方博客上发表了一篇文章,阐述了选择React 的三个关键因素。

首先是启动速度方面的考虑。为了使用户可以无缝地在浏览内容之间进行切换,他们希望降低初始加载时间。这个时间不仅包括下载和处理初始化标记、脚本和样式表的时间,还包括获取数据的时间。因此,他们希望能够找到一种混合解决方案。该方案允许他们在初次加载时通过服务器端渲染提供一屏显示的静态标记,从而降低上面提到的初始加载操作时间。同时,他们还可以通过客户端脚本启用UI 动态元素。

其次是运行时性能方面的原因。为了在Web 和iOS 平台上创建视觉效果特别丰富的用户体验,高效的UI 渲染是关键。即使是在硬件资源限制较小的台式电脑上,一些开销大的操作还是会影响UI 的响应能力,尤其是DOM 操作所导致的重排和重画会降低用户体验。

最后是模块化方面的需求。为了能够快速地构建出新的功能和设计,他们要求前端必须支持各种A/B 测试。比如,有一个测试需要比较9 种不同的UI 设计。这意味着他们需要在测试期间维护10 个视图的代码。那么在测试结束后,将体验最佳的视图产品化以及将其它9 个视图的代码清除掉应该很容易就能实现。

React 不仅能够满足上述要求,而且还相对比较容易掌握。于是,他们就利用 React 的下列特性来缩短应用程序的初始加载时间,提高运行时性能,并实现可伸缩性:

  • “同形的(Isomorphic)”JavaScript——使用 React 可以构建出既能在服务器端运行又能在客户端环境中运行的 JavaScript UI 代码。借助 React,他们可以实现前文所述的混合解决方案。因为 React 可以在没有“活动 DOM(live DOM)”的情况下实现 UI 渲染,比如,使用 React.renderToString 或者 React.renderToStaticMarkup
  • 虚拟 DOM——为了减少 DOM 操作开销,React 将更新应用到虚拟 DOM,然后通过 diff 算法确定 DOM 操作的最小更新集。这比操作真实的 DOM 要快很多。而且,使用 React 就不需要进行传统的数据绑定了。
  • React 组件和 Mixin——React 提供了功能强大的组件 Mixin API。他们大量使用了这些 API,创建可重用的视图,共享常见功能。当对不同设计进行 A/B 测试时,他们将视图实现为由父组件渲染的、单独的 React 子组件。类似地,行为逻辑的差异可以抽象到 React Mixin 中。

文章最后写道:

React 已经超出了我们的需求,为我们创新 Netflix 体验奠定了坚实的基础。

感兴趣的读者还可以看一下 Facebook 是如何使用 React 构建原生 iOS 应用的。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2015-02-03 07:353536
用户头像

发布了 1008 篇内容, 共 361.9 次阅读, 收获喜欢 334 次。

关注

评论

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

2022-09-08:以下go语言代码输出什么?A:5 66;B:5 88;C:7 88;D:以上都不对。 package main func main() { var x = []int{4:

福大大架构师每日一题

golang 福大大 选择题

数据治理(十一):数据安全管理Ranger初步认识

Lansonli

数据治理 9月月更

网络IO是如何一步一步走向零拷贝的

C++后台开发

cpu 零拷贝 C++后台开发 网络io C++开发

mysql基本类型

急需上岸的小谢

9月月更

SpringBoot源码 | prepareContext方法解析

六月的雨在InfoQ

springboot 源码阅读 9月月更 prepareContext

JavaScript 基础知识

喜羊羊

9月月更

转转商业化OCPC产品的护航之旅

转转技术团队

人工智能 计算广告 PID OCPC

Java终极学习路线-共计9大模块/6大框架/13个中间件

小明Java问道之路

Java 架构 JVM 中间件 9月月更

Zilliz 论文入选数据库顶会 VLDB'22

Zilliz

数据库 分布式 云原生 VLDB'22

JavaWeb -JavaBean MVC Filter 监听器 过滤器

喜羊羊

9月月更

【C语言深度剖析】详解strlen与sizeof的区别及用法

Albert Edison

C语言 sizeof 9月月更 strlen

【JavaWeb】Servlet系列——使用纯Servlet做一个单表的CRUD操作

胖虎不秃头

Web java; 9月月更

SD-WAN应用选路方案

阿泽🧸

SD-WAN 9月月更

VUE 项目本地没有问题,部署到服务器上提示错误

HoneyMoose

计网复习二,网络应用

前端小刘不怕牛牛

计算机网络 HTTP 9月月更

讲究卡路里多少的美食出圈了!维小饭被评为“2022中国轻食十大品牌”

联营汇聚

Qt|自定义Widget实现互斥效果问题

中国好公民st

qt QWidget 9月月更

Java 多线程:基础

Java快了!

java;

库调多了,都忘了最基础的概念 <锁与线程篇1>

知识浅谈

线程 9月月更

【JavaWeb】Servlet系列——HttpServletRequest接口详解

胖虎不秃头

Web java; 9月月更

C++学习------cmath头文件的源码学习01

桑榆

c++ 源码阅读 9月月更

[Go WebSocket] 多房间的聊天室(一)思考篇

HullQin

Go golang 后端 websocket 9月月更

javaweb-JSP

喜羊羊

9月月更

云数据库技术|“重磅升级”后再测TDSQL-C

数据库 polarDB 玖章算术 TDSQL-C

融云 x KUPU:印尼蓝领用工的「直聘」样板

融云 RongCloud

互联网

Linux系统安装Redis

Centos 7 redis 底层原理 9月月更

nft系统开发

开源直播系统源码

区块链 NFT 数字藏品 数字藏品软件开发

ChaosBlade Java 场景性能优化,那些你不知道的事

Java快了!

java;

调用 sap.ui.base.ManagedObject 的构造函数时,如何传递绑定路径进去

Jerry Wang

JavaScript SAP SAP UI5 ui5 9月月更

数据科学家、数据工程师和数据分析师三个角色的区别是什么

雨果

数据分析师 数据科学 数据工程师

每日一R「23」回顾基本概念

Samson

学习笔记 ​Rust 9月月更

  • 扫码添加小助手
    领取最新资料包
Netflix为什么选择使用React来提升用户体验_Facebook_谢丽_InfoQ精选文章