Подтвердить что ты не робот

Nodejs: Что означает `process.binding`?

Я много раз видел process.binding('...'), исследуя исходный код node.js в github.

Может кто-нибудь объяснить мне, что делает эта функция?

4b9b3361

Ответ 1

Эта функция возвращает внутренний модуль, например require. Он не является общедоступным, поэтому вы не должны полагаться на него в своем коде, но вы можете использовать его для воспроизведения с объектами низкого уровня node, если вы хотите понять, как все работает.

Например, зарегистрировано здесь timer_wrap. Это экспорт Timer конструктор. В lib/timers.js он импортирован

Ответ 2

Это функция, которая, по сути, выходит, захватывает функцию C++ и делает ее доступной внутри javascript. Возьмите этот пример process.binding('zlib') который используется в zlib

По сути, это происходит, когда получается объект zlib C++, а затем он используется все остальное время в коде javascript.

Поэтому, когда вы используете zlib, вы на самом деле не выходите и не захватываете библиотеку C++, вы используете библиотеку Javascript, которая оборачивает для вас функцию C++.

Это облегчает использование

Ответ 3

process.binding соединяет сторону JavaScript Node.js со стороной C++ Node.js. C++ сторона node.js - это то, где реализуется большая часть внутренней работы всего, что делает узел. Так что большая часть вашего кода в конечном итоге опирается на код C++. Node.js использует возможности C++.

Вот пример:

const crypto=require("crypto")
const start=Date.now()
crypto.pbkdf2("a", "b", 100000,512,sha512,()=>{
console.log("1":Date.now()-start)
})

Crypto - это встроенный модуль в Node.js для хеширования и сохранения паролей. Вот как мы реализуем это в Node.js, но фактический процесс хеширования происходит на стороне C++ файла node.js.

process.binding("crypto") отправит этот процесс в каталог экспортеров src, где находится C++ мир Node.js. В этой части Node.js V8 будет преобразовывать значения node.js, которые мы помещаем в наши различные программы, такие как логическое значение, или функция, или объект, и переводить их в их C++ эквиваленты.

После того, как код Javascript переведен в C++, произойдет libuv, и он выполнит все тяжелые вычисления для выполнения вышеуказанного кода на стороне C++ вне цикла событий в пуле потоков.