Profiler Skrip

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Profiler Skrip adalah alat dalam Konsol Pengembang yang memungkinkan Anda merekam sesi profiling dari semua skrip yang berjalan dan melihat biaya waktu CPU mereka dengan pengaturan perekaman dan tampilan yang disesuaikan. Ini dapat merekam semua jenis panggilan fungsi, termasuk fungsi Luau, panggilan metode, dan akses properti. Alat ini berguna untuk mengidentifikasi skrip yang menghabiskan paling banyak sumber daya CPU dan memperlambat kinerja.

Rekam sesi profiling

Sebelum merekam, Anda perlu memilih lingkungan perekaman dari:

Anda juga dapat mengatur opsi perekaman berikut:

PerilakuOpsiDefaultDeskripsi
Frekuensi1000 kali per detik (1 KHz)
10.000 kali per detik (10 KHz)
1 KHzFrekuensi 10 KHz memiliki presisi lebih tinggi, karena Profiler Skrip mungkin tidak menangkap panggilan API yang dieksekusi lebih sering daripada frekuensi yang Anda pilih, tetapi juga memiliki biaya kinerja yang lebih tinggi.
Panjang Sesi1 menit
5 menit
10 menit
Manual
ManualOpsi manual mengharuskan Anda untuk menghentikan perekaman secara manual.
Perilaku Polling LangsungAktif
Nonaktif
NonaktifPerilaku ini melakukan polling dan menyegarkan data profiling setiap detik selama sesi profiling.

Untuk merekam sesi profiling baru:

  1. Perluas dropdown alat untuk memilih ProfilerSkrip.

    Menu dropdown dari semua alat Konsol Pengembang dengan opsi ProfilerSkrip disorot untuk pemilihan.
  2. Perluas dropdown klien-server untuk memilih Klien atau Server.

    Menu dropdown dengan opsi Klien dan Server untuk pemilihan.
  3. OPSIONAL
    Centang kotak Langsung untuk mengaktifkan perilaku polling langsung.

  4. OPSIONAL
    Pilih Frekuensi dan Waktu untuk memilih frekuensi perekaman dan panjang waktu sesi jika Anda tidak ingin menggunakan nilai default.

  5. Klik Mulai untuk memulai sesi profiling. Jika Anda mengatur durasi, Profiler Skrip menampilkan timer hitung mundur dengan waktu yang tersisa dalam sesi.

  6. Klik Hentikan atau tunggu hingga perekaman selesai untuk menampilkan data profiling.

Baca data profiling

Setelah sesi berhenti, Profiler Skrip menghasilkan tabel yang menunjukkan berapa banyak waktu yang dihabiskan setiap panggilan fungsi dalam waktu CPU. Tabel mengurutkan panggilan fungsi dari yang paling banyak waktu dihabiskan hingga yang paling sedikit, dan memungkinkan Anda mencari fungsi tertentu berdasarkan namanya. Ini menyediakan dua tampilan berikut:

  • Callgraph (Default): Mengkategorikan dan menampilkan panggilan fungsi dalam struktur pohon berdasarkan tugas bingkai. 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. Misalnya, Stepped/CameraInput/<anonymous> mungkin mengungkapkan Players.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125. Contoh tampilan callgraph dari sesi profiling.
  • Fungsi: Mencantumkan semua fungsi tanpa mengkategorikannya berdasarkan tugas. Contoh tampilan fungsi dari sesi profiling.

Anda juga dapat memilih dari opsi tampilan berikut untuk menyesuaikan kebutuhan debugging Anda:

NamaOpsiDefaultDeskripsi
SatuanMilidetik (ms)
Persentase (%)
msMenampilkan waktu yang dihabiskan pada setiap panggilan API dalam milidetik atau persentase dari total sesi perekaman.
Rata-rataNonaktif
1 detik
1 menit
5 menit
10 menit
NonaktifMenghitung rata-rata waktu yang dihabiskan pada setiap panggilan API berdasarkan nilai yang dipilih. Jika Anda memilih opsi yang lebih lama dari panjang sesi, Profiler Skrip memperkirakan 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 menjalankan kode selama 5 menit.

Ekspor data profiling

Profiler Skrip memungkinkan Anda mengekspor data profiling yang direkam sebagai file JSON. Untuk mengekspor data yang direkam setelah sesi profiling:

  1. Di jendela Profiler Skrip, klik Ekspor.

  2. Di jendela ekspor, pilih sesi profiling yang ingin Anda ekspor. Ubah nama file default jika Anda ingin mengatur nama kustom.

  3. Klik Ekspor untuk menyimpan file JSON.

    Contoh jendela ekspor.

File JSON yang diekspor mencakup bidang berikut:

  • Versi: Nomor versi.
  • SessionStartTime: Timestamp dalam milidetik yang merekam waktu mulai sesi.
  • SessionEndTime: Timestamp dalam milidetik yang merekam waktu akhir sesi.
  • Kategori: Sebuah array kategori tugas bingkai yang direkam dalam sesi profiling. Setiap entri mencakup:
    • Nama: Nama setiap kategori tugas bingkai.
    • NodeId: Pengidentifikasi unik dari kategori tugas (node). Ini adalah indeks berbasis 1 ke dalam array Nodes. Misalnya, Anda dapat mencari node dengan NodeId 123 dengan mengambil elemen ke-123 dalam Nodes.
  • Nodes: Sebuah array node yang direkam dalam sesi profiling. Setiap entri mencakup:
    • TotalDuration: Jumlah waktu yang dihabiskan node dalam waktu CPU dalam mikrodetik.
    • FunctionIds: Sebuah array pengidentifikasi unik dari fungsi.
    • NodeIds: Sebuah array ID Node.
  • Fungsi: Sebuah array fungsi yang direkam dalam sesi profiling.
    • TotalDuration: Jumlah waktu yang dihabiskan fungsi dalam waktu CPU dalam mikrodetik.
    • Nama: Nama fungsi, jika tersedia.
    • Sumber: Sumber fungsi, jika tersedia.
    • Baris: Nomor baris fungsi, jika tersedia.
    • Flags: Sebuah bit field 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 eksekusi sebagai bagian dari plugin.
Contoh Data Profiling yang Diekspor
{
"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}
]
}
©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.