ब्लॉग पर वापस
Tutorial3 मिनट पढ़ें

FiveM स्क्रिप्ट अनुकूलन: resmon घटाएँ, FPS सहज रखें

उच्च FPS और कम resmon के लिए FiveM स्क्रिप्ट अनुकूलित करें। लूप, थ्रेडिंग, NUI, इवेंट और बेहतरीन प्रदर्शन वाले सर्वरों में इस्तेमाल होने वाली वास्तविक profiler तरकीबें।

Agency Scripts

Agency Scripts के संस्थापक और प्रमुख डेवलपर

Resmon और स्क्रिप्ट प्रदर्शन को समझना

यह resmon FiveM में कमांड वास्तविक समय संसाधन प्रदर्शन मेट्रिक्स दिखाता है, यह दिखाते हुए कि प्रत्येक स्क्रिप्ट सर्वर टिक पर कितने मिलीसेकंड लेती है। एक अच्छी तरह से अनुकूलित स्क्रिप्ट को अधिकांश समय resmon में 0.00ms दिखाना चाहिए, केवल सक्रिय रूप से इवेंट्स प्रोसेस करते समय थोड़ी देर के लिए spike होना चाहिए। जो स्क्रिप्ट लगातार उच्च resmon मान दिखाती हैं वे सर्वर प्रदर्शन को खराब करती हैं, खिलाड़ी डीसिंक बढ़ाती हैं, और वह कुख्यात सर्वर लैग पैदा कर सकती हैं जो समुदायों को दूर भगाता है। अपने स्क्रिप्ट्स का नियमित प्रोफाइलिंग करना एक सुचारू सर्वर बनाए रखने की पहली कदम है।

थ्रेड प्रबंधन और प्रतीक्षा समय

FiveM स्क्रिप्ट में सबसे बड़ा प्रदर्शन हत्यारा अनुचित थ्रेड प्रबंधन है। उपयोग करें Citizen.Wait(0) एक लूप के अंदर मतलब आपका कोड हर एक फ्रेम में चलता है, जो लगभग 60 बार प्रति सेकंड होता है। अधिकांश कार्यों को इस आवृत्ति की आवश्यकता नहीं होती। अपनी प्रतीक्षा समय बढ़ाएं Wait(500) या Wait(1000) के लिए जांच जो केवल समय-समय पर चलानी होती हैं, जैसे मार्करों के लिए निकटता पता लगाना या ज़ोन जांच। दूरी-आधारित प्रणालियों के लिए, एक स्तरित दृष्टिकोण का उपयोग करें जहां आप रुचि के बिंदुओं से दूर होने पर लंबे अंतराल पर जांच करते हैं और पास होने पर छोटे अंतराल पर।

अनावश्यक थ्रेड्स को अक्षम करना

थ्रेड्स को लगातार चलाने के बजाय, उन्हें केवल आवश्यक होने पर सक्रिय करने पर विचार करें। प्रोसेसिंग लूप शुरू और बंद करने के लिए इवेंट्स या स्टेट चेंज का उपयोग करें। उदाहरण के लिए, एक फिशिंग स्क्रिप्ट को तब तक अपना कास्टिंग लूप चलाने की जरूरत नहीं है जब तक खिलाड़ी पानी के पास नहीं होता। एक सक्रिय स्टेट वेरिएबल ट्रैक करें और थ्रेड से बाहर निकलें return जब फीचर उपयोग में नहीं होता। यह पैटर्न आपके स्क्रिप्ट को लगातार 0.50ms से 0.00ms तक कम कर सकता है, जो एक स्क्रिप्ट के लिए जो स्केल करता है और जो आपके सर्वर को धीमा करता है, के बीच का अंतर है।

कैशिंग और अनावश्यक कॉल से बचाव

FiveM में नेटिव फ़ंक्शन कॉल्स का ओवरहेड होता है, खासकर जब उन्हें बार-बार तंग लूप्स के अंदर कॉल किया जाता है। कॉल्स के परिणामों को कैश करें जैसे GetEntityCoords, GetPlayerPed, और GetPlayerServerId अपने लूप पुनरावृत्ति की शुरुआत में कॉल करें बजाय इसके कि उन्हें एक ही चक्र के भीतर कई बार कॉल करें। स्थैतिक डेटा जैसे कॉन्फ़िगरेशन मान, मार्कर स्थान, और ब्लिप निर्देशांक को स्क्रिप्ट लोड समय पर स्थानीय चर में संग्रहित करें। यह सरल तकनीक आपके स्क्रिप्ट निष्पादन समय को नाटकीय रूप से कम कर सकती है और यह सबसे प्रभावशाली अनुकूलनों में से एक है जो आप कर सकते हैं।

मैथमैटिकल ऑप्टिमाइजेशन

दूरी गणना FiveM स्क्रिप्ट्स में सबसे सामान्य संचालन में से एक है। मानक को बदलें #(coords1 - coords2) जब आपको केवल सापेक्ष दूरी की ज़रूरत हो, तो स्क्वेयर्ड डिस्टेंस तुलना का इस्तेमाल करें। वर्गमूल की गणना महंगी होती है, इसलिए स्क्वेयर्ड डिस्टेंस की तुलना स्क्वेयर्ड थ्रेशोल्ड से करने पर वही नतीजा मिलता है, बिना महंगी गणना के। इसके अलावा, कॉल करने से बचें GetDistanceBetweenCoords native जब आप Lua में दूरी गणना कर सकते हैं, क्योंकि native कॉल्स में शुद्ध Lua ऑपरेशंस की तुलना में अतिरिक्त ओवरहेड होता है।

Entity and Blip Management

एंटिटीज़, ब्लिप्स, और मार्कर्स बनाना दोनों रेंडरिंग और नेटवर्क लागत लाता है। जब ब्लिप्स और एंटिटीज़ की जरूरत न हो तो उन्हें गेम वर्ल्ड में छोड़ने के बजाय हटा दें। उपयोग करें DrawMarker केवल जब खिलाड़ी रेंडरिंग दूरी के भीतर हो, पूरे नक्शे में वैश्विक रूप से नहीं। जिन स्क्रिप्ट्स में कई इकाइयों का प्रबंधन होता है, उनके लिए पास के ऑब्जेक्ट्स को ही संसाधित करने के लिए स्थानिक विभाजन लागू करें। स्ट्रीमिंग सिस्टम का उपयोग करने पर विचार करें जो खिलाड़ी की निकटता के आधार पर इकाइयों को बनाते और नष्ट करते हैं, बजाय इसके कि संसाधन शुरू होते ही सब कुछ लोड किया जाए।

शुरू करने के लिए तैयार?

हमारी शॉप से स्क्रिप्ट लें, या सपोर्ट, अपडेट और आगे आने वाली चीज़ों की झलक के लिए Discord से जुड़ें।