Tôi đã thấy process.binding('...')
nhiều lần khi nghiên cứu mã nguồn node.js trên github .
Ai có thể giải thích cho tôi những gì chức năng này làm?
Tôi đã thấy process.binding('...')
nhiều lần khi nghiên cứu mã nguồn node.js trên github .
Ai có thể giải thích cho tôi những gì chức năng này làm?
Câu trả lời:
Hàm này trả về mô-đun nội bộ, giống như yêu cầu. Nó không công khai, vì vậy bạn không nên dựa vào nó trong mã của mình, nhưng bạn có thể sử dụng nó để chơi với các đối tượng cấp thấp của nút, nếu bạn muốn hiểu cách mọi thứ hoạt động.
Ví dụ, ở đây timer_wrap
ràng buộc đã được đăng ký. Nó xuất hàm Timer
tạo. Trong lib/timers.js
nó được nhập khẩu
Đó là một tính năng về cơ bản ra ngoài và lấy tính năng C ++ và làm cho nó có sẵn bên trong javascript. Lấy ví dụ process.binding('zlib')
này được sử dụng trong zlib
Về cơ bản, đây là việc đi ra ngoài và nhận đối tượng zlib C ++ và sau đó nó được sử dụng trong phần còn lại của mã javascript.
Vì vậy, khi bạn sử dụng zlib, bạn không thực sự đi ra ngoài và lấy thư viện C ++, bạn đang sử dụng thư viện Javascript bao bọc tính năng C ++ cho bạn.
Nó làm cho nó dễ sử dụng hơn
process.binding kết nối phía javascript của Node.js với phía C ++ của Node.js. C ++ bên của node.js là nơi thực sự triển khai rất nhiều công việc nội bộ của mọi thứ mà nút đó làm. Vì vậy, rất nhiều mã của bạn cuối cùng dựa vào mã C ++. Node.js đang sử dụng sức mạnh của C ++.
Đây là một ví dụ:
const crypto=require(“crypto”)
const start=Date.now()
crypto.pbkdf2(“a”, “b”, 100000,512,sha512,()=>{
console.log(“1”:Date.now()-start)
})
Crypto là một mô-đun tích hợp trong Node.js để băm và lưu mật khẩu. Đây là cách chúng tôi triển khai nó trong Node.js nhưng quá trình băm thực tế diễn ra ở phía C ++ của node.js.
khi node.js chạy hàm này, thực sự bên trong hàm này, nó chuyển tất cả các đối số cho PBKDF2()
hàm là mã c ++. hàm này thực hiện tất cả các phép tính và trả về kết quả. đây là cách PBKDF được nhập vào bên javascript của node.js
const {PBKDF2}=process.binding(“crypto”)
Vì vậy, đây là cách phía javascript của node.js được kết nối với phía c ++ của node.js. trong phía c ++ của node.js, V8 sẽ dịch các giá trị node.js thành các giá trị tương đương c ++ của chúng.
process.binding
dường như chuyển thànhinternalBinding
từ v11.x