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]
Chair:支付宝前端团队推出的Node.js Web框架相关推荐
- 面向前端与未来标准的Node.js Web 框架再进化
Web 开发一直是 Node.js 的主流方向,无论新人必学的 Express / Koa,或者是社区流行的企业级框架 Egg / Nest,各类 Web 框架层出不穷.本次分享来自阿里巴巴前端技术专 ...
- Node.js Web 框架再进化 - 面向前端与未来标准
大厂技术 高级前端 Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交流群 Web 开发一直是 Node.js 的主流方向,无论新人必学的 Express / Koa, ...
- 18个我最推荐的Node.js Web框架和工具
Node.js是一个底层平台.为了方便开发者的工作变得简单高效,社区诞生了超过上千个库. 随着时间的推移,有很多优秀的库可以供大家选择,下面是不完全选择列表: ExpressExpressExpres ...
- node.js web框架_使用Node.js进行Web爬取的终极指南
node.js web框架 So what's web scraping anyway? It involves automating away the laborious task of colle ...
- Fastify 2.2.0 和 1.14.5 发布,极速 Node.js Web 框架
百度智能云 云生态狂欢季 热门云产品1折起>>> Fastify 2.2.0 和 1.14.5 发布了.Fastify 是一个高度专注于以最少开销和强大的插件架构为开发者提供最佳 ...
- Fastify 2.0.1 和 1.14.3 发布,极速 Node.js Web 框架
开发四年只会写业务代码,分布式高并发都不会还做程序员? Fastify 2.0.1 和 1.14.3 发布了.Fastify 是一个高度专注于以最少开销和强大的插件架构为开发者提供最佳体验的 We ...
- 【NodeJS】关于Node.js Web框架Koa的中间件编写以及如何理解洋葱模型
文章目录 Koa入门 1.1 中间件的使用 1.2 路由该怎么写 1.2.1 原生路由 1.2.2 利用koa-router中间件实现 1.2.3 文件路径匹配路由 1.3 静态服务器 1.3.1 k ...
- Node.js Web开发框架
Node.js非常适用于Web开发,但是现在无论是一个网站,还是Web App都已经成为包括很多不同部分,如前端.数据库.业务模块.功能模块等等的大型项目,使用Node.js从零开始进行Web开发,也 ...
- 10个最好的 Node.js MVC 框架
Node.js 是最流行的 JavaScript 服务端平台,它允许建立可扩展的 Web 应用程序.Node.js 包含不同类型的框架,如 MVC 框架.全栈框架.REST API 以及大量的服务器 ...
- web前端学习笔记之Node.js
文章目录 01 浏览器中的JavaScript运行环境 02 什么是Node.js 03 安装Node.js 04 使用Node运行JS代码 05 fs模块 文件操作 05.1 什么是fs模块 05. ...
最新文章
- GAAFET与FinFET架构
- org.hibernate.AnnotationException: No identifier specified for entity
- 查看TCP进程各状态连接数 IP封掉 的两个脚本
- [导入]MsAjax Lib- Array.remove 函数
- Qt for Python 信号和槽的使用详解
- mysql把latin1编码的中文转成gbk(或utf8)编码
- 【01】《正则表达式必知必会》(已看)(仅存放)
- 活动服务器优化 暂时关闭,服务器优化之关闭不必要的服务
- select获取下拉框的值 下拉框默认选中
- SLAM无人车 map_server在代码中切换地图,地图保存
- java插件已崩溃怎么处理_java.lang.IllegalArgumentException:插件已初始化
- 硬盘安装Fedora 9成功
- 华为USG6000系列防火墙的Console密码重置过程
- 数据结构(一)、二叉树(BT),二叉查找树(BST),平衡二叉树(AVL树)
- Python图形处理
- 苹果手机使用计算机网络,苹果安卓手机使用usb共享网络给win10电脑的操作方法...
- 关于JPEG、PNG、GIF、WEBP图片格式的理解与使用场景
- OpenWRT安装SIM7600CE 4G模块驱动
- 鸿蒙系统最便宜的手机,鸿蒙手机6月2日上市 手机友商不大可能转投鸿蒙系统
- SAP库存管理报表(含无价厂)
热门文章
- nginx rewrite 参数和例子+常用Rewrite伪静态法则
- Qt--样式表设置按钮样式
- ERP软件公司选型的重要根据
- LeetCode_回文数(三种解法-Java)
- 只有程序猿才知道的12个人艰不拆的真相
- 笔记本此计算机到网络出现一个叉,笔记本电脑无线网络不可用并显示红叉的解决方...
- LeetCode Top 100 Liked Questions 416. Partition Equal Subset Sum (Java版; Medium)
- Qos介绍及功能->分类标记->流量管理(令牌桶)->拥塞管理与拥塞避免
- OOK电路在电调天线远端控制器(RCU)中的应用
- 计算机网络——虚拟专用网与网络地址转换NAT