2017-01-17 115 views
1

我正在使用bcryptjs对我的节点服务器上的密码进行散列和比较。这里是我的功能:Bcryptjs异步不起作用

this.testPassword = function(pass1, pass2, callback) { 
    bcrypt.compare(pass1, pass2, function(err, res) { 
     callback(err, res); 
    }.bind(this)); 
}; 

而且函数调用:

context.runQuery("...", function(resp, err) { 
    if (!err) { 
     testPassword("test11", "test12", function(err2, resp2) { 

     }); 
    }   
}); 

尽管事实上,这应该是异步,它会减慢服务器为200毫秒。这是bcrypt-js模块还是我的实现问题。

+0

代码似乎没什么问题。不太清楚为什么你的意思是“慢下来”......但仅仅是因为JS /节点中的异步并不意味着它不会影响性能......如果这个操作非常密集,它会放慢速度(因为它是不物理并发)。我猜你可以使用像工人这样的东西来获得更好的结果。 –

+0

那么使用async有什么意义? –

+0

为了不阻止执行,但这并不意味着性能更好,因为它没有利用物理并发能力。所以......它应该放慢速度,但不应该阻止。 –

回答

0

减少用于加密的SaltRounds的数量。甚至减少1可以显示出显着的性能改善。

这里是提取从bcrypt documentation基于SaltRounds的数目进行比较的性能:

  • 回合= 8:〜40个哈希/秒
  • 回合= 9:1〜20名的散列/秒
  • 轮= 10:10〜散列/秒
  • 轮= 11:5〜散列/秒
  • 轮= 12:2-3散列/秒
  • 轮= 13:〜1秒/散列
  • 轮= 14:〜1.5秒/散列
  • 轮= 15:〜3秒/散列
  • 轮= 25:〜1小时/散列
  • 两轮= 31:2-3天/哈希

希望这有助于

+0

这很重要,因为除非比较函数完成,否则不会调用'callback'。请参阅提供的文档链接。另外,我建议您测试它以查看其差异。 –

+0

我已经把它减少到8了。它仍然滞后。我认为异步会解决这个问题 –