• 02-08-2009, 13:34:39
    #1
    Merhaba,

    Fonksiyonlara daha yeni giriş yapıyorum ve küçük denemelerle başladım. Aşağıdaki fonksiyon farklı dosyalar içinde çalışıyor. Mesela yeni eklenenler, sizin için seçtiklerimi ve popular oyun dosyaları içinde bu fonksiyonu çalıştırıyorum.

    Fonksiyon aşağıda:

    function module($type,$limit){
    global $baseurl;
    if ($type=='p') {
    $order='hit'; }
    elseif ($type=='f') {
    $order='RAND()'; 
    $where2="AND featured='1'"; }
    elseif ($type=='n') {
    $order='id'; }
    $sql="SELECT id, gameurl, name FROM  game WHERE status='1' $where2 order by $order DESC LIMIT 0,$limit";
    $query=mysql_query($sql);
    while($result=mysql_fetch_assoc($query)) { 
    $url= $result['gameurl'];
    $name= $result['name'];
    echo '<li><a href="'.$baseurl.'/'.$url.'.html" title="'.$name.'"><img src="'.$baseurl.'/gamefiles/thumbnail/'.$url.'.jpg" />
    <span>'.$name.'</span></a></li>';
    }
    }
    Şimdi ben bu fonksiyonu yapmamış olsaydım üç ayrı dosya içinde sadece sorgu ve while döngüsünün olduğu kısımları kullanıcaktım. Fakat şimdi bu fonksiyonda if ile kontrol ettiğim bölümler ekledim ve üç dosyayada bu şekilde çağrılıyor.

    Bu performansta nasıl etki eder yani fonksiyon kullanmayıp üç ayrı dosyaya sadece sorgu ve while döngüsünün olduğu bölümlerimi yazsam daha iyi olur yoksa bu şekilde fonksiyon olarakmı kullansam ?

    Mesela popular dosyasında daha önce aşağıdaki gibi bilgileri veritabanından çekiyordum:

       <?php
    $popularsql= mysql_query("SELECT id, gameurl, name FROM  game WHERE status='1' order by hit DESC LIMIT 0,18");
    while($popular = mysql_fetch_assoc($popularsql)) { 
    ?>
    <li><a href="<?php echo $baseurl; ?>/<?php echo $popular['gameurl']; ?>.html" title="<?php echo $popular['name']; ?>"><img src="<?php echo $baseurl; ?>/gamefiles/thumbnail/<?php echo $popular['gameurl']; ?>.jpg" />
    <span><?php echo $popular['name']; ?></span></a></li>
    <?php } ?>
    Fakat bu fonksiyonu oluşturduktan sonra aşağıdaki gibi kullanıyorum:

    <?php module('p','18'); ?>
    Fonksiyonuda inceleyip eksik yanları varsa yada mantık hatası yaptığım yerler varsa açıkalrsanız sevinirim.

    Kolay gelsin
  • 03-08-2009, 01:54:50
    #2
    Bir if döngüsü kontrolü ile o kadar performans düşüsü olmaz açıkcası. Ama bana göre module('p','18') olarak çağıracağına birden fazla fonksiyon yap ve

    hitmodule('18'), randmodule('18') gibi çağır.Pek fark etmeyecek performans açısında dediğim gibi ama tekrar baktığında şu fonksiyona ne yolluyorduk şunu yapmak için diye düşünüp açık fonksiyona bakacaksın. Fonksiyona hatırlayacağın bir isim koyman yarın tekrar baktığında daha rahat hatırlamanı sağlar.
  • 03-08-2009, 05:59:38
    #3
    function zaman($z) {
    list($kullanim,$san)=explode(" ",$z);
    return ((float)$kullanim+(float)$san);
    }
    $basla=microtime();
    // kodlarını buraya koy
    $bitis=microtime();
    $z2=(zaman($bitis)-zaman($basla));
    echo $z2;
    echo $z2; burdaki sonuçta hangisinin değeri düşükse onun performansı daha iyidir
  • 03-08-2009, 16:20:41
    #4
    Denedim ve tek fonksiyonla yani bir fonksiyonu uc dosya icin kullandigimda daha dusuk deger donduruyor ama her dosya icin ayri fonksiyon yaptigimda daha yuksek deger donduruyor.

    Mesela her dosyaya ayri fonksiyon tanimladigimda if kontrolleri yok temiz sql sorgusu ve while dongusu var yani diger koda gore daha temiz ve basit fakat diger fonksiyonda yani tum dosyalar icin tanimladigim o tek fonksiyon daha dusuk deger veriyor.

    Bu normalmi bence mantik olarak dosyanin sadece kendisine tanimlanmis temiz if kontrolu olmayan fonksiyon daha iyi deger vermeliydi.

    Zaten bu fonksiyonunda ne kadar dogru oldugunuda bilemiyorum fonksiyonlara yeni gecis yaptigim icin.
  • 03-08-2009, 20:58:37
    #5
    Üyeliği durduruldu
    switch kullan bence
  • 04-08-2009, 00:16:19
    #6
    Netboard adlı üyeden alıntı: mesajı görüntüle
    Denedim ve tek fonksiyonla yani bir fonksiyonu uc dosya icin kullandigimda daha dusuk deger donduruyor ama her dosya icin ayri fonksiyon yaptigimda daha yuksek deger donduruyor.
    Mesela her dosyaya ayri fonksiyon tanimladigimda if kontrolleri yok temiz sql sorgusu ve while dongusu var yani diger koda gore daha temiz ve basit fakat diger fonksiyonda yani tum dosyalar icin tanimladigim o tek fonksiyon daha dusuk deger veriyor.
    Bu normalmi bence mantik olarak dosyanin sadece kendisine tanimlanmis temiz if kontrolu olmayan fonksiyon daha iyi deger vermeliydi.
    Zaten bu fonksiyonunda ne kadar dogru oldugunuda bilemiyorum fonksiyonlara yeni gecis yaptigim icin.
    Sql yapılandırmanı bilmiyorum ama sql yapılandırmalarında bazı değişikliklerle performans artışı sağlayabilirsin mesela status'u ENUM yaparak char boyutlarını kısaltarak sık sorgu yapılan kolonlara index vererek vb.

    Diğer fonksiyon kısmı içinse sadece lazım olan fonksiyonları include ederek performans artışı sağlamak mümkün ancak burda yaptığın performans denemeleri 1-50K hit sahip bir site için pek farketmeyecektir.Daha fazla hit olduğu durumlarda da sql olan makineyi ayırman gerekir.bence böyle şeylere pek takma.dediklerimin doğrusunu ise zamanla deneme yanılma yöntemleriyle zaten bulursun
  • 04-08-2009, 02:39:43
    #7
    Netboard adlı üyeden alıntı: mesajı görüntüle
    Denedim ve tek fonksiyonla yani bir fonksiyonu uc dosya icin kullandigimda daha dusuk deger donduruyor ama her dosya icin ayri fonksiyon yaptigimda daha yuksek deger donduruyor.
    Mesela her dosyaya ayri fonksiyon tanimladigimda if kontrolleri yok temiz sql sorgusu ve while dongusu var yani diger koda gore daha temiz ve basit fakat diger fonksiyonda yani tum dosyalar icin tanimladigim o tek fonksiyon daha dusuk deger veriyor.
    Bu normalmi bence mantik olarak dosyanin sadece kendisine tanimlanmis temiz if kontrolu olmayan fonksiyon daha iyi deger vermeliydi.
    Zaten bu fonksiyonunda ne kadar dogru oldugunuda bilemiyorum fonksiyonlara yeni gecis yaptigim icin.
    Açıkcası neden bu şekilde bir sonuç aldığını anlamadım. if kontrolü olmadığında daha hızlı sonuç döndermesi gerekiyor. Acaba önce if kontrolü olmayan fonksiyonu sonra if kontrollü fonksiyonu mu çağırdınız?
  • 04-08-2009, 03:05:07
    #8
    Yok hayır dediğim gibi 4-5 kere deneme yaptım sonuç aynı. Bu yüzden bende şaşırdım. Sanırım ayrı ayrı yapıcam fonksiyonları mantıklı olarak ayrı olunca direk hedef veriyi çekecek yani önce if kontrolünden geçirmeyecek buda daha iyi sonuç verir.

    Birde fonksiyonlar konusunda bildiğiniz makaleler varsa adreslerini alabilirmiyim. Google dan aratıyorum hep aynı makaleler geliyor fonksiyon nedir gibi.

    Benim istediğim fonksiyon yazarken dikkat edilmesi gereken noktalar ve izlenmesi gerekn yollar gibi açıklayıcı öğretici makaleler. Türkçe yada İngilizce farketmez.

    Teşekkürler.
  • 04-08-2009, 10:35:37
    #9
    Açıkcası fonksiyonlar ile ilgili birçok makale vardır. Fonksiyon nedir yerine, PHP fonksiyon örnekleri yazarsanız veya ingilizceniz var ise PHP function example yazarsanız birçok uygulama görebilirsiniz.
    Örneğin; PHP Functions