Я process.binding('...')
багато разів бачив , досліджуючи вихідний код node.js на github .
Хто-небудь може пояснити мені, що робить ця функція?
Я process.binding('...')
багато разів бачив , досліджуючи вихідний код node.js на github .
Хто-небудь може пояснити мені, що робить ця функція?
Відповіді:
Ця функція повертає внутрішній модуль, наприклад, require. Він не є загальнодоступним, тому вам не слід покладатися на нього у своєму коді, але ви можете використовувати його для гри з об’єктами низького рівня вузла, якщо хочете зрозуміти, як все працює.
Наприклад, тут timer_wrap
зареєстровано прив'язку. Він експортує Timer
конструктор. У lib/timers.js
ньому імпорт
Це функція, яка, по суті, виходить і захоплює функцію С ++ і робить її доступною всередині 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, але фактичний процес хешування відбувається на стороні С ++ 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 ++.
process.binding
здається, змінилося наinternalBinding
з v11.x