FiveM sunucularında FPS düşüşü denince akla genelde yüksek poligonlu araçlar ya da sonsuz döngüye giren Citizen.CreateThread blokları gelir. Ancak 2026 yılında modern roleplay sunucularının karşılaştığı en sinsi performans katili bambaşka bir yerdedir: CEF (Chromium Embedded Framework), yani sunucunuzun kullandığı NUI (HTML/CSS/JS) arayüzleri!
Oyuncularınız envanteri, HUD'ı, telefon veya F3 menüyü birkaç saat kullandıktan sonra oyunun aniden kasmaya başladığını veya FPS'in yarı yarıya düştüğünü söylüyorsa, muhtemelen bir NUI Bellek Şişmesi (Memory Leak) ile karşı karşıyasınız. Bu rehberde, NUI katmanındaki gizli darboğazları adım adım çözeceğiz.
1. CEF Neden Şişer? Görünmez Arayüz Tehlikesi
GTA V içerisinde açılan her NUI ekranı aslında arka planda çalışan bir Google Chrome sekmesidir. Geliştiricilerin yaptığı en büyük hata, ekrandan gizlenen bir arayüzün arka planda hala DOM ağacını güncellemeye devam etmesine (display: none yerine şeffaflık kullanılması veya dinleyicilerin açık kalması) izin vermektir.
opacity: 0 ya da visibility: hidden yapmak arayüzü sadece gözden saklar! CEF motoru arka planda CSS animasyonlarını, SVG filtrelerini ve JavaScript zamanlayıcılarını (setInterval) işlemeye devam ederek GPU ve RAM tüketir.2. Adım Adım NUI Kaynak Optimizasyonu
NUI dosyalarınız genellikle resources/[hud]/hud/html/ veya resources/[scriptler]/envanter/web/ dizinlerinde yer alır. Aşağıdaki yöntemlerle bu arayüzleri hafifletebilirsiniz:
A. JavaScript Dinleyicilerini Doğru Yönetin
İstemci tarafından gelen mesajları dinlerken her açılışta yeni bir window.addEventListener başlatmak bellek sızıntısına yol açar. Mesaj dinleyicisini tek bir ana handler altında toplayın:
// Hatalı: Her UI açıldığında yeni listener eklemek
// Doğru: Tek global dinleyici ve state yönetimi
window.addEventListener('message', (event) => {
const { action, data } = event.data;
switch (action) {
case 'OPEN_INVENTORY':
document.getElementById('app').style.display = 'block';
renderItems(data.items);
break;
case 'CLOSE_INVENTORY':
document.getElementById('app').style.display = 'none';
clearInventoryCache(); // Bellekte biriken sanal DOM elemanlarını temizle
break;
default:
break;
}
});B. Lottie ve Ağır CSS Animasyonlarını Sınırlandırın
HUD veya bildirim sistemlerinde kullanılan sonsuz döngülü SVG ve CSS keyframe animasyonları, arka planda render motorunu sürekli meşgul eder. Arayüz kapalıyken tüm animasyonları durdurun (animation-play-state: paused).
3. Lua Tarafında NUI Mesaj Trafiğini Azaltma
İstemci tarafındaki Lua kodunuz (client.lua), NUI tarafına gereksiz yere her tick'te veri gönderiyorsa (SendNUIMessage), CEF darboğaza girer. Can, zırh, hız gibi verileri yalnızca değer değiştiğinde gönderin:
-- resources/[hud]/hud/client/main.lua
local lastHealth = -1
local lastArmor = -1
CreateThread(function()
while true do
local ped = PlayerPedId()
local currentHealth = GetEntityHealth(ped) - 100
local currentArmor = GetPedArmour(ped)
-- Yalnızca değer değiştiğinde CEF katmanına veri yolla
if currentHealth ~= lastHealth or currentArmor ~= lastArmor then
lastHealth = currentHealth
lastArmor = currentArmor
SendNUIMessage({
action = 'UPDATE_STATUS',
health = currentHealth,
armor = currentArmor
})
end
Wait(350) -- Her karede değil, saniyede ~3 kez sorgulamak insan gözü için yeterlidir
end
end)SendNUIMessage çağrısı JSON serileştirmesi yapar. Bu çağrıyı milisaniyelik Wait(0) döngülerine sokmak doğrudan istemci işlemcisini kilitler.4. CEF Konsolunu Canlıda Kapatın
Geliştirme aşamasında tarayıcı konsoluna basılan yüzlerce console.log çağrısı, sunucu prodüksiyona geçtiğinde bellek kullanımını katlar. Canlı sunucularda arayüz dosyalarınızın minify edilmiş ve loglardan arındırılmış (production build) olduğundan emin olun.
Eğer sunucunuzdaki arayüzlerin, HUD'ın ve scriptlerin tek tek optimize edilmesiyle vakit kaybetmek istemiyorsanız, tüm CEF ve Lua altyapısı önceden test edilmiş ve optimize edilmiş DxAV1 - Roleplay Paketi sistemimize göz atabilir veya sunucunuzu profesyonel ellere teslim etmek için Developerlik Hizmeti alabilirsiniz.
Sıkça Sorulan Sorular (SSS)
1. Oyuncunun F8 konsolunda NUI kaynaklı hataları nasıl görebilirim?
Oyuncular oyun açıkken tarayıcıdan localhost:13172 adresine girerek FiveM CEF DevTools konsolunu açabilir ve arayüz hatalarını, bellek tüketimini doğrudan inceleyebilir.
2. Vue/React kullanmak FiveM'de FPS düşürür mü?
Hayır. Modern framework'ler sanal DOM sayesinde düzensiz yazılmış ham JavaScript'e göre genelde daha performanslıdır. Ancak bileşenler (components) ekrandan kalktığında unmount edilmeli ve arka plan zamanlayıcıları yok edilmelidir.
3. NUI odaklı donmalar ekran kartından mı kaynaklanır?
Çoğunlukla işlemci çekirdeklerinden birinin aşırı NUI tick trafiği veya CSS render yükü nedeniyle %100'e vurması sonucu oluşur.
