Script Profiler, Geliştirici Konsolu içinde yer alan, çalışan tüm betiklerin profilini kaydetmenizi ve özel kayıt ve görüntüleme ayarlarıyla CPU zaman maliyetlerini görüntülemenizi sağlayan bir araçtır. Luau fonksiyonları, yöntem çağrıları ve özellik erişimleri dahil olmak üzere tüm türdeki işlev çağrılarını kaydedebilir. Bu araç, en fazla CPU kaynaklarını tüketen ve performansı yavaşlatan betikleri tanımlamak için faydalıdır.
Profiling oturumlarını kaydet
Kayıttan önce, kayıt ortamını seçmeniz gerekir:
- İstemci (Varsayılan) — LocalScripts ve Scripts ile RunContext değerinin Client olarak ayarlandığı istemci tarafı betiklerini kaydeder.
- Sunucu — Scripts ile RunContext değerinin Server veya Legacy olarak ayarlandığı sunucu tarafı betiklerini kaydeder. Script Profiler, her oturumun sonunda tüm toplanan sunucu tarafı verilerini temizler.
Ayrıca aşağıdaki kayıt seçeneklerini de ayarlayabilirsiniz:
| Davranış | Seçenekler | Varsayılan | Açıklama |
|---|---|---|---|
| Sıklık | 1.000 kez saniyede (1 KHz) 10.000 kez saniyede (10 KHz) | 1 KHz | 10 KHz sıklığı daha yüksek hassasiyete sahiptir, çünkü Script Profiler, seçtiğiniz sıklıktan daha sık gerçekleşen API çağrılarını yakalayamayabilir, ancak daha yüksek bir performans maliyeti vardır. |
| Oturum Süresi | 1 dakika 5 dakika 10 dakika Manuel | Manuel | Manuel seçenek, kaydı manuel olarak durdurmanızı gerektirir. |
| Canlı Anket Davranışı | Açık Kapalı | Kapalı | Bu davranış, bir profil oluşturma oturumu sırasında her saniye profil verilerini anket yapar ve yeniler. |
Yeni bir profil oluşturma oturumu kaydetmek için:
Geliştirici Konsolu açın.
ScriptProfiler'ı seçmek için araçlar açılır menüsünü genişletin.

İstemci veya Sunucu'yu seçmek için istemci-sunucu açılır menüsünü genişletin.

- İSTEĞE BAĞLICanlı anket davranışını etkinleştirmek için Canlı onay kutusunu işaretleyin.
- İSTEĞE BAĞLIVarsayılan değerleri kullanmak istemiyorsanız kayıt sıklığını ve oturum süresini seçmek için Sıklık ve Zaman'ı seçin.
Profil oluşturma oturumuna başlamak için Başlat'a tıklayın. Bir süre ayarladıysanız, Script Profiler oturumda kalan süreyi gösteren bir geri sayım sayacı görüntüler.
Profil verilerini görüntülemek için Durdur'a tıklayın veya kaydın bitmesini bekleyin.
Profil verilerini oku
Bir oturum durduktan sonra, Script Profiler her işlev çağrısının CPU zamanında ne kadar maliyet oluşturduğunu gösteren bir tablo oluşturur. Tablo, işlev çağrılarını en çok zaman harcayanlardan en az zaman harcayanlara doğru sıralar ve belirli işlevleri adlarına göre aramanıza olanak tanır. Aşağıdaki iki görünümü sağlar:
- Çağrı grafiği (Varsayılan): İşlev çağrılarını çerçeve görevlerine dayalı bir ağaç yapısında kategorize eder ve görüntüler. Bu görünüm, her görev kategorisini aynı kök altında düğümler olarak gösterir ve işlevleri görüntülemek için genişletmenize olanak tanır. Ayrıca, ağaçtaki herhangi bir düğümün üzerine gelerek dosya ve satır bilgilerini görüntüleyebilirsiniz. Örneğin, Stepped/CameraInput/<anonymous> Players.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125 bilgisini açığa çıkarabilir.

- Fonksiyonlar: Tüm işlevleri görevler tarafından kategorize etmeden listeler.

