Kontrol properti Workspace.SignalBehavior memutuskan apakah penangan acara ditembakkan segera atau ditunda.Kami merekomendasikan opsi Enum.SignalBehavior.Deferred , yang membantu meningkatkan kinerja dan keakuratan mesin.Pengelola acara untuk peristiwa ditunda dilanjutkan di titik penangguhan kembali berikutnya, bersama dengan penangani acara baru yang baru diaktifkan.
Diagram berikut membandingkan perilaku acara Immediate dan perilaku acara Deferred.
- Dengan perilaku Immediate, jika suatu peristiwa memicu peristiwa lain, penangani peristiwa kedua langsung terbakar.
- Dengan perilaku Deferred, acara kedua ditambahkan ke belakang antrian dan dijalankan nanti.
Total waktu yang diambil tidak berubah, tetapi urutannya berbeda.

Re-entransi mencegah acara terus menembak satu sama lain ketika mereka mencapai kedalaman tertentu. Batas saat ini untuk ini adalah 10.
Manfaat acara ditunda
Perilaku Immediate memiliki beberapa kekurangan.Untuk setiap instansi yang ditambahkan ke gameAnda, properti yang berubah, atau beberapa pemicu lain yang diaktifkan, mesin perlu menjalankan kode Luau sebelum terjadi hal lain.
- Untuk mengubah 1.000 properti, 1.000 potongan kode potensial perlu dijalankan setelah setiap perubahan.
- Bug aneh dan sulit didiagnosis dapat terjadi, seperti menghapus peristiwa penembakan sebelum sesuatu bahkan ditambahkan.
- Sistem kritis kinerja dapat menembakkan peristiwa yang memerlukan mereka untuk memberikan kembali dan ke Luau.
- Pengelola acara dapat membuat perubahan pada tempat atau memicu acara lain setiap kali acara ditembak.
- Sebuah peristiwa dapat menembak beberapa kali meskipun redundan, seperti properti berubah dua kali.
Dengan memiliki bagian tertentu dari siklus kehidupan mesin di mana Luau dapat berjalan, mesin dapat mendapatkan kinerja yang lebih baik dengan menggunakan beberapa asumsi:
- Sistem kritis kinerja tidak perlu menyerahkan ke Luau, yang menyebabkan peningkatan kinerja.
- Kecuali mesin itu sendiri mengubahnya, tempat tidak pernah berubah di luar titik penyambungan kembali.
Titik lanjutan kembali
Setelah ditunda, penangan acara dilanjutkan di titik penyambungan berikutnya. Saat ini, kumpulan titik penyambungan termasuk:
- Pemrosesan input (berlanjut setiap input yang akan diproses, lihat UserInputService )
- Skrip tunggu warisan dilanjutkan seperti wait() , spawn() , dan delay()
Pola kode yang terpengaruh umum
Dengan peristiwa remote, contoh berikut entah berhenti bekerja dengan benar atau memiliki perilaku yang halus berbeda; mereka bergantung pada peristiwa yang dilanjutkan segera.
Memicu dan menangkap peristiwa tengah eksekusi
Dalam contoh ini, false selalu dikembalikan ketika acara yang ditunda diaktifkan karena callback belum dijalankan.Untuk bekerja dengan benar, thread harus menghasilkan sampai setidaknya ketika acara seharusnya ditembak.
local success = false
event:Connect(function ()
success = true
end)
doSomethingToTriggerEvent() -- Menyebabkan `event` untuk menembak
return success
Dengarkan untuk peristiwa pertama terjadinya suatu peristiwa
connection = event:Connect(function ()
connection:Disconnect()
-- lakukan sesuatu
end)
Dengan acara tertunda diaktifkan, banyak invokasi penangani acara dapat diantri sebelum Anda terputus dari acara.Memanggil Disconnect() menjatuhkan semua invokasi penangani acara tertunda - perilaku yang sama yang ada untuk acara langsung.
Alternatifnya, gunakan Once() sebagai metode yang lebih nyaman untuk terhubung ke acara yang hanya membutuhkan panggilan pertama.
Peristiwa yang mengubah leluhur atau properti
Acara yang ditunda menyebabkan acara yang menangani perubahan keturunan atau properti untuk ditembak setelah keturunan atau properti diubah:
local part = Instance.new("Part", workspace)
local function onPartDestroying()
print("In signal:", part:GetFullName(), #part:GetChildren())
end
part.Destroying:Connect(onPartDestroying)
part:Destroy()
Karena Destroy() bekerja segera setelah skrip yang memanggilnya menghasilkan, instansi sudah dihancurkan saat onPartDestroying() dipanggil.Untuk lebih banyak contoh, lihat Instance.Destroying .