تحديد بصمة الذاكرة لكائنات JavaScript
في JavaScript، يعد فهم استهلاك ذاكرة الكائنات أمرًا بالغ الأهمية لتحسين الأداء وتجنب تسرب الذاكرة. تتناول هذه المقالة استعلام الحصول على حجم كائن JavaScript، والخوض في حل يقدّر الذاكرة التقريبية التي تشغلها هذه الكائنات.
تحديد حجم الكائن
في جافا سكريبت، لا توجد وظيفة مدمجة مصممة خصيصًا لتحديد حجم الكائن. ومع ذلك، هناك أسلوب شائع يتضمن تكرار خصائص الكائن وحساب حجم كل قيمة أولية ومرجع للكائن. يأخذ هذا التقدير في الاعتبار أحجام أنواع البيانات، مثل المنطقية (4 بايت)، والسلسلة (الطول * 2 بايت)، والرقم (8 بايت).
تنفيذ مقدر حجم الكائن
لتقدير حجم كائن معين، يمكن استخدام دالة متكررة:
function roughSizeOfObject(object) { const objectList = []; const stack = [object]; let bytes = 0; while (stack.length) { const value = stack.pop(); switch (typeof value) { case 'boolean': bytes = 4; break; case 'string': bytes = value.length * 2; break; case 'number': bytes = 8; break; case 'object': if (!objectList.includes(value)) { objectList.push(value); for (const prop in value) { if (value.hasOwnProperty(prop)) { stack.push(value[prop]); } } } break; } } return bytes; }
مثال
باستخدام المثال المقدم:
function Marks() { this.maxMarks = 100; } function Student() { this.firstName = "firstName"; this.lastName = "lastName"; this.marks = new Marks(); } const stud = new Student(); const sizeInBytes = roughSizeOfObject(stud); console.log(`Object size: ${sizeInBytes} bytes`);
في هذا السيناريو، تقوم الدالة approxSizeOfObject بتقدير استهلاك الذاكرة التقريبي لكائن الزر، بما في ذلك خصائصه والكائنات المتداخلة.
القيود
من المهم ملاحظة أن هذه التقنية توفر تقريبًا وقد لا تأخذ في الاعتبار جميع عمليات تخصيص الذاكرة المتعلقة بالكائن. بالإضافة إلى ذلك، يمكن أن يؤدي الحمل المرتبط بمراجع الكائنات وعمليات الإغلاق إلى تعقيد إضافي في تحديد الحجم بدقة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3