首页 > 解决方案 > Bcryptjs - 使用同步与异步解决方案?

问题描述

我正在尝试实现一个简单的登录/身份验证应用程序,并且我正在使用 bcryptjs 以便在将用户密码放入数据库之前对其进行加盐/哈希处理。在文档中,它提供了散列密码的同步方式和异步方式。我想我的问题是我如何知道异步或同步版本是否适合我的应用程序以及在决定是实现同步还是异步解决方案时应该考虑什么?

标签: javascript

解决方案


通常,异步任务优于同步任务,以增加用户与应用程序的交互。同步任务按照编写代码行的顺序执行,因此会阻塞分配给处理的线程。由于 JavaScript 是单线程的,因此整个事件循环都被阻塞了。

bcrypt 也是如此,正如他们的文档中所解释的那样:

为什么推荐异步模式而不是同步模式?

如果你在一个简单的脚本上使用 bcrypt,使用同步模式就很好了。但是,如果您在服务器上使用 bcrypt,则建议使用异步模式。这是因为 bcrypt 完成的散列是 CPU 密集型的,因此同步版本将阻止事件循环并阻止您的应用程序为任何其他入站请求或事件提供服务。异步版本使用不阻塞主事件循环的线程池。


推荐阅读