我需要在Node中使用bcrypt,并且像往常一样,有27个gazillion库可供选择。
npm上的两个顶级软件包是
它们有何不同?是否有令人信服的理由或用例来使用其中一个?
显然,一个是纯JS,另一个是与本机C ++加密库的绑定。因此,后者is faster比前者更重要。
我读到应该选择fastest implementation of the slowest algorithm。因此,这意味着我应该选择非JS。但是JS one更受欢迎。为什么在node中出现这种情况-为什么有一个“ pure js”包比使用node-gyp绑定到本机库的包更可取?
答案 0 :(得分:3)
当考虑仅在Node.js中运行依赖项时,没有理由不遵循向您提供的关于选择最快实现的建议,在这种情况下,该实现被证明是bcrypt
的本机绑定。 / p>
对于isomorphic JavaScript,如果您希望它也可以在浏览器中运行,则不能使用本机绑定。因此,在这种情况下,brcyptjs
是纯JavaScript中最快的实现。
为了在同构设置中使用bcrypt
,您的替代方案是将本机绑定编译为WebAssembly(如果可能)。目前尚无法将某些本机绑定编译为WebAssembly,但是this package似乎至少在wasm中实现了bcrypt的一个子集,尽管与您当前的两个选项相比,我无法审查其性能或安全性。
使用WebAssembly的缺点是,开发时间会大大增加,尤其是在您不熟悉API的情况下,并且当bcryptjs
已经成为同一性能范围内的替代产品时,很难证明这一点。