Chair:支付宝前端团队推出的Node.js Web框架

Chair是支付宝前端团队推出的,基于Node.js的Web框架,适用于大部分的Web应用。

本文简要介绍Chair的设计思想、功能架构和开发状况。

一、Chair的由来和设计思想

历史上,支付宝前端项目都是直接基于Java后端开发的。这种架构下,前端工程师做出网页模板(基于velocity模板引擎的vm文件),交给后端的Java引擎渲染。支付宝采用的Java引擎是名为Sofa的MVC框架。

对于前端工程师来说,这种架构有很多不方便的地方。首先,需要了解后端的实现,并且依赖开发环境中的dev服务器进行调试开发;其次,开发细节需要与后端的 Java工程师沟通,交流成本相当大;最后,难以发起技术创新,因为只要涉及后端的调整,推动起来非常困难。在前端技术日新月异的今天,这已经越来越成为 前端工程师心中的痛。

Chair框架就是在这种背景下诞生的,我们希望通过加入一个Node层,加速前端开发,提升研发效率,提高网站整体性能和系统的可维护性。

作为Sofa的替代,Chair直接与底层的Java服务通信,而客户端浏览器则与Chair通信,这样就不使用Sofa了。前端工程师因此可以完全不碰Java,使用熟悉的JavaScript语言,同时在浏览器和服务器两端进行快速迭代。

事实上,Chair这个名字就是来自跟Sofa的对比,因为两者都能坐人,但是椅子(Chair)比沙发(Sofa)轻多了。支付宝已经有了沙发,我们想再为它添一把椅子。

Chair为前端开发,带来了很多便利。

提高了研发效率,前端工程师直接可以改动服务器,避免了与Java后端不必要的沟通成本。

更清晰的职责划分,前端针对表现层(View)开发,后端针对业务和数据(Controller和Model)开发。

更好的⼯程化,前端自己就能完成单元测试、集成测试和自动发布。

节省人工,同样的组件(比如模板和路由)只需要写一次,不用再为浏览器和服务器各写一遍了。

预期的性能提升,Node作为服务器端时,有很强的HTTP请求处理能力。

目前,Chair已经投入了生产环境,与Sofa各自支持着不同的支付宝Web应用。预计不远的将来,会出现更多基于Chair的Web应用。

二、Chair的结构

Chair的基础代码,是基于Koa框架的再开发,使用的语言是下一代JavaScript——ECMAScript 6,模板引擎是Nunjucks,但也可选用其他引擎。同时兼容Velocity模板,现有绝⼤部分模板⽂件⽆需修改也能正常渲染。

整个框架从浏览器到服务器,一共分成五层:

路由层(routers):适配不同路径的HTTP请求

中间件层(middlewares):加工HTTP请求

控制器层(controllers):部署业务逻辑

服务层(services):提供内部的统一API,供不同业务调用

代理层(proxy):负责与Java服务通信,提供统一格式的数据

除了模板引擎以外,Chair还部署了一些功能组件,比如mock(数据模拟)和logger(日志器)。

Chair根据业务实际需求和现有架构高度定制。虽然从结构上看,Chair可以提供完整的后端功能,但目前主要用于模板渲染和路由。真正的业务逻辑和数据处理,还是要交给后端的Java服务。

三、性能提升

Node的加入,为很多功能提供了很大的性能改进。根据压测的结果,使用Chair(下图的web)比使用原来的方案(下图的portal),响应时间和系统负载能力至少提高一倍以上。

四、Chair的开发进度

12月上旬,Chair发布了0.5版。除了修正Bug,这一版主要添加了以下功能。

支持 cookie session, 不依赖 tair

支持连接 MySQL数据库

支持mvc stat 和 rpc stat 日志统计

支持统一导航 uninav 模板

页面数据模拟 pagemock

