Является ли await bcrypt.hash () таким же, как bcrypt.hashSync ()? - PullRequest
0 голосов
/ 08 июня 2018

Что касается пакета bcrypt npm , я вижу, что рекомендуется асинхронная версия.Однако я хотел бы по-настоящему понять различия между обеими версиями с точки зрения производительности (т. Е. Цикл обработки событий, блокировка ввода-вывода и т. Д.)

Версия 1: Async

const hash = await bcrypt.hash(...)
...

Версия2: Sync

const hash = bcrypt.hashSync(...)
...

Другими словами, если я звоню bcrypt.hash с await, равны ли эффекты версии синхронизации?

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Версии sync vs async отличаются тем, что в них используется базовая синхронизация vs async salt.Итак, асинхронный сбор энтропии.

https://github.com/kelektiv/node.bcrypt.js/blob/7a720bd2e5450f97e64d4a1d4ac23190b1417c65/bcrypt.js#L30 https://github.com/kelektiv/node.bcrypt.js/blob/7a720bd2e5450f97e64d4a1d4ac23190b1417c65/bcrypt.js#L76

Затем хеширование выгружается в рабочий поток для асинхронного хэша.

https://github.com/kelektiv/node.bcrypt.js/blob/aac593c3922253c732bb62197913a26a8302fbe6/src/bcrypt_node.cc#L216 https://github.com/kelektiv/node.bcrypt.js/blob/aac593c3922253c732bb62197913a26a8302fbe6/src/bcrypt_node.cc#L241

Так что да, это делает использование асинхронным по-другому и позволит избежать блокировки цикла событий узла

0 голосов
/ 08 июня 2018

Я не знаю, как именно bcrypt реализовал его, но если он рекомендуется и он действительно полностью асинхронный, это означает, что они делают это в другом потоке, и он не блокирует основной поток.

InNode.js, цикл обработки событий и весь код, который вы пишете, находятся в одном потоке - как только вы начинаете что-то делать, синхронная часть должна быть сначала полностью выполнена, что означает, что все остальное заблокировано.Вы не хотите блокировать ваш REST API для ответа, верно?Каждая миллисекунда имеет значение.

...