使用node构建海量页面渲染服务

手机天猫的所有页面都是,大约在3年前天猫的大量页面是基于php渲染的,数据模板打包后推送到CDN,每次请求都渲染页面。用户请求CDN上的资源。但是这样的方式存在以下的弊端:

  • 大量文件在网络情况不一的CDN节点上同步非常困难
  • 每次请求渲染导致大量的机器资源浪费
  • php太灵活,多业务共享难以升级,性能低

node.js具有以下的优势:

  • js模板可以前后端共享
  • 轻量级、高性能

2014年的天猫双十一从php迁移到了node

koajs中的基于装饰器的中间件

1
2
3
4
5
6
7
8
9
function* responseTime(next){
// 所有后续中间件之前执行
const start = Date.now()
yield next;
// 所有后续中间件之后执行
const used = Date.now() - start
// 将响应时间设置到http header
this.set('X-Response-Time',`${used} ms`)
}
1
2
3
4
5
6
7
8
9
10
// 错误处理
function* errorHandler(next){
try{
yield next;
} catch (err) {
logger.error(err)
this.status = 500
this.body = err.message
}
}

SPA最常见的问题就是页面中充满了大量的ajax请求,一个解决办法就是合并ajax请求,例如:falcor

React Native

React Native原理图