0Pricing
Ruby Academy · Lektion

Performance messen

Benchmark-Modul

Performance messen ist eine kostenlose Ruby Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Ruby Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Ruby Academy-Kurs umfasst insgesamt 4 Lektionen.

Warum messen?

Ohne Messungen zu optimieren bedeutet, zu raten. Das Benchmark-Modul aus Rubys Standardbibliothek misst Code präzise.

  • Finden Sie langsame Stellen, bevor Sie sie verändern
  • Vergleichen Sie Implementierungen objektiv
  • Vermeiden Sie verfrühte Optimierungen
require 'benchmark'

time = Benchmark.realtime do
  1_000_000.times { |i| i * 2 }
end
puts "Took #{time.round(4)}s"

Benchmark.measure

Benchmark.measure gibt einen Bericht über Benutzer-, System- und Echtzeit zurück.

  • Die Benutzerzeit ist die CPU-Zeit Ihres Codes
  • Die Echtzeit ist die tatsächlich verstrichene Zeit
require 'benchmark'

result = Benchmark.measure do
  500_000.times { |i| i.to_s }
end
puts result

Benchmark.bm

Benchmark.bm führt mehrere Blöcke aus und beschriftet sie in einer Tabelle.

  • Übergeben Sie eine Breite für die Beschriftungen, um sie auszurichten
  • Jeder Aufruf von x.report ergibt eine Zeile
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 } }
end

Benchmark.bmbm

Benchmark.bmbm führt zuerst einen Probelauf durch, um Caches und die GC aufzuwärmen und fairere Werte zu erhalten.

  • Der erste Durchlauf wird verworfen
  • Der zweite Durchlauf ist die eigentliche Messung
require 'benchmark'

Benchmark.bmbm do |x|
  x.report('sum:') { (1..100_000).sum }
  x.report('reduce:') { (1..100_000).reduce(:+) }
end

realtime für schnelle Zeitmessungen

Benchmark.realtime gibt nur die Sekunden der verstrichenen Echtzeit als Float zurück.

  • Die einfachste Möglichkeit, einen einzelnen Block zu messen
  • Gut für schnelle, ungeplante Prüfungen
require 'benchmark'

elapsed = Benchmark.realtime do
  arr = Array.new(100_000) { rand }
  arr.sort
end
puts "Sorted in #{elapsed.round(4)}s"

Monotone Uhr

Verwenden Sie für präzise Messungen, die nicht von Änderungen der Systemuhr beeinflusst werden, Process.clock_gettime mit einer monotonen Uhr.

  • Unempfindlich gegenüber NTP-Anpassungen
  • Die genaueste integrierte Option
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"

Zwei Ansätze vergleichen

Benchmarks sind besonders nützlich, wenn Sie Alternativen vergleichen. Führen Sie beide unter identischer Last aus.

  • Die Eingabegröße muss groß genug sein, damit die Messung aussagekräftig ist
  • Wiederholen Sie die Messung, um Schwankungen zu verringern
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 } }
end

Vorsicht bei Mikrobenchmarks

Kleine Benchmarks können irreführend sein.

  • JIT und Caches spiegeln reale Workloads möglicherweise nicht wider
  • Die GC kann während der Messung ausgeführt werden
  • Messen Sie realistische Datengrößen
require 'benchmark'

# Too small to be meaningful
t = Benchmark.realtime { 10.times { |i| i + 1 } }
puts "Misleadingly tiny: #{t}s"

Iterationen pro Sekunde

Oft benötigen Sie den Durchsatz: die Anzahl der Operationen pro Sekunde. Das Gem benchmark-ips gibt diesen Wert aus, Sie können ihn aber auch manuell annähern.

  • Zählen Sie die Iterationen in einem festgelegten Zeitfenster
  • Eine höhere ips bedeutet eine höhere Geschwindigkeit
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}"

Die GC steuern

Der Garbage Collector kann Ergebnisse verzerren. Sie können ihn vorübergehend deaktivieren, um gleichmäßigere Werte zu erhalten.

  • GC.disable vorher und GC.enable danach
  • Verwenden Sie dies mit Bedacht, um ein übermäßiges Speicherwachstum zu vermeiden
require 'benchmark'

GC.disable
t = Benchmark.realtime { 100_000.times { |i| i.to_s } }
GC.enable
puts "Without GC: #{t.round(4)}s"

Mehrere Durchläufe mitteln

Führen Sie einen Benchmark mehrmals aus und mitteln Sie die Ergebnisse, um Schwankungen auszugleichen.

  • Verwerfen Sie bei Bedarf den langsamsten Ausreißer
  • Geben Sie den Median an, um stabile Werte zu erhalten
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"

Schnelltest

Testen Sie Ihr Wissen über Benchmarks.

Zusammenfassung

Sie haben gelernt, die Performance zu messen:

  • Das Benchmark-Modul misst Code präzise
  • realtime, measure, bm und bmbm dienen unterschiedlichen Zwecken
  • Verwenden Sie für präzise Messungen die monotone Uhr
  • Vermeiden Sie irreführende Mikrobenchmarks und berücksichtigen Sie die GC
  • Mitteln Sie mehrere Durchläufe, um Schwankungen zu verringern

Als Nächstes verwenden Sie spezielle Profiling-Tools.

Häufig gestellte Fragen

Ist die Lektion „Performance messen“ kostenlos?

Ja — der vollständige Text von „Performance messen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Ruby Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Ruby Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Performance messen“?

Benchmark-Modul Du übst Ruby Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Ruby Academy zu starten?

Keine Vorkenntnisse erforderlich. Ruby Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Performance messen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Ruby Academy-Lektion Code schreiben und ausführen?

Ja. Jede Ruby Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Performance messen
  2. Profiling-Tools
  3. Speicheroptimierung
  4. Häufige Bottlenecks
← Zurück zu Ruby Academy