写点什么

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

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

关注

评论

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

T-TDSQL的核心理念,为数据赋能

腾讯云数据库

数据库 tdsql

深入理解 Linux 的 epoll 机制及epoll原理

Linux服务器开发

网络编程 epoll Linux服务器开发 IO多路复用 Linux后台开发

挑战进阶教程,和MindSpore更近一步!

Geek_6cdeb6

mindspore

云原生架构下的持续交付实践

百度Geek说

架构 云原生 后端

自助售货机主板要注意哪几个方面?

双赞工控

安卓主板

多线程环境下,程序运行真是危机四伏

Java 架构 面试 后端 多线程

数据湖特点

奔向架构师

数据湖 9月日更

Python——Map-Reduce

在即

9月日更

如何实现 iOS 短视频跨页面的无痕续播?

阿里云CloudImagine

ios 阿里云 Video播放器 视频云

爬虫初探: 重定向处理与新闻明细页解析

程序员架构进阶

Python 实战问题 9月日更 spider

多租户的共享与隔离

金蝶天燕云

云计算 多租户

关于技术团队搭建&管理的一些思考

LigaAI

团队管理

【Vuex 源码学习】第二篇 - vuex 插件安装 install 逻辑

Brave

源码 vuex 9月日更

T-TDSQL的核心技术

腾讯云数据库

数据库 tdsql

JVM专题01-类加载机制详解

JustRunning

javacore JVM 深入理解JVM Java类加载

阿里菜鸟+腾讯IEG面经(阿里5面,腾讯8面)无限秽土转生

Java 程序员 架构 面试 计算机

区块链将帮助监管科技突破壁垒,刺激金融市场的监管活力

CECBC

TDSQL原创技术的出发点

腾讯云数据库

数据库 tdsql

跟着我乔鲁诺学面试(大误)

姬翔

9月日更

使用PaddleNLP打造精准文献检索系统,看万方系统升级放大招!

百度大脑

人工智能 nlp 飞桨

影像篡改与识别(三):人工智能时代

腾讯安全云鼎实验室

AI 影像识别

百分点认知智能实验室:智能校对的技术原理和实践

百分点科技技术团队

学生管理系统详细设计

缘分呐

设计 学生管理系统架构

T-TDSQL的典型应用

腾讯云数据库

数据库 tdsql

被腾讯问蒙的各种Redis复杂问题

hanaper

【直播预告】从校园学习到职场实践——淘系技术开学季特别分享系列

阿里巴巴大淘宝技术

程序员 应聘tips

低代码在这些方面充满优势

低代码小观

程序员 低代码 企业管理 开发平台 低代码开发

Vue进阶(幺幺幺):实现浏览器全屏

No Silver Bullet

Vue 9月日更

Flutter 多引擎支持 PlatformView 以及线程合并解决方案

字节跳动终端技术

字节跳动 大前端 跨平台 火山引擎

如何利用极狐GitLab CI/CD 完成 Jenkins 的迁移

极狐GitLab

CI/CD #GitLab

GaussDB(for MySQL)如何快速创建索引?华为云数据库资深架构师为您揭秘

华为云数据库小助手

华为云 GaussDB 华为云数据库 GaussDB(for MySQL)

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