Mengukur Performa
Modul Benchmark.
Mengukur Performa adalah pelajaran Ruby Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Ruby Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Ruby Academy mencakup 4 pelajaran total.
Mengapa Mengukur?
Mengoptimalkan tanpa mengukur berarti menebak. Modul Benchmark dalam pustaka standar Ruby mengukur waktu kode secara tepat.
- Temukan bagian yang lambat sebelum mengubahnya
- Bandingkan implementasi secara objektif
- Hindari optimasi prematur
require 'benchmark'
time = Benchmark.realtime do
1_000_000.times { |i| i * 2 }
end
puts "Took #{time.round(4)}s"Benchmark.measure
Benchmark.measure mengembalikan laporan waktu pengguna, sistem, dan nyata.
- Waktu pengguna adalah waktu CPU dalam kode Anda
- Waktu nyata adalah waktu berlalu menurut jam dinding
require 'benchmark'
result = Benchmark.measure do
500_000.times { |i| i.to_s }
end
puts resultBenchmark.bm
Benchmark.bm menjalankan dan memberi label pada beberapa blok dalam sebuah tabel.
- Berikan lebar label untuk merapikan perataan
- Setiap
x.reportadalah satu baris
require 'benchmark'
Benchmark.bm(10) do |x|
x.report('to_s:') { 100_000.times { |i| i.to_s } }
x.report('inspect:') { 100_000.times { |i| i.inspect } }
endBenchmark.bmbm
Benchmark.bmbm terlebih dahulu menjalankan uji coba untuk memanaskan cache dan GC, sehingga menghasilkan angka yang lebih adil.
- Lintasan pertama dibuang
- Lintasan kedua adalah pengukuran sebenarnya
require 'benchmark'
Benchmark.bmbm do |x|
x.report('sum:') { (1..100_000).sum }
x.report('reduce:') { (1..100_000).reduce(:+) }
endrealtime untuk Pengukuran Cepat
Benchmark.realtime hanya mengembalikan detik waktu dinding sebagai bilangan pecahan.
- Cara paling sederhana untuk mengukur waktu satu blok
- Cocok untuk pemeriksaan sewaktu-waktu
require 'benchmark'
elapsed = Benchmark.realtime do
arr = Array.new(100_000) { rand }
arr.sort
end
puts "Sorted in #{elapsed.round(4)}s"Jam Monotonik
Untuk pengukuran waktu yang tepat dan tidak terpengaruh perubahan jam sistem, gunakan Process.clock_gettime dengan jam monotonik.
- Kebal terhadap penyesuaian NTP
- Opsi bawaan yang paling akurat
start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
200_000.times { |i| i * i }
finish = Process.clock_gettime(Process::CLOCK_MONOTONIC)
puts "Elapsed: #{(finish - start).round(4)}s"Membandingkan Dua Pendekatan
Tolok ukur sangat berguna saat membandingkan alternatif. Jalankan keduanya dengan beban yang sama.
- Pastikan ukuran masukan cukup besar agar dapat diukur
- Ulangi pengukuran untuk mengurangi gangguan acak
require 'benchmark'
arr = (1..100_000).to_a
Benchmark.bm(8) do |x|
x.report('map:') { arr.map { |n| n * 2 } }
x.report('each:') { r = []; arr.each { |n| r << n * 2 } }
endWaspadai Tolok Ukur Mikro
Tolok ukur yang sangat kecil dapat menyesatkan.
- JIT dan cache mungkin tidak mencerminkan beban kerja nyata
- GC dapat berjalan di tengah pengukuran
- Ukur ukuran data yang realistis
require 'benchmark'
# Too small to be meaningful
t = Benchmark.realtime { 10.times { |i| i + 1 } }
puts "Misleadingly tiny: #{t}s"Iterasi per Detik
Sering kali Anda ingin mengetahui laju pemrosesan: jumlah operasi per detik. Gem benchmark-ips melaporkan nilai ini, tetapi Anda dapat memperkirakannya secara manual.
- Hitung iterasi dalam rentang waktu yang tetap
- Nilai ips yang lebih tinggi berarti lebih cepat
deadline = Process.clock_gettime(Process::CLOCK_MONOTONIC) + 0.2
count = 0
while Process.clock_gettime(Process::CLOCK_MONOTONIC) < deadline
count += 1
'hello'.upcase
end
puts "Iterations in 0.2s: #{count}"Mengendalikan GC
Pengumpul sampah dapat mengubah hasil. Anda dapat menonaktifkannya sementara untuk memperoleh angka yang lebih stabil.
GC.disablesebelumnya,GC.enablesesudahnya- Gunakan dengan hati-hati agar memori tidak terus bertambah
require 'benchmark'
GC.disable
t = Benchmark.realtime { 100_000.times { |i| i.to_s } }
GC.enable
puts "Without GC: #{t.round(4)}s"Merata-ratakan Beberapa Eksekusi
Jalankan tolok ukur beberapa kali lalu hitung rata-ratanya untuk menghaluskan variasi.
- Jika perlu, buang pencilan yang paling lambat
- Laporkan median untuk kestabilan
require 'benchmark'
times = 3.times.map do
Benchmark.realtime { (1..50_000).map { |n| n * n } }
end
avg = times.sum / times.size
puts "Average: #{avg.round(4)}s"Pemeriksaan Singkat
Uji pengetahuan Anda tentang pengukuran kinerja.
Ringkasan
Anda telah mempelajari cara mengukur kinerja:
- Modul
Benchmarkmengukur waktu kode secara akurat realtime,measure,bm, danbmbmmelayani kebutuhan yang berbeda- Gunakan jam monotonik untuk pengukuran waktu yang tepat
- Hindari tolok ukur mikro yang menyesatkan dan perhitungkan GC
- Rata-ratakan beberapa eksekusi untuk mengurangi gangguan acak
Selanjutnya Anda akan menggunakan alat pembuatan profil khusus.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengukur Performa” gratis?
Ya — teks lengkap “Mengukur Performa” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Ruby Academy, upgrade ke CoddyKit PRO. Kursus Ruby Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mengukur Performa”?
Modul Benchmark. Kamu berlatih Ruby Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Ruby Academy?
Tidak diperlukan pengalaman sebelumnya. Ruby Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Mengukur Performa” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Ruby Academy ini?
Ya. Setiap pelajaran Ruby Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengukur Performa
- Alat Pembuatan Profil
- Optimasi Memori
- Bottleneck Umum