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++.

Другие вопросы по тегам