====================================分割线================================
文章转载自 开源中国社区[http://www.oschina.net]

时间: 2024-10-27 08:50:19

Chair:支付宝前端团队推出的Node.js Web框架的相关文章

支付宝前端团队详解基于Node.jsWeb框架Chair

Chair是支付宝前端团队推出的,基于Node.js的Web框架,适用于大部分的Web应用. 本文简要介绍Chair的设计思想.功能架构和开发状况. 一.Chair的由来和设计思想 历史上,支付宝前端项目都是直接基于Java后端开发的.这种架构下,前端工程师做出网页模板(基于velocity模板引擎的vm文件),交给后端的Java引擎渲染.支付宝采用的Java引擎是名为Sofa的MVC框架. 对于前端工程师来说,这种架构有很多不方便的地方.首先,需要了解后端的实现,并且依赖开发环境中的dev服务

2014年最火的Node.JS后端框架推荐_node.js

Node.js框架是可以帮助你建立网站应用服务的javascript框架.它可以帮助你更快地开发Web应用 Node.js 是基于Chrome的JavaScript运行环境.可方便地构建快速.可扩展的网络应用.节点. 当涉及到Web应用程序的开发,你就需要JS框架,加快你的开发过程. Node.js有非常多不同类型的框架,如MVC框架,REST API和generators,全栈框架,大量的服务器库,它完全能够提供Web服务,无需使用Apache等外部软件. Node.js使用谷歌的V8 Jav

JavaScript资源:前端和后端的Node.js

文章简介:JavaScript开发者值得收藏的7个资源.  Web 开发者通常会期望自己在 Web 领域的方方面面都是专业级别的人物,JavaScript 开发者也不例外.几年前 JavaScript 似乎还不是那么流行,但现在 JavaScript 可以说是 Web 开发界的"上等公民"了,关于 JavaScript 的资源也大量出现. 我最近一直在用 JavaScript,包括前端和后端的 Node.js.因此想和大家分享一些 JavaScript 库.项目和一般参考的资源,这些资

企业级 Node.js Web 应用解决方案设计的零零总总

年前一直在忙着做新版 Midway 升级的事情,不少同学都知道 Midway 是淘宝的 Node.js Web 应用解决方案,目的是为了更好的做前后端分离,让前端同学开发更简单,生活更幸福(笑). 如今 Midway 5 正式发布了,横跨了几个月的开发个工作,期间带来的感慨,也算是史上最多. Midway 的诞生也有 2 年多的时间,我个人参与维护也有 1 年多,经历了从 v3 到 v5 的变化,最大的感慨莫过于,分分合合,以前总想着灵活性,要做分离,后来就想着统一升级,又合并回去, 折腾的是自

基于Knex.js的Node.js ORM框架 bookshelf

bookshelf 详细介绍 一个基于Knex.js的Node.js ORM框架,支持PostgreSQL,MySQL和SQLite3 简单来说,Bookself是一个优秀的代码库,它易于阅读.理解.可扩展.它不强制你使用任何特定的校验scheme,而是提供灵活有效的关系或嵌套关系加载策略,一级类支持事务.它是一个精益的对象关系映射器(lean Object Relation Mapper),允许你使用原始的knex接口,当你需要自定义查询时,因为它有时并不能完全满足老一套的惯例. Booksh

团队中的 Node.js 具体实践

前天,我们公司前端团队的几个人一起去大搜车参加了芋头所组织的「搜车 Node Party」.这是我第一次参加与 Node.js 相关的线下聚会,如果不算「杭JS」的话. 聚会现场 这次聚会的主题全部是与大搜车现行的业务和技术挂钩的:芋头讲述了团队中 Node.js 的技术演进及未来展望;死月分析了几个常用 ORM 的特点并安利了自己的作品;Plusman 分享了日志监控方案和实践.(相关演示文稿可以到芋头所写的总结中下载) 整场下来,虽说没有醍醐灌顶,但对我们团队接下来要做的事情还是比较有借鉴意

Node.js + Web Socket 打造即时聊天程序嗨聊

前端一直是一块充满惊喜的土地,不仅是那些富有创造性的页面,还有那些惊赞的效果及不断推出的新技术.像node.js这样的后端开拓者直接将前端人员的能力扩大到了后端.瞬间就有了一统天下的感觉,来往穿梭于前后端之间代码敲得飞起,从此由前端晋升为'前后端'. 图片来自G+ 本文将使用Node.js加web socket协议打造一个网页即时聊天程序,取名为HiChat,中文翻过来就是'嗨聊',听中文名有点像是专为寂寞单身男女打造的~ 其中将会使用到express和socket.io两个包模块,下面会有介绍

优化Node.js Web应用运行速度的10个技巧_node.js

Node.js 受益于它的事件驱动和异步的特征,已经很快了.但是,在现代网络中只是快是不行的.如果你打算用 Node.js 开发你的下一个Web 应用的话,那么你就应该无所不用其极,让你的应用更快,异常的快.本文将介绍 10 条,经过检验得知可大大提高 Node 应用的技巧.废话不多说,让我们逐条来看看. 1. 并行 创建 Web 应用的时候,你可能要多次调用内部 API 来获取各种数据.比如说,假设在 Dashboard 页面上,你要执行下面这几个调用: 用户信息 -getUserProfil

node.js WEB开发中图片验证码的实现方法_node.js

用node做web开发很多都可能碰到需要验证码的地方,之前在github上搜索,有一些比如node-captcha等的类库,都需要依赖第三方的图形处理库或者软件,像我之前安装cario这个图形库时,真是费了好大一番劲,但是其实我们只用到了这些图形库的一点点小功能,比如图片的尺寸修改裁剪,或者生产验证码. 先介绍一下CImg这个c++的图形库吧,CImg是一个跨平台的C++的图像处理库,提供了加载.处理.显示.保存等一系列功能,最吸引人的地方是整个图形库就一个CImg.h这个文件,所以非常的便携绿