Geri Dön   Forum Ti > Programlama Dilleri ve İnternet > Web Geliştirme Dilleri
Üye Ol Üye Listesi Takvim Forumları Okundu İşaretle

Web Geliştirme Dilleri İnternet sitesi geliştirme için kullanılan araçlar ve programlama dilleri... ASP & ASP.NET & PHP & CSS & HTML & SQL & Java Script

Cevap
 
Konu Araçları
Eski 08.06.2007   #1 (permalink)
 
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
Eski 08.06.2007   #2 (permalink)
 
Katılma Tarihi: Şub 2006
Nereden: Bursa/es-es
Yaş: 23
Mesajlar: 1,780
Varsayılan

Problem : Belirli bir kod parcasi uzerinde benchmark islemi gerceklestirmek,ve kodunuzun ne kadar hizli calistigini gormek istiyorsunuz.


Cozum : microtime () fonksiyonu yardimiyla, islem icin gecen saniye ve milisaniyeleri hesaplayabilirsiniz.








<?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);
}




$zaman1 = microzamani_hesapla ();



for ($i=0; $i<99999; $i++) {



$ar[] = $i;


}


$zaman2 = microzamani_hesapla ();



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



print "<BR> For Dongusu: $fark saniye icinde tamamlandi.n";



$i = 0;
unset ($ar);



$zaman1 = microzamani_hesapla ();



while ($i<99999) {



$ar[] = $i;
$i++;


}
$zaman2 = microzamani_hesapla ();
$fark = abs ($zaman2-$zaman1);
print "<BR>While Dongusu : $fark saniye icerisinde tamamlandi.n";
?>







http://www.turk-php.com/ornekler/bench_for_while.php



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



Tartisma : Yukaridaki ornekte ayni islemi gerceklestirmek icin for ve while donguleri kullanilmaktadir.Bu iki islem icin gecen sureler hesaplanmak ta ve karsilastirilmaktadir.



Bu cozum asagidaki sekilde kullanildiginda kendi programlarinizda belirli bir islem icin gecen sureyi kullanicilariniza gosterme firsatina sahip olacaksiniz:



<?php
$zaman1 = microzamani_hesapla ();



//Bundan sonraki kisimda istediginiz islevi yerine getiren kendi kodlariniz yer aliyor.



$zaman2 = microzamani_hesapla ();



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



Bu makalade kendi yazdigimiz microzamani_hesapla () fonksiyonunu kullandik.Bunun sebebi microtime () yapisal hazir fonksiyonu'nun sonucu saniye ve milisaniye olarak (aralarinda bir bosluk yer aliyor) string seklinde dondurmesi. Biz kendi yazdigimiz fonksiyonda bu ham veriyi bir "sayi" veritipine donusturduk hemde aralarindaki boslugu kaldirarak bu saniye ve milisaniye sayilarini birbiri ile toplayip tek bir deger elde ettik.



microtime () fonksiyonu saniye ve milisaniyeleri UNIX zamanini ( Daha cok bilinen adiyla "epoch saniyeleri" Ocak,1,1970 ten o ana kadar gecen saniyeleri saymaktadir.) kullanmaktadir.



Daha gelismis cozumler



Bu karsilastirma ve gecen zamani hesaplama islemleri ile cok fazla ilgileniyorsaniz PHP e-posta listesine gonderilen asagidaki sinifi inceleyip,ozgurce kullanabilirsiniz.(Yayinci kisinin kimligi bilinmiyor veya yazan kisi isimsiz kalmak istemis.)
staticiation Şuanda Forumda Değil   Alıntı yaparak cevapla
Cevap


Şu Anda Konuyu İnceleyen Aktif Kullanıcılar: 1 (0 üye ve 1 misafir)
 
Konu Araçları


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Geometri Konu Testleri eray553 Soru Bankası 5 14.09.2008 15:58
Matematik Konu Testleri eray553 Soru Bankası 1 08.04.2007 01:09


Şu anki forum saati: 22:37.


cnt hizmet sağlayan firma
ForumTi.com'un yapımı ve yayınlanması CNT'ye aittir.
Sitedeki içerikleri foruma ücretsiz şekilde üye olabilen ziyaretçiler oluşturur. Bu içeriklerin sorumluluğu yazana aittir.
Eğer yasak ve aykırı içerik tespit edilirse site yöneticilerine bu konular bildirilir ve kaldırılır. Site yönetimi haberdar edildiğinde sonuç alınamaz ise servis sağlayıcı CNT'ye bildiride bulunabilirsiniz.
vBulletin® v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd. Search Engine Friendly URLs by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265