Ayrıca hata ayıklama ihtiyaçlarınıza göre özelleştirmek için aşağıdaki görüntüleme seçeneklerinden birini seçebilirsiniz:
| Ad | Seçenekler | Varsayılan | Açıklama |
|---|---|---|---|
| Birim | Milisaniye (ms) Yüzde (%) | ms | Her API çağrısında harcanan zamanı milisaniye veya toplam kayıt oturumunun yüzdesi olarak görüntüler. |
| Ortalama | Kapalı 1 saniye 1 dakika 5 dakika 10 dakika | Kapalı | Seçilen değere göre her API çağrısında harcanan ortalama süreyi hesaplar. Oturum süresinden daha uzun bir seçenek seçerseniz, Script Profiler ortalama hesaplamak için oturum süresini dışarıdan tahmin eder. Örneğin, 1 dakikalık bir oturum için 5 dakikalık seçeneği seçerek kodu 5 dakika çalıştırırsanız beklenen ortalama değeri görebilirsiniz. |
Profil verilerini dışa aktar
Script Profiler, kaydedilen profil verilerini JSON dosyası olarak dışa aktarmanıza olanak tanır. Bir profil oluşturma oturumundan sonra kaydedilen verileri dışa aktarmak için:
Script Profiler penceresinde Dışa Aktar'a tıklayın.
Dışa aktarma penceresinde, dışa aktarmak istediğiniz profil oturumunu seçin. Varsayılan dosya adını özelleştirmek istiyorsanız yeniden adlandırın.
JSON dosyasını kaydetmek için Dışa Aktar'a tıklayın.

Dışa aktarılan JSON dosyası aşağıdaki alanları içerir:
- Sürüm: Sürüm numarası.
- OturumBaşlangıçZamanı: Oturum başlangıç zamanını kaydeden milisaniye cinsinden bir zaman damgası.
- OturumBitişZamanı: Oturum bitiş zamanını kaydeden milisaniye cinsinden bir zaman damgası.
- Kategoriler: Profil oluşturma oturumunda kaydedilen çerçeve görev kategorilerinin bir dizisi. Her giriş şunları içerir:
- Ad: Her çerçeve görev kategorisinin adı.
- DüğümId: Bir görev kategorisinin (düğüm) benzersiz tanımlayıcısı. Nodes dizisinde 1 tabanlı bir indeks. Örneğin, NodeId'si 123 olan düğümü bulmak için Nodes dizisindeki 123. öğeyi alabilirsiniz.
- Düğümler: Profil oluşturma oturumunda kaydedilen düğümlerin bir dizisi. Her giriş şunları içerir:
- ToplamSüre: Düğümün CPU zamanında ne kadar maliyet oluşturduğunun mikro saniye cinsinden miktarı.
- FonksiyonId'leri: İşlevlerin benzersiz tanımlayıcılarının bir dizisi.
- DüğümId'leri: Düğüm ID'lerinin bir dizisi.
- Fonksiyonlar: Profil oluşturma oturumunda kaydedilen işlevlerin bir dizisi.
- ToplamSüre: İşlevin CPU zamanında ne kadar maliyet oluşturduğunun mikro saniye cinsinden miktarı.
- Ad: İşlevin adı, mevcutsa.
- Kaynak: İşlevin kaynağı, mevcutsa.
- Satır: İşlevin satır numarası, mevcutsa.
- Bayraklar: Herhangi bir özel işlev yürütme ortamını gösteren bir bit alanı. Şu anda aşağıdaki değerlere sahip olabilir:
- 0: 0. bit, Yerel Kod Üretimi altında IsNative'yi temsil eder.
- 1: 1. bit, bir eklenti olarak yürütmeyi temsil eden IsPlugin'dir.
{
"Version":2,
"SessionStartTime":1704850750514,
"SessionEndTime":1704850751198,
"Categories":
[
{"Name":"Paralel Luau","NodeId":4},
{"Name":"Kalp Atışı","NodeId":1}
],
"Nodes":
[
{"TotalDuration":2530,"FunctionIds":[1],"NodeIds":[2]},
{"TotalDuration":2530,"FunctionIds":[2,5],"NodeIds":[3,7]},
{"TotalDuration":1267},
{"TotalDuration":7746,"FunctionIds":[3],"NodeIds":[5]},
{"TotalDuration":7746,"FunctionIds":[4],"NodeIds":[6]},
{"TotalDuration":7746},
{"TotalDuration":1263,"FunctionIds":[6],"NodeIds":[8]},
{"TotalDuration":1263,"FunctionIds":[7],"NodeIds":[9]},
{"TotalDuration":1263,"FunctionIds":[8],"NodeIds":[10]},
{"TotalDuration":1263}
],
"Functions":
[
{"Name":"main","TotalDuration":2530},
{"Source":"builtin_ManageCollaborators.rbxm.ManageCollaborators.Packages._Index.roblox_rodux-3.0.0.rodux.Store","Line":81,"TotalDuration":1267},
{"Name":"Script","TotalDuration":7746},
{"Source":"Workspace.Actor.Script","Line":1,"TotalDuration":7746},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Line":221,"TotalDuration":1263},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Name":"_update","Line":236,"TotalDuration":1263},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Name":"_getRange","Line":277,"TotalDuration":1263},
{"Source":"[C]","Name":"ScrollingFrame.CanvasPosition","TotalDuration":1263}
]
}