Nodejs: Что означает `process.binding`?
Я видел process.binding('...')
много раз, исследуя исходный код node.js на github.
Кто-нибудь может объяснить мне, что делает эта функция?
2 ответа
Эта функция возвращает внутренний модуль, как требуется. Он не является общедоступным, поэтому вы не должны полагаться на него в своем коде, но вы можете использовать его для игры с объектами низкого уровня узла, если вы хотите понять, как все работает.
Например, здесь timer_wrap
привязка зарегистрирована. Это экспорт Timer
конструктор. В lib/timers.js
это импортировано
Это функция, которая, по сути, выходит и захватывает функцию C++ и делает ее доступной внутри javascript. Возьми этот пример process.binding('zlib')
что используется в zlib
По сути, это происходит с получением объекта zlib C++, а затем все остальное время он используется в коде javascript.
Поэтому, когда вы используете zlib, вы на самом деле не выходите и не захватываете библиотеку C++, вы используете библиотеку Javascript, которая оборачивает для вас функцию C++.
Это облегчает использование
Process .binding соединяет сторону javascript в Node.js со стороной C++ в Node.js. На стороне C++ node.js фактически реализована большая часть внутренней работы всего, что делает node. Таким образом, большая часть вашего кода в конечном итоге полагается на код 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.
когда node.js запускает эту функцию, фактически внутри этой функции, он передает все аргументы в PBKDF2()
функция, которая является кодом C++. эта функция выполняет все вычисления и возвращает результат. вот как PBKDF импортируется на сторону javascript node.js
const {PBKDF2}=process.binding(“crypto”)
Вот как javascript-сторона node.js подключается к C++-стороне node.js. на стороне C++ node.js V8 будет переводить значения node.js в их эквиваленты на C++.