كرر دورة حياة واحدة عن قصد
التقط خطًا أساسيًا بعد التحميل، وقم بتشغيل نفس المستوى القصير، ثم عد إلى القائمة، وكرر هذا المسار المحدد عدة مرات. استخدم أدوات ذاكرة المتصفح لمقارنة اللقطات التي تم التقاطها في نفس النقطة بعد التنظيف وجمع البيانات المهملة عندما تسمح الأدوات بذلك. ابحث عن الأعداد المتزايدة لنوع كائن معين، مثل عقد المشهد، بدلاً من التفاعل مع إجمالي الذاكرة وحدها.
قم بإجراء الاختبار مرة واحدة مع إغلاق أدوات المطور ومرة واحدة مفتوحة إذا بدا أن القياس نفسه يغير السلوك. والإشارة المفيدة هي ما إذا كانت نفس الفئات والمسارات التي تم الاحتفاظ بها تتراكم عبر الدورات، وليس ما إذا كانت إحدى اللقطات تحتوي على عدد أكبر من رقم جهاز آخر.
حدّد تنظيفاً واضحاً لكل مشهد
عند انتهاء المشهد، ألغِ إطار الرسوم المتحركة المعلّق، وأوقف المؤقتات، وأزل المستمعين المسجلين على أهداف أطول عمراً، وأفرغ المجموعات التي تحتوي على كيانات المشهد. احتفظ بمراجع ردود الاتصال حتى تتمكن من إزالتها، أو اجمع المستمعين المرتبطين باستخدام AbortController وأوقف المجموعة عند تفكيك المشهد.
اختبر الحد الفاصل: ادخل إلى المشهد ثم اخرج منه، وشغّل إجراء الإدخال السابق، وتأكد من أن المشهد السابق لم يعد يستجيب. وتحقق من أن الأصول المخزنة مؤقتاً تُشارك أو تُحرر عن قصد. قد يسبب التنظيف العشوائي عمليات إعادة تحميل غير ضرورية، بينما قد يُبقي مرجع غير مقصود مشهداً كبيراً في الذاكرة.
أسئلة عن تسرب ذاكرة لعبة المتصفح
هل ارتفاع الذاكرة يثبت وجود تسرب؟
لا. تحجز المتصفحات الذاكرة وتجمع الكائنات وفق جدولها الخاص. يصبح التسرب أرجح عندما تحتفظ تكرارات دورة الحياة المتكافئة بعدد متزايد من النسخ عبر مرجع لا يزال الكود يحتفظ به.
هل يمكن أن تساعد إزالة مستمع الحدث في عملية التنظيف؟
نعم، إذا كان هدف طويل العمر يحتفظ برد اتصال يشير إلى بيانات المشهد. توثّق MDN الدالة removeEventListener() وتشرح أيضاً تمرير AbortSignal لإزالة مجموعة من المستمعين معاً.
للمزيد من القراءة
هل لاحظت معلومة قديمة؟ الإبلاغ عن تصحيح