Oneshot Gems
العب الآن

لمطوري الألعاب

حدّد مسؤولًا واحدًا ودورة حياة واضحة لكل مستمع

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

في هذه الصفحة

قم بالتسجيل عند حدود دورة الحياة المتعمدة

تجنب إرفاق معالج مفتاح النافذة من وظيفة التجسيد أو كل إطار. ضع إعدادًا خاصًا بالمشهد في وظيفة البدء أو التثبيت، وتأكد من عدم إمكانية تشغيل هذه الوظيفة مرتين دون تنظيف. احتفظ بمرجع إلى رد الاتصال عند استخدام removeEventListener؛ من الصعب مطابقتها لاحقًا لعمليات الاسترجاعات المجهولة التي تم إنشاؤها بشكل متكرر. بدلاً من ذلك، قم بإعطاء مجموعة من المعالجات ذات الصلة AbortController وتمرير إشارتها في خيارات المستمع، ثم قم بإحباط تلك المجموعة عندما ينتهي المشهد.

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

اختبار الدخول المتكرر للمشهد كفحص للأعراض

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

حافظ على توافق عملية التفكيك مع الملكية

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

أسئلة عن ⁨منع مستمعي أحداث اللعبة المكررة⁩

لماذا تؤدي الضغطة على مفتاح واحد إلى إنتاج إجراءات متعددة للعبة؟

قد يكون للإجراء نفسه عدة معالجات مسجلة، أو قد يقوم كل من السلف والفرع بمعالجة الحدث. قم بإحصاء التسجيلات وفحص انتشار الحدث عند حدود دورة حياة المشهد.

هل يمكن لـ AbortController إزالة مستمعي الأحداث؟

نعم. أضف المستمعين ذوي الصلة بنفس الإشارة واستدعِ abort عند انتهاء مالك المجموعة. وهذا يعطي المجموعة مسارًا واضحًا للتفكيك؛ ولا يحل محل تحديد المالك الذي يتحكم فيها.

للمزيد من القراءة

هل لاحظت معلومة قديمة؟ الإبلاغ عن تصحيح

واصل اللعب.

ألعاب متصفح مجانية جاهزة متى شئت. اعثر على ما يمتعك واجعله لعبتك المفضلة التالية.

اتبع فضولك