تحسين سكريبت FiveM: تقليل resmon، الحفاظ على سلاسة FPS
تحسين سكربتات FiveM لأداء عالي FPS واستهلاك منخفض للذاكرة. استخدام الحلقات، الخيوط، NUI، الأحداث وحيل المحلل الحقيقي المستخدمة من قبل أفضل الخوادم التي تركز على الأداء.
Agency Scripts
المؤسس والمطور الرئيسي في Agency Scripts
فهم Resmon وأداء السكريبتات
ال resmon الأمر في FiveM يعرض مقاييس أداء الموارد في الوقت الحقيقي، موضحاً كم مللي ثانية يستهلك كل سكريبت في كل دورة خادم. يجب أن يظهر السكريبت المحسن جيداً 0.00 مللي ثانية في resmon معظم الوقت، مع ارتفاع مؤقت فقط عند معالجة الأحداث بنشاط. السكريبتات التي تظهر قيم resmon عالية باستمرار تضعف أداء الخادم، تزيد من عدم تزامن اللاعبين، ويمكن أن تسبب التأخير المزعج الذي يدفع المجتمعات للابتعاد. فحص السكريبتات بانتظام هو الخطوة الأولى للحفاظ على خادم سلس.
إدارة الخيوط وأوقات الانتظار
أكبر قاتل للأداء في سكريبتات FiveM هو إدارة الخيوط غير الصحيحة. باستخدام Citizen.Wait(0) داخل حلقة يعني أن الكود الخاص بك يعمل في كل إطار، وهو حوالي 60 مرة في الثانية. معظم المهام لا تحتاج إلى هذا التردد. زد أوقات الانتظار الخاصة بك إلى Wait(500) أو Wait(1000) للفحوصات التي تحتاج إلى التشغيل بشكل دوري فقط، مثل الكشف عن القرب للعلامات أو فحوصات المناطق. بالنسبة للأنظمة المعتمدة على المسافة، استخدم نهجًا متدرجًا حيث تتحقق بفواصل زمنية أطول عندما تكون بعيدًا عن نقاط الاهتمام وفواصل زمنية أقصر عندما تكون قريبًا.
تعطيل الخيوط غير الضرورية
بدلاً من تشغيل الخيوط بشكل مستمر، فكر في تفعيلها فقط عند الحاجة. استخدم الأحداث أو تغييرات الحالة لبدء وإيقاف حلقات المعالجة. على سبيل المثال، لا يحتاج سكريبت الصيد إلى تشغيل حلقة الإلقاء عندما لا يكون اللاعب بالقرب من الماء. تتبع متغير حالة نشط واخرج من الخيط باستخدام return عندما لا تكون الميزة قيد الاستخدام. يمكن لهذا النمط تقليل استهلاك السكربت من 0.50ms إلى 0.00ms خلال فترات الخمول، وهو الفرق بين سكربت قابل للتوسع وآخر يعرقل السيرفر.
التخزين المؤقت وتجنب الاستدعاءات المكررة
استدعاءات الدوال Native في FiveM لها تكلفة، خاصة عند استدعائها بشكل متكرر داخل حلقات ضيقة. خزّن نتائج الاستدعاءات مثل GetEntityCoords, GetPlayerPed، و GetPlayerServerId في بداية تكرار الحلقة الخاصة بك بدلاً من استدعائها عدة مرات ضمن نفس الدورة. خزّن البيانات الثابتة مثل قيم التكوين، مواقع العلامات، وإحداثيات البلِب في متغيرات محلية عند تحميل السكربت. هذه التقنية البسيطة يمكن أن تقلل وقت تنفيذ السكربت بشكل كبير وهي واحدة من أكثر التحسينات تأثيرًا التي يمكنك القيام بها.
التحسينات الرياضية
تعد حسابات المسافة من العمليات الأكثر شيوعًا في سكريبتات FiveM. استبدل #(coords1 - coords2) فحص المسافة باستخدام مقارنة المسافة المربعة عندما تحتاج فقط إلى المسافة النسبية. نظرًا لأن حساب الجذر التربيعي مكلف، فإن مقارنة المسافات المربعة مع العتبات المربعة تحقق نفس النتيجة بدون العملية الحسابية المكلفة. بالإضافة إلى ذلك، تجنب استدعاء GetDistanceBetweenCoords native عندما يمكنك حساب المسافة في Lua، حيث تحمل استدعاءات native عبء إضافيًا مقارنة بعمليات Lua النقية.
إدارة الكيانات والنقاط
إنشاء الكيانات، العلامات، والمؤشرات له تكاليف عرض وشبكة. قم بإزالة العلامات والكيانات عندما لا تكون بحاجة إليها بدلاً من تركها في عالم اللعبة. استخدم DrawMarker فقط عندما يكون اللاعب ضمن مسافة العرض، وليس على مستوى الخريطة بأكملها. بالنسبة للسكريبتات التي تدير العديد من الكيانات، قم بتنفيذ تقسيم مكاني لمعالجة الكائنات القريبة فقط. فكر في استخدام أنظمة البث التي تنشئ وتدمر الكيانات بناءً على قرب اللاعب بدلاً من تحميل كل شيء مرة واحدة عند بدء المورد.