<<= Önceki Sayfa
PHP Ana Sayfa
Sonraki Sayfa =>>
 

PHP ve Benchmarking Testleri
PHP ve Benchmarking Testleri (Islemin bitirilme suresi ve analizi)


PHP icerisinde,dizi elementleri'nin oge-oge yazdirilmasi icin iki teknik kullanilir:


  • while dongusu icinde each () fonksiyonu ile


  • foreach yapisi veya dongusu (Yanlizca PHP4 icin)


    Bu fikirden hareketle hangi yapinin daha hizli calistigini acaba bulabilirmiyiz? PHP programlama dili ile kendimiz bu testi gerceklestirebilirmiyiz?


    Cevap EVET...


    NOT:Bu makale ornek olmasi amaciyla yazilmistir.Buradan ogreneceginiz dusunce yapisi ile siz de musterilerinize kendi benchmarking(karsilastirma) testlerinizi hazirlayabilirsiniz.


    Simdi once bu iki yapiyi tekrar hatirlatarak yazimiza baslayalim:


  • while dongusu ile dizimizin ogelerini yazdiralim.


    <?php
    while (list ($anahtar, $deger) = each ($dizi) {
    //..$anahtar ve $deger degiskenlerini dongu icerisinde istediginiz gibi kullanin.Bu degiskenler icinde dizinin
    //her bir elemani icin sirasiyla anahtar(index) ve tasidigi deger saklanacaktir...


    }
    ?>


  • foreach ile dizinin her bir elemanini islemek :


    <?php
    foreach ($dizi as $anahtar => $deger) {
    //..$anahtar ve $deger degiskenlerini dongu icerisinde istediginiz gibi kullanin.Bu degiskenler icinde dizinin
    //her bir elemani icin anahtar ve tasidigi deger saklanacaktir...
    }


    ?>


    Karsilastirma Testleri :


    <?php


    function microzamani_hesapla ()


    {


    $m_zaman = microtime();
    $m_zaman = explode (" ",$m_zaman);
    $m_zaman = doubleval ($m_zaman[1]) + doubleval ($m_zaman[0]);
    return ($m_zaman);
    }


    for ($i = 0, $j = 1500; $i <1500; $i++,$j--) {


    $dizi[$j] = $i;
    }


    $zaman1 = microzamani_hesapla ();


    while (list ($anahtar, $deger) = each ($dizi)) {


    $t = $anahtar;
    $z = $deger;


    }


    $zaman2 = microzamani_hesapla ();


    $toplam = abs ($zaman2 - $zaman1);
    print "while dongusunun tamamlanmasi icin gecen sure : $toplam n<BR>";


    //Hafizayi temizleyelim ve dizimizin elemanlarini birde foreach ile dizinin her bir elemanini isleyelim...


    unset ($zaman1, $zaman2, $toplam, $t, $z, $anahtar, $deger);


    $zaman1 = microzamani_hesapla ();


    foreach ($dizi as $anahtar => $deger) {


    $t = $anahtar;
    $z = $deger;
    }


    $zaman2 = microzamani_hesapla ();


    $toplam = abs ($zaman2 - $zaman1);


    print "foreach dongusunun tamamlanmasi icin gecen sure : $toplam n<BR>";


    ?>


    Ek bilgi
    abs : Mutlak degerini almak icin kullanilan php nin hazir fonksiyonu.Daha fazla bilgi icin matematik manual linkine tiklayiniz...


    Bakalim hangisi daha hizli calisacak :)




    Konu disi aciklama ve ek bilgi :


    while dongusu ile bir dizi icerisindeki elementleri birer birer islemeyi bilmediginizi dusunerek bir ornek vermeyi uygun buldum.Bu ornegimizde size cok basit olarak bir dizinin elemanlarinin bu donguye sokularak ekrana (anahtar => deger) ciftleri seklinde nasil yazdirilacagini gosterecem:


    Bunun icin PHP'nin $GLOBALS dizisini kullanalim.Hem de anlatimda sadelik yakalamis oluruz.Kendimizde bir dizi yaratbilir ve onu kullanabilirdik ama gerek yok zaten boyle hazir bir dizi elimizin altinda :)


    Bu dizi($GLOBALS) PHP tarafindan otomatik olarak yaratilan ve programlar icin hali hazirda bekleyen cevre degiskenlerinin icinde tutuldugu dizidir.


    PHP'nin uzerinde calistigi isletim sisteminin tipi,surumu gibi cevresel degerleri PHP bu dizide saklar.Programci bunlara erismek istediginde:


    $GLOBALS[] ve koseli parentezlerin arasina istenilen index degerini yazmasi yeterlidir.


    Ornek olarak o anda siteye baglanan kullanicinin IP'si programlarinizda kullanilmak uzere :


    $IP_Adresi = $GLOBALS[REMOTE_ADDR];


    seklinde $GLOBALS dizisinin REMOTE_ADDR ile indexlenmis elementi kullanilarak elde edilebilir.



    Simdi bu diziyi while dongusu ile kullanip icerigini ekranda gorunteleyelim:


    <?php
    reset($GLOBALS);
    while (list($anahtar, $deger) = each($GLOBALS)) {
    print "$anahtar => $deger \n<BR>\n";
    }
    ?>


    Ornek Dosya


    http://www.turk-php.com/ornekler/globals.php
    http://www.turk-php.com/ornekler/globals.phps



    Saglicakla kalin,


    Serkan Hadi Ceylani
    serkan@turk-php.com





  • <<= Önceki Sayfa
    PHP Ana Sayfa
    Sonraki Sayfa =>>