创建博客 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

snoopyxdy的博客

www.rrestjs.com, node.js高性能restful框架

 
 
 

日志

 
 

rrestjs——高性能nodejs开发框架  

2012-01-13 17:20:02|  分类: node |  标签: |举报 |字号 订阅

rrestjs是我最近根据expressjs改写了大量代码,以全新的结构编写的ndoe.js框架。目标roa和restful,具有高性能和低门槛的特点。
首先要感谢express作者 visionmedia 给予的expressjs源码作为参考,让我有机会编写出rrestjs框架,深表谢意!
前阵子研究express源码,它是以middleware中间件形式依次过滤模块的,而rrestjs是根据配置文件按需加载,并且尽可能少的在入口处加载过多模块和减少判断,这是rrestjs和expressjs最大的区别。rrestjs还内置了我之前编写的clusterplus,多进程管理,实现开发时像PHP那样不用每次手动重启进程调试。
我的qq:53822985 有兴趣的可以联系我

官网地址:http://www.rrestjs.com
新手入门:http://snoopyxdy.blog.163.com/blog/static/60117440201211743031517/

rrestjs有以下几个亮点:

1、Restful模式:去掉了expressjs的app.get()路由机制,重新拆分客户端请求的uri,直接加载指定模块和执行模块内的方法,如果出错输出500或404。比如用户访问/user/face,访问头像页面,则rrestjs会根据拆分的uri去指定目录require('user')模块,然后执行face方法,省去了正则路由判断,提升性能。

2、原生node.js的API风格:没有expressjs自己封装的app.use等等,输出一个helloworld只需如下代码,降低了学习新代码风格的成本:
var http = require('http'),
rrest = require('rrestjs'),
       server = http.createServer(function (req, res) {
res.end('hello world');
}).listen(3000);

3、开发模式自动保存重启:在开发模式下,支持像PHP那样的写代码,保存自动重启,放弃ctrl+c 然后 上+enter。

4、多进程共享session:多进程可以共享保存在内存中的session数据,而且以后部署上生产环境,只需加载不同配置文件,无需改动代码即可支持mongodb的session存储

5、提高静态文件输出性能:expressjs在静态文件输出上由于加上etag或last-modify缓存,需要2次I/O操作,rrestjs在此基础上做了2级缓存,减少一次I/O操作,性能提升10%。

6、多进程多任务管理:可以让多进程监听多端口,做不同业务,由一个守护进程守护,万一发现子进程意外挂掉,可以马上唤醒它,并且还是继续监听之前的端口和做之前的业务。

7、封装了mongodb连接池:封装了mongodb的连接池,可以手动的设定连接池的大小,大大提高的效率和稳定性。

8、IP和资源白名单过滤:增加了白名单功能,方便项目上公网以后的调试和测试。

9、增加jade的html缓存:增加html缓存功能,加速大并发,高I/O的输出jade模版,同时设置了更新缓存钥匙机制,防止缓存重建时的雪崩情况。

10、增加deflate和gzip:根据content-type的属性值,选择性的使用delate或gzip压缩数据响应给客户端,因为图片的gzip意义不大。

11、自动加载模块:根据自动加载例外的配置,去自动加载modules文件夹下的所有模块,不必一个个require了


rrestjs和expressjs对比表:

  Expressjs rrestjs
 架构思路 SOAP,简单对象访问协议架构 ROA,面向资源架构
 代码风格 Express自身代码风格 Node.js 原生API风格
 封装程度 重度封装,配置繁多,2次开发难度大 轻度封装,配置简单,最小化污染命名空间,易于2次开发
 自定义开发、生产环境 √(直接配置)√(加载不同配置文件)
 http,https服务器 √(进行2次封装,express API) √(原生node.js API支持)
 自动处理Favicon 请求 √ √
 IP过滤访问 X √
 自动输出静态文件 √ √
 请求路由 路由表路由 Restful风格,拼装URI
 自动404、500 √ 部分自动404,500
 Get参数获取 √ √
 POST参数获取 √ √  
 文件上传管理 √ √
 Cookie支持 √ √
 Session支持 √(提供redis存储) √(提供redis存储)
 多进程同步共享session X √
 部分特定页面使用session X √
 客户端请求的IP地址 X √
 正规http协议Response头 √ √
 Request对象的封装
 响应buffer和string √ √
 响应json √ √
 根据api自动响应jsonp √ √
 支持String响应deflat, gzip X √
 静态文件etag,modify缓存 √ √
 静态文件 2级缓存加速 X √
 静态文件选择性支持delate, gzip X √
 Redirect跳转 √ √
 Render模版支持 Jade,haml,ejs,coffeekup,jqtmp 仅支持jade
 Jade模版html缓存 X √
 日志功能 √ √(内置log4js)
 Cluster多进程加速 半自动,需要代码控制 √(内置ClusterPlus)
 Cluster多进程多任务管理
(比如:开启多进程,监听多端口执行多任务)
 X √(内置ClusterPlus)
 Cluster子进程意外挂掉自动启动 半自动,需要代码控制 √(内置ClusterPlus)
 开发模式,指定代码文件或文件
夹代码改动自动重启
 X √(内置ClusterPlus)
 数据库连接配置 X √(内置 mongodb-native)
 数据库连接池封装 X√(内置 generic-pool)
提供便捷接口,压缩合并css和js文件
X
根据配置文件自动生成缓存文件夹以及其他文件夹
X
 自动加载nodejs模块 X √(按需自动加载modules文件夹下的模块)
 额外功能 输出错误、路由表管理、局部视图输出等 logger分等级和自动切分存储,异步代理等
 Helloworld性能(1000并发,下同) 18452 req/sec 20734 req/sec
 小静态文件输出性能 9555 req/sec 10411 req/sec
 Jade模版输出 (未开启html缓存) 10609 req/sec 12584 req/sec
 


   更多测试结果请参考:http://snoopyxdy.blog.163.com/blog/static/6011744020120135424340/
   
   注:框架未经过严格测试!


  评论这张
 
阅读(6893)| 评论(12)
|      
推荐 转载

历史上的今天

最近读者

热度

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2014