Profil Skrip adalah alat dalam Konsol Pengembang yang memungkinkan Anda untuk merekam sesi profilasi semua skrip yang dijalankan dan melihat biaya waktu CPU mereka dengan pengaturan perekaman dan tampilan khusus.Ini dapat merekam semua jenis panggilan fungsi, termasuk panggilan fungsi Luau, panggilan metode, dan akses properti.Alat ini berguna untuk mengidentifikasi skrip yang mengambil sumber daya CPU paling banyak dan memperlambat pelaksanaan.
Catat sesi profilasi rekaman
Sebelum merekam, Anda perlu memilih lingkungan perekaman dari:
- Klien (Standar) — Merekam skrip sisi klien, termasuk LocalScripts dan Scripts dengan RunContext diatur ke Client .
- Server — Merekam skrip sisi server, termasuk Scripts dengan RunContext diatur ke Server atau Legacy .Profil Skrip menghapus semua data sisi server yang dikumpulkan di akhir setiap sesi.
Anda juga dapat mengatur opsi rekaman berikut:
Perilaku | Pilihan | Standar | Deskripsi |
---|---|---|---|
Frekuensi | 1000 kali per detik (1 KHz)10.000 kali per detik (10 KHz) | 1 KHz | Frekuensi 10 KHz memiliki ketepatan lebih tinggi, karena Script Profiler mungkin tidak mendeteksi panggilan API yang dieksekusi lebih sering dari frekuensi yang Anda pilih, tetapi juga memiliki biaya kinerja yang lebih tinggi. |
Durasi Sesi | Manual 1 menit5 menit10 menit | Manual | Opsi manual memerlukan Anda untuk berhenti merekam secara manual. |
Perilaku Polling Langsung | PadaMati | Ditutup | Perilaku ini memperoleh dan menyegarkan data profil setiap detik selama sesi profilasi. |
Untuk merekam sesi profil baru:
Buka Konsol Pengembang.
Perluas dropdown alat untuk memilih ScriptProfiler .
Perluas dropdown klien-server untuk memilih Klien atau Server .
(Opsi) Periksa kotak centang Langsung untuk mengaktifkan perilaku polling langsung.
(Opsi) Pilih Frekuensi dan Waktu untuk memilih frekuensi perekaman dan durasi sesi jika Anda tidak ingin menggunakan nilai default.
Klik Mulai untuk memulai sesi profilasi.Jika Anda mengatur durasi, Profil Skrip menampilkan penghitung mundur dengan waktu yang tersisa dalam sesi.
Klik Berhenti atau tunggu sampai perekaman selesai untuk menampilkan data profil.
Baca data profilasi
Setelah sesi berhenti, Profil Skrip menghasilkan tabel yang menunjukkan berapa banyak waktu yang dibutuhkan setiap panggilan fungsi di waktu CPU.Fungsi urutan meja mengurutkan panggilan fungsi dari yang paling banyak dibelanjakan ke yang paling sedikit dibelanjakan, dan memungkinkan Anda untuk mencari fungsi tertentu dengan nama mereka.Ini memberikan dua pandangan berikut:
- Callgraph (Standar): Mengkategorikan dan menampilkan panggilan fungsi ke dalam struktur pohon berdasarkan tugas frame.Tampilan ini menampilkan setiap kategori tugas sebagai node di bawah akar yang sama dan memungkinkan Anda untuk memperluasnya untuk melihat fungsi.Anda juga dapat mengarahkan kursor ke node mana pun di pohon untuk melihat informasi file dan baris.Sebagai contoh, Langkah/Input Kamera/<anonymous> mungkin mengungkapkan Players.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125 .
- Fungsi : Daftar semua fungsi tanpa mengkategorikan mereka berdasarkan tugas.
Anda juga dapat memilih dari opsi tampilan berikut untuk menyesuaikan kebutuhan debugging Anda:
Nama | Pilihan | Standar | Deskripsi |
---|---|---|---|
Satu | Milidetik (ms)Persentase (%) | ms | Menampilkan waktu yang dihabiskan untuk setiap panggilan API dalam milidetik atau persentase dari sesi perekaman total. |
Rata-rata | Mati1- detik1-menit5-menit10-menit | Ditutup | Menghitung rata-rata waktu yang dihabiskan untuk setiap panggilan API oleh nilai yang dipilih.Jika Anda memilih opsi yang lebih lama dari durasi sesi, profiler skrip melampaui durasi sesi untuk menghitung rata-rata.Sebagai contoh, Anda dapat memilih opsi 5 menit untuk sesi 1 menit untuk melihat nilai rata-rata yang diharapkan jika Anda menjalankan kode selama 5 menit. |
Ekspor data profilasi
Profiler Skrip memungkinkan Anda untuk mengekspor data profil yang direkam sebagai file JSON. Untuk mengekspor data yang direkam setelah sesi profil:
Di jendela Profil Skrip, klik Ekspor .
Di jendela ekspor, pilih sesi profil yang ingin Anda ekspor. Ganti nama file default jika Anda ingin menetapkan nama khusus.
Klik Ekspor untuk menyimpan file JSON.
File JSON yang diekspor termasuk bidang berikut:
- Versi : Nomor versi.
- Waktu Mulai Sesi : Sebuah timestamp dalam milidetik yang mencatat waktu mulai sesi.
- Waktu Akhir Sesi : Sebuah timestamp dalam milidetik yang mencatat waktu akhir sesi.
- Kategori : Sebuah array kategori tugas frame yang dicatat dalam sesi profil. Setiap entri termasuk:
- Nama : Nama setiap kategori tugas frame.
- NodeId : Pengenal unik dari kategori tugas (node).Ini adalah indeks berbasis 1 ke array Nodes .Sebagai contoh, Anda dapat melihat node dengan NodeId dari 123 dengan mengambil elemen ke-123 di Nodes .
- Nodes : Sebuah array node yang direkam dalam sesi profil. Setiap entri termasuk:
- Durasi Total : Jumlah waktu yang dikenakan node dalam waktu CPU dalam milidetik.
- FunctionIds : Sebuah array identifikator unik fungsi.
- NodeIds : Sebuah array dari ID Node.
- Fungsi : Sebuah array fungsi yang direkam dalam sesi profil.
- Durasi Total : Jumlah waktu yang dibutuhkan fungsi dalam waktu CPU dalam milidetik.
- Nama : Nama fungsi, jika tersedia.
- Sumber : Sumber fungsi, jika tersedia.
- Garis : Nomor baris fungsi, jika tersedia.
- Flags : Bidang sedikit yang menunjukkan lingkungan eksekusi fungsi tertentu. Saat ini dapat memiliki nilai berikut:
- 0 : Bit ke-0 mewakili IsNative untuk eksekusi di bawah Native CodeGen.
- 1 : Bit ke-1 mewakili IsPlugin untuk dieksekusi sebagai bagian dari plugin.
Contoh Data Profiling Ekspor Contoh
{
"Version":2,
"SessionStartTime":1704850750514,
"SessionEndTime":1704850751198,
"Categories":
[
{"Name":"Parallel Luau","NodeId":4},
{"Name":"Heartbeat","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}
]
}