hitch warning (kare süresi sıçraması)
Bir şey sunucuyu bir anlığına dondurdu. Oyuncular bunu takılma olarak hisseder. Bu bir belirtidir, bir arıza değil.
Önce şunu yap
Başlangıçta birkaç tane olması normaldir. Oyun sırasında sürekli olması, bir script'e bakılması gerektiği anlamına gelir.
Ne anlama gelir
Bir şey ana thread'i o kadar süre engelledi. Bu bir hata DEĞİLDİR: hiçbir şey başarısız olmadı ve hiçbir şey çökmedi. Çalışma zamanının, bir karenin olması gerekenden çok daha uzun sürdüğünü bildirmesidir, ki oyuncular bunu bir donma olarak hisseder.
Onu, üzerinde bir sayı olan bir belirti olarak gör. Yaklaşık 100ms'nin altı genelde başlangıç gürültüsüdür; normal oyun sırasında 200ms'yi aşan sürekli takılmalar gerçek bir sorundur.
Neden olur
Ne sıklıkla doğru cevap olduğuna göre sıralı.
- 1
Sunucuda eşzamanlı bir veritabanı sorgusu
Tick'in tamamı MySQL'i bekler. Eksik bir indeks bunu görünmezden birkaç yüz milisaniyeye çıkarır.
- 2
Kaynak başlangıcında ağır iş
Büyük bir JSON config'i ayrıştırmak, büyük bir tablo kurmak, yüzlerce prop yüklemek. Yalnızca başlangıçtaki takılmalar genelde zararsızdır.
- 3
Wait'siz sıkı bir döngü
Yield'siz
while true do ... end, bitene kadar zamanlayıcıyı engeller. - 4
Aynı anda çok sayıda varlığı stream etmek
Aynı karede çok sayıda model ya da animasyon sözlüğü istemek.
- 5
Yavaş bir olay işleyicisi
Dolu bir sunucuda, oyuncu başına tetiklenen ve gerçek iş yapan bir olay.
Hangisinin seninki olduğu nasıl anlaşılır
İstemci konsolunda:
resmon 1
kaynak başına CPU'yu gösterir. Sunucuda txAdmin ve yerleşik profilleyici kaynağı işaret eder. Takılmanın zamanlamasını o sırada olanla eşleştir: katılım dalgası, kaynak yeniden başlatması, ya da belirli bir oyuncu işlemi.
Nereye bakmalı
resmon'un işaret ettiği kaynak, sonra onun thread'leri ve veritabanı çağrıları.
Nasıl düzeltilir
Uzun döngülerin içinde yield et, sorguları asenkron yap, ve süzdüğün şeyi indeksle:
-- engelleyen
local rows = MySQL.query.await('SELECT * FROM users')
-- engellemeyen
MySQL.query('SELECT * FROM users WHERE identifier = ?', { id }, function(rows)
-- ...
end)
-- her zaman yield et
CreateThread(function()
while true do
Wait(500) -- bunu asla atlama
end
end)Hâlâ kendi kodunda mı takıldın?
Bu sayfa, bu hatanın genelde ne anlama geldiğini anlatır. Konsolunu Server Fixer'a yapıştır; içindeki her şeyi sıraya dizer ve önce ne yapman gerektiğini söyler. Kendin uğraşmak istemiyorsan ORBIE script'i onarır ve kaynağı sunucuna atmaya hazır geri verir.
bug_reportServer Fixer'ı açBu tür bir hata için Script Optimizer sana kare kaybettiren şeyi bulur ve yeniden yazar.