CodeBlanks Logo Icon CodeBlanks

Benchmarking

PHP kursu · Uzman · Ders 25/54

microtime() ile kod parçalarını kıyaslayan benchmark yazmayı öğrenirsin.

microtime(true) ile benchmark

microtime(true) o anki zamanı saniye cinsinden ondalıklı sayı olarak döner. Bir kod parçasının süresini ölçmek için öncesi ve sonrasında çağırıp farkını alırsınız: $start = microtime(true); … $end = microtime(true); $elapsed = $end - $start;.

Mikrosaniye hassasiyetinde olduğu için kısa kodları bile karşılaştırabilir. Sonuç makineye ve yüke bağlıdır, bu yüzden tek çalıştırma yerine birden fazla deneyi ortalamak güvenlidir. Ölçüm sonucunu olduğu gibi yazdırmak yerine, iki yaklaşımı aynı koşullarda deneyip sayım farkını karşılaştırmak deterministik yanıt verir.

echo, foreach ve str_replace seçimleri

Aynı işi yapan farklı yöntemlerin maliyeti de farklıdır. echo tek dize yazdırmak için printf'ten hızlıdır çünkü biçimlendirme adımı yoktur; ama değişkenleri birleştirip yazdırmada printf daha okunabilir.

foreach, for ile index kullanmaktan genelde daha hızlıdır çünkü dizi işaretçisini PHP içeriden taşır. array_map her öğe için fonksiyon çağırdığından döngüden yavaştır ama daha bildirgeseldir.

str_replace ve strtr aynı işi yapar: strtr tek geçişte tüm değişimleri uygular, str_replace ardışık uygulayabilir; kısa dizilerde strtr genelde daha hızlıdır. Bu farklar büyük verilerde belirginleşir.

Uygulama isset, array_search, str_replace ve strtr karşılaştır

$start = microtime(true) ile başlat. $data dizisinde 'kiraz' anahtarını isset ile ara, $found_isset'e ata. 3 değerini array_search ile strict modda ara, $key'e ata. 'abab' içinde a→X, b→Y dönüşümünü str_replace ile yap, $out1'e ata. Aynı dönüşümü strtr ile yap, $out2'ye ata. $end = microtime(true) ve $elapsed = $end - $start hesapla. printf ile $found_isset ? 1 : 0 yazdır. echo ile $key, $out1, $out2, count($data) yazdır.

Örnek çözümü göster
0); echo $key . "\n"; echo $out1 . "\n"; echo $out2 . "\n"; echo count($data) . "\n";.
Örnek çözüm:
<?php
$start = microtime(true);

$data = ['elma' => 1, 'armut' => 2, 'kiraz' => 3];
$found_isset = isset($data['kiraz']);
$key = array_search(3, $data, true);

$out1 = str_replace(['a', 'b'], ['X', 'Y'], 'abab');
$out2 = strtr('abab', ['a' => 'X', 'b' => 'Y']);

$end = microtime(true);
$elapsed = $end - $start;

printf("%d\n", $found_isset ? 1 : 0);
echo $key . "\n";
echo $out1 . "\n";
echo $out2 . "\n";
echo count($data) . "\n";

Kendini test et

  1. isset ve array_search'ü karşılaştır

    • array_search isset'ten daha hızlıdır
    • İkisi de aynı hızdadır
    • isset yalnızca sayısal dizilerde çalışır
    • isset O(1), array_search O(n) olduğundan isset hızlıdır
    Cevabı göster

    isset O(1), array_search O(n) olduğundan isset hızlıdır — Doğru. isset anahtar tablo araması yapar (O(1)), array_search linear tarar (O(n)).

  2. $start atamasını tamamla

    ____ = microtime(true);
    // kod buraya
    $end = microtime(true);
    Cevabı göster
    $start = microtime(true);
    // kod buraya
    $end = microtime(true);
  3. Benchmark yöntemlerini eşleştir

    microtime(true)
    Zaman ölçer
    isset
    O(1) dizi arama
    array_search
    O(n) dizi arama
    strtr
    Tek geçişte değiştir

Uzman bölümündeki tüm dersler