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

snoopyxdy的博客

https://github.com/DoubleSpout

 
 
 

日志

 
 

C++写node笔记(五)  

2012-12-03 16:23:16|  分类: node |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
紧接着上篇,打算用C++ ADDON写一个valiator验证器,于是参照chriso的node-validator写了一个c++版本的,相关连接如下:
node.js版本的node-validator地址:https://github.com/chriso/node-validator
c++版本的node-validator地址:https://github.com/DoubleSpout/node-hvalidator
我们可以利用以下命令安装

npm install hvalidator

我也装下13,人家都在redis前加个h,我也在原来的validator前加个h,所以取名为:hvalidator。
目前这个模块只是完成了isxxx功能的coding,开发过程中最坑爹就是c++的正则模块了。为了速度,我选择了最原生的regex.h这个标准库,很多c++开发者都没用过,网上资料都少的可怜,大部分使用的boost库。
这个逆天的坑爹库直接让我给它跪了,为了写个正则表达式匹配得写上10几行代码,而且还有各种的配置,可能是我个人水平有限,花了一个晚上才搞清楚怎么使用它,刚开始各种不匹配,泪崩啊!!让我精疲力尽啊,几次都想放弃了。
最后终于我还是看懂了文档,为regex.h在编译的时候加上了REG_NOSUB选项,加速匹配。

目前这个hvalidator的正则不支持中文,而且过滤的功能还没写完,判断的部分开发完毕了,c++代码写的很差,希望大牛们指点一二啊。
最后献上测试代码,我们看下hvalidator的性能吧:

var hv = require('../index.js');
var nv = require('validator').check;

console.time('nodejs')

nv('aaaa11@aaaa.com').is(/[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$/)

nv('123').isNumeric()

nv(122.2).isFloat()

nv('123').isInt()

nv('aa').notEmpty()

nv(new Date()).isDate()

nv('abc').isAlpha()

nv('abc').isLowercase()

nv('ABC').isUppercase()

nv('ABC').isIn('ABCDEFG')

nv('123').isIn('123456789')

nv('ABC').isIn(['ABCDEFG','123','234','ABC'])

nv('234').isIn(['ABCDEFG','123','234','abc'])

nv('sfsd@fsfas.com').isEmail()

nv('http://bbs.csdn.net/topics/270080323/').isUrl()

nv('10.10.10.10').isIP()

console.timeEnd('nodejs')



console.time('c++')

hv.is('aaaa11@aaaa.com',/[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$/)

hv.isArray([])

hv.isRegExp(/\d/)

hv.isNumber(123)

hv.isPositive(122.2)

hv.isInt(123)

hv.notEmpty("aa")

hv.isDate(new Date())

hv.isString('abc')

hv.isLowercase('abc')

hv.isUppercase('ABC')

hv.isIn('ABC','ABCDEFG')

hv.isIn(123,'123456789')

hv.isIn('ABC',['ABCDEFG','123','234','ABC'])

hv.isIn(234,['ABCDEFG','123','234','abc'])

hv.isLen('ABC',1,5)

hv.isLen(5,1,5)

hv.isLen([1,2,3],1,5)

hv.isEmail('sfsd@fsfas.com')

hv.isUrl('http://bbs.csdn.net/topics/270080323/')

hv.isIp('10.10.10.10')

console.timeEnd('c++')


我们看下最后的执行结果,多次执行:

nodejs: 8ms
c++: 2ms

nodejs: 9ms

c++: 2ms

nodejs: 8ms

c++: 1ms

nodejs: 10ms

c++: 2ms

nodejs: 8ms

c++: 3ms

还是C++的模块快一些哦~

  评论这张
 
阅读(941)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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