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)关注我们,并与我们的编辑和其他读者朋友交流。

Facebook告诉我们如何构建网站相关推荐

  1. k8s crd构建方法_告诉您正在构建没人想要的东西的8种方法(以及处理方法)

    k8s crd构建方法 by Geoffrey Bourne 杰弗里·伯恩(Geoffrey Bourne) 告诉您正在构建没人想要的东西的8种方法(以及处理方法) (8 ways to tell y ...

  2. 扎克伯格被美国一刊物评为“年度恶人” Facebook为世界最差网站

    12月27日消息,据国外媒体报道,Facebook创始人马克 · 扎克伯格被美国一杂志刊物<新共和>杂志评为"年度恶人",他创建了"世界上最糟糕的网站&quo ...

  3. 《从零构建前后分离的web项目》:前端完善 - 手把手教你快速构建网站布局

    添砖加瓦 - 手把手教你快速构建网站布局 项目地址 本章源码地址 文章地址 本文为方便讲述重构去除了 Element.vux 库,用了最近比较火的 bulma 轻量.快捷.易读. 项目截屏 Layou ...

  4. windows下vue-cli及webpack 构建网站(二)导入bootstrap样式

    1.先安装好vue-cli,如果还没有安装好的可以参考:<windows下vue-cli及webpack 构建网站(一)环境安装> 2.安装好之后Vue的欢迎界面,我们要做个例子导入boo ...

  5. windows下vue-cli及webpack 构建网站(四) 路由vue-router的使用

    windows下vue-cli及webpack 构建网站(一)环境安装 windows下vue-cli及webpack 构建网站(二)导入bootstrap样式 windows下vue-cli及web ...

  6. windows下vue-cli及webpack 构建网站(三)使用组件

    1.本文章是建立在<windows下vue-cli及webpack 构建网站(一)环境安装>和<windows下vue-cli及webpack 构建网站(一)导入bootstrap样 ...

  7. 利用eyoucms快速构建网站

                                利用eyoucms快速构建网站 1.最近公司需要做一个简单的宣传网站,并且需要前后台!网站地址:http://47.104.177.254 2. ...

  8. 程序员的图画书:《HTMLCSS设计与构建网站》

    无意中接到CSDN的赠书通知,当时随手点了一本自己相对熟悉点的<HTML&CSS设计与构建网站>.很快,书就如约寄到,花花绿绿的,和我想像的专业书完全不一样,随手翻了翻,全彩页印刷 ...

  9. 全面解读Facebook加密货币——从零开始构建Libra区块链

    文:文学 来源: 火星财经 6月18日下午5点,Facebook加密货币项目Libra白皮书正式发布. 根据白皮书描述,Libra的使命是建立一套简单的.无国界的货币和为数十亿人服务的金融基础设施. ...

最新文章

  1. eclipse.ini内存设置
  2. [lcm] Qualcomm平台的显示屏lcd驱动移植步骤
  3. 给定一个字典,通过查找这个字典,替换给定的字符串中的中文为英文
  4. 【错误记录】PyCharm 运行 Python 程序报错 ( PEP 8: E402 module level import not at top of file )
  5. Funtion:POPUP_TO_DECIDE_LIST
  6. javascript读取xml文件读取节点数据的例子
  7. php 递归函数自调用函数,PHP闭包实现函数的自调用实现递归
  8. CheckBox控件
  9. [读码][js,css3]能感知鼠标方向的图片遮罩效果
  10. 大一C语言大作业ip合法性,c语言实现判断ip地址是否合法
  11. JS实现图片翻书效果
  12. 小D课堂 - 零基础入门SpringBoot2.X到实战_第5节 SpringBoot部署war项目到tomcat9和启动原理讲解_23、SpringBoot2.x启动原理概述...
  13. 2019.11.13
  14. Python从零到就业
  15. AI将光子时间转换成3D图像,通过时间来可视化世界
  16. HTTP权威指南------URL与资源
  17. 我们都需要时间,成为更好的人(转载)
  18. 简单的自动化测试模型(python+selenium)
  19. androidPN java.lang.NoClassDefFoundError: org.androidpn.client.解决方法
  20. BZOJ 1115: [POI2009]石子游戏Kam

热门文章

  1. 遍历所有点的最短路径matlab_运筹学实验8 最短路的求解
  2. python 线性拟合 图_python线性拟合
  3. CentOS误删python环境后怎么办?
  4. EclipseLink+H2 快速搭建JPA开发环境
  5. [设计模式-行为型]观察者模式(Observer)
  6. UTF-8的BOM头
  7. php读取js为文本,PHP / JS文本差异
  8. python实现算法改进_独门秘籍,如何从零开始用Python实现感知算法?
  9. Python 使用pdfplumber 提取PDF页面表格的内容
  10. Jackson安全漏洞版本升级