|
|||||||
| 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 |
![]() |
|
|
Konu Araçları |
|
|
#1 (permalink) |
|
I'm REAL ?>
Katılma Tarihi: Şub 2006
Nereden: Bursa/es-es
Yaş: 23
Mesajlar: 1,780
|
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... |
|
|
|
|
|
#2 (permalink) |
|
I'm REAL ?>
Katılma Tarihi: Şub 2006
Nereden: Bursa/es-es
Yaş: 23
Mesajlar: 1,780
|
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.) |
|
|
|
![]() |
| Ş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 |