FiveM स्क्रिप्ट अनुकूलन: resmon कम करें, Smooth FPS बनाए रखें
FiveM स्क्रिप्ट्स को उच्च FPS और कम resmon के लिए ऑप्टिमाइज़ करें। लूप्स, थ्रेडिंग, NUI, इवेंट्स और रियल प्रोफाइलर ट्रिक्स का उपयोग शीर्ष प्रदर्शन-केंद्रित सर्वरों द्वारा किया जाता है।
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) distance check with squared distance comparisons when you only need relative distance. Since square root calculation is expensive, comparing squared distances against squared thresholds achieves the same result without the costly math operation. Additionally, avoid calling GetDistanceBetweenCoords native जब आप Lua में दूरी गणना कर सकते हैं, क्योंकि native कॉल्स में शुद्ध Lua ऑपरेशंस की तुलना में अतिरिक्त ओवरहेड होता है।
Entity and Blip Management
एंटिटीज़, ब्लिप्स, और मार्कर्स बनाना दोनों रेंडरिंग और नेटवर्क लागत लाता है। जब ब्लिप्स और एंटिटीज़ की जरूरत न हो तो उन्हें गेम वर्ल्ड में छोड़ने के बजाय हटा दें। उपयोग करें DrawMarker केवल जब खिलाड़ी रेंडरिंग दूरी के भीतर हो, पूरे नक्शे में वैश्विक रूप से नहीं। जिन स्क्रिप्ट्स में कई इकाइयों का प्रबंधन होता है, उनके लिए पास के ऑब्जेक्ट्स को ही संसाधित करने के लिए स्थानिक विभाजन लागू करें। स्ट्रीमिंग सिस्टम का उपयोग करने पर विचार करें जो खिलाड़ी की निकटता के आधार पर इकाइयों को बनाते और नष्ट करते हैं, बजाय इसके कि संसाधन शुरू होते ही सब कुछ लोड किया जाए।