سؤال

رأيت process.binding('...') عدة مرات أثناء البحث من خلال كود مصدر Node.js على جيثب.

هل يمكن لأحد أن يشرح لي ماذا تفعل هذه الوظيفة؟

هل كانت مفيدة؟

المحلول

تقوم هذه الدالة بإرجاع الوحدة الداخلية، مثل require.إنه ليس عامًا، لذا لا يجب الاعتماد عليه في التعليمات البرمجية الخاصة بك، ولكن يمكنك استخدامه للعب مع كائنات العقدة ذات المستوى المنخفض، إذا كنت تريد فهم كيفية عمل الأشياء.

على سبيل المثال، هنا timer_wrap تم تسجيل الربط.هو - هي صادرات Timer البناء.في lib/timers.js إنه مستورد

نصائح أخرى

إنها ميزة يتم طرحها بشكل أساسي والاستيلاء على ميزة C++ وإتاحتها داخل جافا سكريبت.خذ هذا المثال process.binding('zlib') الذي يستخدم في زليب

هذا هو في الأساس الخروج والحصول على كائن zlib C++ ثم يتم استخدامه بقية الوقت في كود جافا سكريبت.

لذلك عندما تستخدم Zlib ، فأنت لا تخرج فعليًا وتلتقط مكتبة C ++ ، فأنت تستخدم مكتبة JavaScript التي تلف ميزة C ++ لك.

فهو يجعل من السهل الاستخدام

تعمل عملية الربط على ربط جانب جافا سكريبت من 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++ من العقدة js.

process.binding("crypto") سنأخذ هذه العملية إلى مصدري دليل src حيث يوجد عالم c++ الخاص بـ Node.js.في هذا الجانب من Node.js، سيقوم V8 بترجمة قيم Node.js التي نضعها داخل برامجنا المختلفة مثل قيمة منطقية أو دالة أو كائن وترجمتها إلى مكافئاتها في C++.

بعد ترجمة كود Javascript إلى C++، سيتم تنفيذ libuv وسيقوم بجميع العمليات الحسابية الثقيلة لتنفيذ التعليمات البرمجية أعلاه في جانب c++، خارج حلقة الأحداث، في تجمع مؤشرات الترابط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top