MultiServis.Net //PHP El Kitabı

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

PHP ve Benchmarking Testleri Yazar: Serkan Tarih: 01/03/02

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 =>>