FiveM Script Optimizasyonu: resmon Değerini Düşürün, Akıcı FPS Alın
FiveM scriptlerini yüksek FPS ve düşük resmon için optimize edin. Döngüler, threading, NUI, eventler ve performans odaklı en iyi sunucular tarafından kullanılan gerçek profiler ipuçları.
Agency Scripts
Agency Scripts Kurucusu ve Baş Geliştiricisi
Resmon ve Script Performansını Anlamak
The resmon komutu FiveM içinde gerçek zamanlı resource performans metriklerini görüntüler ve her scriptin sunucu tick'i başına kaç milisaniye tükettiğini gösterir. İyi optimize edilmiş bir script, resmon içinde çoğu zaman 0.00ms göstermeli ve yalnızca eventleri aktif olarak işlerken kısa süreliğine yükselmelidir. Sürekli yüksek resmon değerleri gösteren scriptler sunucu performansını düşürür, oyuncu desync sorununu artırır ve toplulukları uzaklaştıran o korkunç sunucu lag'ine yol açabilir. Scriptlerinizi düzenli olarak profile etmek, akıcı bir sunucu sağlamanın ilk adımıdır.
Thread Yönetimi ve Bekleme Süreleri
FiveM scriptlerindeki en büyük performans katili hatalı iş parçacığı yönetimidir. Şunu kullanmak Citizen.Wait(0) bir döngü içinde olması, kodunuzun kabaca saniyede 60 kez olmak üzere her bir karede çalıştığı anlamına gelir. Çoğu görev bu sıklığa ihtiyaç duymaz. Bekleme sürelerinizi şuna yükseltin: Wait(500) veya Wait(1000) marker'lar için yakınlık algılama veya bölge kontrolleri gibi yalnızca periyodik olarak çalışması gereken kontroller içindir. Mesafeye dayalı sistemler için, ilgi noktalarından uzaktayken daha uzun aralıklarla, yakındayken daha kısa aralıklarla kontrol yaptığınız kademeli bir yaklaşım kullanın.
Gereksiz Thread'leri Devre Dışı Bırakma
Thread'leri sürekli çalıştırmak yerine, bunları yalnızca gerektiğinde etkinleştirmeyi düşünün. İşlem döngülerini başlatmak ve durdurmak için event'leri veya durum değişikliklerini kullanın. Örneğin, bir balık tutma script'inin oyuncu suyun yakınında değilken olta atma döngüsünü çalıştırmasına gerek yoktur. Aktif bir durum değişkenini takip edin ve thread'den şununla çıkın: return özellik kullanımda değilken. Bu kalıp, boşta kalma sürelerinde scriptinizi sürekli 0.50ms değerinden 0.00ms değerine düşürebilir, bu da ölçeklenebilen bir script ile sunucunuzu felç eden bir script arasındaki farktır.
Önbelleğe Alma ve Gereksiz Çağrılardan Kaçınma
FiveM'deki native fonksiyon çağrıları, özellikle dar döngüler içinde tekrar tekrar çağrıldığında ek yüke neden olur. Şu gibi çağrıların sonuçlarını önbelleğe alın: GetEntityCoords, GetPlayerPed, ve GetPlayerServerId aynı döngü içinde birden çok kez çağırmak yerine döngü yinelemenizin başında. Yapılandırma değerleri, işaretçi (marker) konumları ve blip koordinatları gibi statik verileri script yüklenme anında yerel değişkenlerde saklayın. Bu basit teknik, script yürütme sürenizi önemli ölçüde azaltabilir ve yapabileceğiniz en etkili optimizasyonlardan biridir.
Matematiksel Optimizasyonlar
Mesafe hesaplamaları FiveM scriptlerinde en sık yapılan işlemler arasındadır. Standart olanı değiştirin #(coords1 - coords2) yalnızca göreli mesafeye ihtiyaç duyduğunuzda mesafe kontrolünü karesi alınmış mesafe karşılaştırmaları ile yapın. Karekök hesaplaması maliyetli olduğundan, karesi alınmış mesafeleri karesi alınmış eşik değerleriyle karşılaştırmak, maliyetli matematiksel işlem olmadan aynı sonucu verir. Ayrıca şunu çağırmaktan kaçının: GetDistanceBetweenCoords mesafeyi Lua içinde hesaplayabiliyorken native, çünkü native çağrıları saf Lua işlemlerine kıyasla ek yük getirir.
Entity ve Blip Yönetimi
Entity, blip ve marker oluşturmanın hem işleme hem de ağ maliyeti vardır. Blip ve entity'leri oyun dünyasında bırakmak yerine artık ihtiyaç duyulmadığında kaldırın. Kullanın DrawMarker tüm haritada global olarak değil, yalnızca oyuncu render mesafesi içindeyken. Birçok entity yöneten script'ler için yalnızca yakındaki nesneleri işlemek üzere mekansal bölümleme (spatial partitioning) uygulayın. Resource başladığında her şeyi tek seferde yüklemek yerine, oyuncu yakınlığına bağlı olarak entity oluşturan ve silen streaming sistemlerini kullanmayı düşünün.