HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

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

关注

评论

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

计算机原理学习笔记 Day5

穿过生命散发芬芳

计算机原理 4月日更

SQL 性能优化的几条建议

U2647

sql 4月日更

分页场景慢?MySQL迷惑行为解读~

Java架构师迁哥

Github Star 11.5K项目再发版:AAAI 2021 顶会论文开源,80+多语言模型全新升级

百度大脑

飞桨

他人方寸间,山海几千重

清秋

随笔 4月日更 1 周年盛典 我和写作平台的故事

使用Harbor搭建Mirror Registry

xcbeyond

Harbor 4月日更 镜像仓库

每天学一个 Linux 命令(6):cp

民工哥

Linux 程序员 运维

第一个 Go 程序

escray

学习 极客时间 Go 语言 4月日更 Go100

智慧公安重点人员管控系统搭建,实现重点人员动态管控

13828808769

智慧公安

小程序支持MQTT协议

风翱

小程序 websocket mqtt 4月日更

C++系列:Visual Studio(VS)2019登录不上?

Bob

c++ 踩坑经历 编程经验 4月日更

中寰卫星导航卜钢采访:IT年轻人怎么工作、学习和生活(采访提纲)

老猿Python

学习 采访 IT年轻人

Python OpenCV 图像处理之直方图的应用,取经之旅第 26 天

梦想橡皮擦

Python OpenCV 4月日更

只要你不敢以MySQL专家自诩,又岂敢错过这本神书?

Java架构师迁哥

被应用商店下架的应用,该如何下载?

彭宏豪95

效率 App 苹果 4月日更

喜欢回忆过去的人,没有未来

小天同学

成长 自我思考 个人感悟 突破瓶颈 4月日更

算法突击营毕业总结

韩儿

区块链特色农产品溯源平台解决方案

13828808769

溯源 #区块链#

GaussDB(for openGauss)让数据“存得下、算得快、算得准”

华为云开发者联盟

GaussDB(for openGauss) 华为云数据库 数据分布方式 计算下推 数据强一致

每天学一个 Linux 命令(4):useradd/userdel

民工哥

Linux 程序员 运维

工厂模式还不懂?看这里!

IT皮皮蟹

Java 设计模式

OCR 技术如何促进 PDF 文档的数字化转型

Geek_b33b8e

数字化转型 PDF OCR 文件操作

每天学一个 Linux 命令(3):ls

民工哥

程序员 linux运维

算法思考:红包金额生成

程序员架构进阶

Java 28天写作 算法解析 4月日更 微信红包

Zabbix Linux 下源码安装

耳东@Erdong

zabbix 4月日更

VueRouter源码解读:三大核心模块构成

梁龙先森

源码分析 大前端 vue-router

ES9的新特性:异步遍历Async iteration

程序那些事

JavaScript ecmascript 程序那些事 es9

小心,别被eureka坑了

好好学习,天天向上

Java spring 信息安全 springboot Eureka

树莓派4B搭建Pytorch环境

IT蜗壳-Tango

IT蜗壳教学 4月日更

数据库存取策略对比

小舰

4月日更

每天学一个 Linux 命令(5):passwd

民工哥

Linux 程序员 运维 后端

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