Script Profiler adalah alat dalam Developer Console yang memungkinkan Anda untuk merekam sesi profilasi dari semua script yang berjalan dan melihat biaya waktu CPU mereka dengan pengaturan perekaman dan tampilan khusus. Ini dapat merekam semua jenis panggilan fungsi, termasuk panggilan metode dan akses ke properti. Alat ini berguna untuk meng
Menyimpan Profilasi Sesi
Sebelum merekam, Anda perlu meng選擇矽記錄環境 dari:
- Klien (Standar) — Menyimpan skrip sisi klien, termasuk LocalScripts dan Scripts dengan 0> Class.BaseScript.RunContext|RunContext0> yang diatur ke 3> enum.runContext.Client|Client 3>.
- Server — Menyimpan skrip sisi server, termasuk Scripts dengan RunContext tetap ke 0> Enum.RunContext.Server|Server0> atau 3> Enum.RunContext.Legacy|Legacy 3> . Pemutar skrip menghapus semua data
Anda juga dapat mengatur opsi perekaman berikut:
Perilaku | Opsi | Standar | Deskripsi |
---|---|---|---|
F frekuensi | 1000 kali per detik (1 KHz)10.000 kali per detik (10 KHz) | 1 GHz | Frekuensi 10 KHz memiliki ketepatan yang lebih tinggi, karena Script Profiler mungkin tidak mengambil panggilan API yang dieksekusi lebih sering daripada frekuensi yang Anda pilih, tetapi juga memiliki biaya kinerja yang lebih tinggi. |
Durasi Sesi | 1 menit5 menit10 menitManual | Manual | Opsi manual mengharuskan Anda untuk berhenti merekam secara manual. |
Perilaku Polling Langsung | Matikan | Mati | Perilaku ini mengumpulkan dan menyegarkan data profil setiap detik selama sesi profil. |
Untuk merekam sesi profil baru:
Buka Konsol Pengembang .
Jadilah Penurun Alat untuk memilih SkripProfiler.
Jadilah Penurunan klien-server untuk memilih Klien atau Server.
(Opsional) Periksa kotak pemeriksaan Hidup untuk mengaktifkan perilaku polling langsung.
(Opsional) Pilih Freq dan Time untuk memilih frekuensi rekaman dan waktu sesi jika Anda tidak ingin menggunakan nilai default.
Klik Mulai untuk memulai sesi profil. Jika Anda menetapkan durasi, Script Profiler menunjukkan timer Countdown dengan waktu yang tersisa di sesi.
Klik Berhenti atau tunggu sampai data profil selesai untuk menampilkan data profil.
Membaca Profil Data
Setelah sesi berakhir, Script Profiler menghasilkan tabel yang menunjukkan berapa banyak waktu setiap panggilan fungsi di waktu CPU. Tabel menyortir panggilan fungsi berdasarkan waktu terhabiskan paling banyak dan waktu terhabiskan paling sedikit, dan memungkinkan Anda untuk mencari fungsi tertentu berdasarkan nama mereka. Ini menyediakan dua tampilan berikut:
- Panggilan Grafis (Standar): Kategorikan dan tampilkan panggilan fungsi ke dalam struktur pohon berdasarkan tugas frame. Tampilan ini menunjukkan setiap kategori tugas sebagai node di bawah akar yang sama dan memungkinkan Anda untuk mengekspansinya untuk melihat fungs
- Fungsi : Daftar semua fungsi tanpa mengkategorikannya berdasarkan tugas.
Anda juga dapat memilih dari opsi tampilan berikut untuk menyesuaikan kebutuhan debugging Anda:
Nama | Opsi | Standar | Deskripsi |
---|---|---|---|
Unit | Milidetik (ms) Persentase (%) | ms | Menampilkan waktu yang dibutuhkan untuk setiap panggilan API dalam milidetik atau persentase dari total sesi rekaman. |
Rata-Rata | Mati1-detik1-menit5-menit10-menit | Mati | Menghitung waktu rata-rata yang dibutuhkan untuk setiap panggilan API oleh nilai yang dipilih. Jika Anda memilih opsi yang lebih panjang dari panjang sesi, Script profiler mengekstrapolasi panjang sesi untuk menghitung rata-rata. Misalnya, Anda dapat memilih opsi 5 menit untuk sesi 1 menit untuk melihat nilai rata-rata yang diharapkan jika Anda mengeksekkan kode selama 5 men |
Meksimalkan Data Profil
Script Profiler memungkinkan Anda untuk mengekspor data profil yang disimpan sebagai file JSON. Untuk mengekspor data profil setelah sesi profil:
Di jendela Script Profiler, klik Eksportasi .
Pada jendela ekspor, pilih sesi profil yang ingin Anda ekspor. Ganti nama file default jika Anda ingin menetapkan nama khusus.
Klik Eksportasi untuk menyimpan file JSON.
File JSON yang diekspor termasuk lapangan berikut:
- Versi : Nomor versi.
- Waktu Awal Sesi : Waktu UTC milidetik yang merekam waktu pemuluan sesi.
- Waktu Akhir Sesi : Tim戳 dalam milidetik yang merekam waktu akhir sesi.
- Kategori : Sebuah array kategori tugas frame yang dicatat dalam sesi profil. Setiap entri mencakup:
- Nama : Nama setiap kategori tugas frame.
- NodeId : Pengenal unik kategori tugas ( node). Ini adalah indeks 1-base ke Nodes array. Misalnya, Anda dapat mencari node dengan NodeId dari 0> 1230> dengan mengambil elemen 123rd dalam 3> Nodes 3> .
- Pengikat : Sebuah array pengikat yang dicatat dalam sesi profil. Setiap entri termasuk:
- TotalDuration : Jumlah waktu yang dibutuhkan oleh node dalam waktu CPU dalam microsecond.
- FunctionIds : Array identifikasi fungsi yang unik.
- NodeIds : Array dari ID节点.
- Fungsi : Sebuah matriks fungsi yang dicatat dalam sesi profil.
- DurasiTotal : Jumlah waktu yang dibutuhkan fungsi dalam waktu CPU dalam mik秒.
- Nama : Nama fungsi, jika tersedia.
- Sumber : Sumber fungsi, jika tersedia.
- Baris : Nomor baris fungsi, jika tersedia.
- Bendera : Sedikit lapangan yang menunjukkan lingkungan eksekusi fungsi tertentu. Saat ini dapat memiliki nilai berikut:
- 0 : Bit ke-0 mewakili IsNative untuk eksekusi di bawah Kode Bawaan.
- 1 : Bit ke-1 mewakili IsPlugin untuk eksekusi sebagai bagian dari plugin.
Contoh Data Profilasi yang Daimportasi
{
"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}
]
}