免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

Facebook 开源 Relay 技术预览版

  • 2015-08-21
  • 本文字数:1260 字

    阅读完需:约 4 分钟

为了解决前端渲染网站遇到的性能及 SEO 问题,Facebook 在 2014 年推出了用于构建 UI 的 JavaScript 库—— React 。之后,在 2015 年 1 月份召开的 React.js 会议上,Facebook 又公开了在 React 上应用 GraphQL Relay 框架。近日,Facebook 终于发布并开源了Relay 的技术预览版。接下来,本文就对Relay 进行简要介绍。

首先,本文对React 和GraphQL 进行简要说明。React 框架以其组件和基于组件的设计流程、单向的数据流动、采用虚拟DOM 作为操作对象和在JavaScript 中声明式的描述UI 等特性,为web 应用开发带来了诸多好处,变革着相关开发人员的开发体验。然而,React 在与服务器中的数据进行交互方面存在着一定的问题。客户端与服务器端脆弱的耦合方式经常引起数据相关的问题,而且使得产品的迭代越来越难。而且,开发人员不得不根据产品的发展,不断的重新实现复杂的异步逻辑。另外一方面,GraphQL 是Facebook 已经在原生应用上使用多年的、用于描述复杂嵌套的数据依赖的查询语句。GraphQL 支持更加灵活的查询方式,使得前端与后端工程师可以更加高效的进行合作,成为解决React 中数据交互问题的可能方案。因此,随着React 的崛起,如何在React 中使用GraphQL 已经变为迫切需求。为此,Facebook 在今年初提出了Relay。

Relay 充分吸取了 React 之前的经验和教训,提出了声明式、面向组件的数据抓取方式。声明式的数据抓取意味着 Relay 应用直接指定所需要的数据内容。正如 React 使用的声明式 UI 的一个描述来管理视图更新一样,Relay 以 GraphQL 查询的方式来使用声明式数据。给定这些描述,Relay 自动完成查询打包、异步通信逻辑的管理、数据缓冲以及随着数据变化而自动更新视图等工作。面向组件的方式使得 GraphQL 查询可以根据需求精确描述所需要的数据。这就可以有效避免数据取少或者取多可能引起的问题。

Relay 架构主要包括了 Relay 组件、Action、Relay Store 和服务器四部分。在 Relay 中,每个组件都可以自定义其所需要 GraphQL 数据格式。在组件实例化的时候,它会向 GraphQL 服务器发送请求,然后使用 this.props 从 Relay Store 中访问获取到的数据。而当数据变化时,Relay 通过 Action 通知相应组件更新,并在客户端的 Relay Store 中维护一份数据缓存。此外,为了提高数据传输的效率,Relay 支持开发者自由地组合 React 组件,并自动构建嵌套组件的 GraphQL 查询,把多个组件的小请求合并为一次 GraphQL 请求。

目前,Relay 技术预览版的相关代码已经依托在 GitHub 中。用户利用 git clone 下载版本库后,即可进行安装和体验。由于该版本只是预览版,Facebook 团队表示,Relay 在某些方面肯定存在不完美的地方。该团队会与GraphQL 社区合作,及时进行版本更新。未来,Relay 将会在离线支持、实时更新和扩展等方面进行进一步的发展。


感谢徐川对本文的审校。

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

2015-08-21 19:033448
用户头像

发布了 268 篇内容, 共 121.9 次阅读, 收获喜欢 24 次。

关注

评论

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

APISIX 在君润人力云原生平台的架构实践

API7.ai 技术团队

Apache Kubernetes api 网关 APISIX 用户案例

天天预约 | 2022年11月产品更新

天天预约

小程序 SaaS 软件系统 产品分析 预约工具

双机双工是什么意思?与双机热备有什么区别?

行云管家

双机热备 双机双工

工作中常用的设计模式--适配器模式

lpe234

后端 设计模式 适配器模式 spring-boot

WALLYS/dr6018 vs dr6018s/ipq6018/ipq6010/ipq6000/SFP/ OpenWRT 2x2 2.4G&5G industrial wifi6 moudle

wallysSK

IPQ6010 ipq6018 IPQ6000

基于Lattice的干净架构实践

原力在线

中台 构架 lattice 高可扩展 干净的架构

从recat源码角度看setState流程

flyzz177

React

从输入URL到渲染的过程中到底发生了什么?

loveX001

JavaScript

Node.js 基于区块链的游戏应用的首选

devpoint

JavaScript node.js 区块链 12月月更

AngularJS进阶(二十八)解决AngualrJS页面刷新导致异常显示问题

No Silver Bullet

页面刷新 AngularJS 12月月更

鱼传科技:函数计算,只要用上就会觉得香

Serverless Devs

从react源码看hooks的原理

flyzz177

React

模块一作业

陈实

「架构实战营」

关于K8s中资源服务质量管理Resource Qos的一些笔记

山河已无恙

12月月更

干货 | 如何快速实现BitSail Connector?

字节跳动数据平台

开源 数据引擎 12 月 PK 榜

VoneBaaS荣获第二届中国可信区块链安全攻防大赛优秀案例奖

旺链科技

区块链 产业区块链 VoneBaaS 12 月 PK 榜

React-Hooks源码深度解读

goClient1992

React

meta force佛萨奇2.0系统开发技术方案详解

开发微hkkf5566

EPSS 解读:与 CVSS 相比,孰美?

SEAL安全

12 月 PK 榜 CVSS EPSS 评分系统

可观测性项目对 uprobe 的需求理解与实现

KINDLING

Linux 可观测性 ebpf uprobe

CleanMyMac X2023永久版下载教程及使用许可证

茶色酒

CleanMyMac X CleanMyMac X2023

令人头秃的js隐式转换面试题,你能做对吗

loveX001

JavaScript

函数计算平稳助力鱼传科技应对访问量激增

Serverless Devs

看透react源码之感受react的进化

goClient1992

React

react的useState源码分析

flyzz177

React

百度前端二面常考面试题

loveX001

JavaScript

AngularJS进阶(二十七)实现二维码信息的集成思路

No Silver Bullet

二维码 AngularJS 12月月更

Zebec联合Visa推出实体借记卡持续利好生态,生态通证$ZBC表现强劲

西柚子

技术分享| anyRTC音视频与微信小程序互通实践

anyRTC开发者

小程序 音视频 WebRTC RTMP 视频格式转换

MySQL遵循最左前缀匹配原则!面试官:回去等通知吧

架构师之道

MySQL java面试

深度分析React源码中的合成事件

goClient1992

React

Facebook开源Relay技术预览版_Meta_张天雷_InfoQ精选文章