javascript - Bcryptjs - 使用同步与异步解决方案?
问题描述
我正在尝试实现一个简单的登录/身份验证应用程序,并且我正在使用 bcryptjs 以便在将用户密码放入数据库之前对其进行加盐/哈希处理。在文档中,它提供了散列密码的同步方式和异步方式。我想我的问题是我如何知道异步或同步版本是否适合我的应用程序以及在决定是实现同步还是异步解决方案时应该考虑什么?
解决方案
通常,异步任务优于同步任务,以增加用户与应用程序的交互。同步任务按照编写代码行的顺序执行,因此会阻塞分配给处理的线程。由于 JavaScript 是单线程的,因此整个事件循环都被阻塞了。
bcrypt 也是如此,正如他们的文档中所解释的那样:
为什么推荐异步模式而不是同步模式?
如果你在一个简单的脚本上使用 bcrypt,使用同步模式就很好了。但是,如果您在服务器上使用 bcrypt,则建议使用异步模式。这是因为 bcrypt 完成的散列是 CPU 密集型的,因此同步版本将阻止事件循环并阻止您的应用程序为任何其他入站请求或事件提供服务。异步版本使用不阻塞主事件循环的线程池。
推荐阅读
- python - 如何按字母顺序组织列表中的列表?
- r - 从 Github 安装的软件包是否需要 Rtools?
- sql - 涉及 SELECT FOR UPDATE 的死锁
- github - 如何从 github graphql 查询中获取拉取请求的默认合并方法?
- c++ - 查找由数字 0 和 1 组成的数字“m”的算法说明,该数字可以被数字 n 整除
- r - Shiny:从 fileInput 获取准确的数据路径,而不是临时数据路径
- mysql - MS 通过 odbc 访问 mySql 连接慢
- typescript - 使用静态成员定义类型参数
- java - JAX-RS 2.1.1 响应构建抛出错误
- php - 如何使用 PHP 检测按钮单击并打开新页面?