2017-01-17 155 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了。它仍然滯後。我認爲異步會解決這個問題 –