Tek İleti Göster
Eski 08.06.2007   #1 (permalink)
staticiation
 
Katılma Tarihi: Şub 2006
Nereden: Bursa/es-es
Yaş: 23
Mesajlar: 1,780
Varsayılan 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


kaynak
Turk-PHP.com Türkiye'nin Bir Numaralı Programcılık Sitesi...
staticiation Şuanda Forumda Değil   Alıntı yaparak cevapla