AICon 上海站|90%日程已就绪,解锁Al未来! 了解详情
写点什么

Facebook 告诉我们如何构建网站

  • 2015-02-15
  • 本文字数:1241 字

    阅读完需:约 4 分钟

Eric Florenzano 最近在自己的博客上发表了一篇题为《Facebook 教我们如何构建网站》的文章,他认为软件开发有些时候需要比较大的跨越,而这将会在2015 年再次上演,主角们则是Facebook 的React.js、Relay 和GraphQL。

Eric Florenzano 在该文章中提到:2003 年 Brad Fitzpatrick 发布了 Memcached,由此开启了 LiveJournal 架构的时代;2004 年 Google 发布了 MapReduce 论文,由此诞生了 Hadoop 并开始风靡世界;2007 年 Amazon 发布了 Dynamo 存储系统,让我们知晓了如何通过线性扩展的方式让数据库和应用程序一起工作,并导致了 Cassandra、Riak 等数据库的产生;2010 年 Twitter 教会了我们如何通过客户端模板让服务器端变成一些简单的 API,并引发了 Web 应用的又一次大转变;2012 年 Google 发布了 Angular.js 1.0,并最终成为流行的 Web 开发框架,这一切都有一个共同点,那就是:公司或者创业团队从生产中得到了沉痛的教训,从失败中找到了向前的出路,然后在将自己的技术突破共享出来的时候引发了一系列的变革。Fitzpatrick 相信,在 2015 年 Facebook 将会通过 React.js、Relay 和 GraphQL 三把利剑引发 Web 应用开发的另一次跨越。

Fitzpatrick 做出如此判断的理由主要是基于 Facebook 的员工在一些演讲中所透露出的 Web 开发理念。例如,Pete Hunt 在 2013 年的 JSConf 上做了题为《React:重新思考最佳实践》的演讲,讲述了Facebook 之所以会避开某些“最佳实践”的原因,Pete Hunt 认为JS 模板分离了技术,但是并没有分离关注点,而框架并不知道如何分离关注点,解决这一问题的方案是组件,要充分利用JavaScript 的能力,削弱模板的作用;Daniel Schafer 和Jing Chen 在2015 年的React.js Conf 上讲述了 Facebook 如何通过 GraphQL 改变既有的数据获取方式,让开发者更容易地在 React 应用中获取数据;Christopher Chedeau 在《React:CSS in JS》中讲述了在大规模使用CSS 时所面临的问题以及如何通过JS 来解决。

总的来说,Facebook 提出的Web 开发理念可以概括为:将应用分解为一个个独立的组件,与该组件相关的样式、标记、验证以及数据要求都放到组件定义的内部,对于自我渲染所需的所有数据每一个组件都有明确的声明且保存在该组件内部,同时对于哪些行为会改变组件的状态,组件状态改变之后会有哪些反应也要有明确的定义。通过这种方式编写的组件能够封装它自身的逻辑,使得组件高内聚,组件之间低耦合,增强了复用性,同时也降低了开发人员的运维难度和复杂性。

毫无疑问,Facebook 提出的技术与理念对于大部分Web 网站开发团队而言还是有一定借鉴意义的,其中的思想也值得我们深思与学习,但是Fitzpatrick 的判断是否真的会实现,Facebook 的React.js、Relay 和GraphQL 是否会引发Web 开发的再一次变革,只有等待时间来验证了。


感谢郭蕾对本文的审校。

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

2015-02-15 08:295484
用户头像

发布了 321 篇内容, 共 124.4 次阅读, 收获喜欢 19 次。

关注

评论

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

redhat运维-ftp服务故障

阿柠xn

Linux 运维 ftp 11月月更

企业级 Angular 应用路由路径自定义配置和开发的案例分享

汪子熙

typescript 前端开发 angular Web应用 11月月更

Linux系统中CPU占用率较高问题排查思路与解决方法

A-刘晨阳

Linux 运维 cpu 11月月更

Linux系统保存文件命令的详细介绍

源字节1号

软件开发 前端开发 后端开发 小程序开发

vue实战中的一些小技巧

yyds2026

Vue

vue实战-完全掌握Vue自定义指令

yyds2026

Vue

Java中的BigDecimal比较大于小于等于,四舍五入保留几位(setScale方法详解),加减乘除取余

共饮一杯无

Java BigDecimal 11月月更

荣耀开发者大会预约有礼

荣耀开发者服务平台

开发者 手机 开发者大会 荣耀 honor

vue实战-深入响应式数据原理

yyds2026

Vue

手撕常见JS面试题

helloworld1024fd

JavaScript

产品待办列表PBL与产品需求文档PRD的本质区别

ShineScrum

Scrum PRD 产品待办列表 PBL 产品需求文档

HarmonyOS 3.1版本发布,全面进入声明式开发

HarmonyOS开发者

HarmonyOS

用了8年MQ!聊聊消息队列的技术选型,哪个最香!

小小怪下士

Java RocketMQ RabbitMQ 消息队列

技术分享| Etcd如何实现分布式负载均衡及分布式通知与协调

anyRTC开发者

分布式 etcd 通知 式负载均衡 协调

如何使用ModelBox快速提升AI应用性能

华为云开发者联盟

人工智能 华为云 ModelBox

质量评估模型助力风险决策水平提升

百度Geek说

机器学习 企业号十月 PK 榜 智能测试 质量评估模型

腾讯前端高频手写面试题

helloworld1024fd

JavaScript

关于软件物料清单(SBOM),你所需要了解的一切

SEAL安全

安全 软件物料清单 SBOM

算法基础:离散化及模板详解

timerring

算法 11月月更 离散化

python中类与对象的动态性,混入机制

乔乔

11月月更

Wallys/IPQ4018/IPQ4028 2x2 2.4Ghz 2x2 5Ghz Industrial WIFI5 router/Support 11ABGN/AC

Cindy-wallys

IPQ4018 IPQ4028 2.4G&5G

Apache Pulsar 社区年度峰会 Pulsar Summit Asia 2022 即将召开

腾源会

大数据 开源

zabbix添加自定义监控项&告警(邮件)

A-刘晨阳

Linux 运维 zabbix 11月月更

【docker】导入镜像报错磁盘空间不足的解决方法 && 【docker】修改默认的存储路径

A-刘晨阳

Docker Linux 运维 11月月更

能否手写vue3响应式原理-面试进阶

helloworld1024fd

JavaScript

Wallys/ DR9074-6E QCN9074 WIFI 6E 802.11AX 4X4 6GHz/ industrial M.2 card / DR9074-6E(PN02.7)

Cindy-wallys

m.2 QCN9074 WIFI 6e

浅谈HTTP缓存与CDN缓存的那点事

京东科技开发者

缓存 性能 Web CDN HTTP缓存

记一次京东前端面试被问到的题目

helloworld1024fd

JavaScript

数据结构学习笔记(二)

lxmoe

数据结构 学习笔记 11月月更

ElasticSearch深度分页详解

京东科技开发者

数据库 elasticsearch 分布式搜索引擎 分布式实时搜索引擎

数据结构学习笔记(一)

lxmoe

数据结构 学习笔记 11月月更

Facebook告诉我们如何构建网站_Meta_孙镜涛_InfoQ精选文章