• 19-07-2009, 22:18:59
    #1
    Üyeliği durduruldu
    hepinize hayırlı kandiller;
    Eger php hakkında ciddi düşünüyorsanız herhangi bir firmaya developer olarak çalışmak istiyorsanız yazım tam size göre çünkü hız herşeydir.. eskiden başıma gelen bir olaydan sonra bir gecemi bu arayış için harcadım..
    hiç bir yerden alıntı degildir tamamen kendi tecrübelerim.

    • echo print'den daha hızlıdır
    • döngülerin içinde sql sorgularınızı yapmayınız
    • veri çekerken verilerinizi kopyalamayın ($statement = $row["statement"])
    • basit ekrana yazdırmalar kullanacaksanız printf komutunu kullanınız çünkü echo ile herhangi bir şeyi yazdırdıgımız zaman php degişkene bakıyor sayısal mı yoksa normal text mi olarak printf ile siz sayısal olup olmadıgını belirtirseniz buda performans artışı gösterecektir
    • eger sunucu size aitse kullanmadıgınız eklentileri iptal ediniz.
    • ekrana yazdırmalarınızı tek tırnak olarak kullanın çünkü tek tırnak içinde echo komutu degişken aramaz çift tırnakta ise arar ve ona göre işlem yapar
    • ob_gzhandler kullanarak sayfalarınızı sıkıştırarak gönderin
    • gereksiz iflerden kaçının
    • strtr, str_replace den daha hızlıdır
    • array kullanımında $row[baslik] yerine $row["baslik"] kullanın çünkü 4 kat daha hızlıdır
    • php scriptleriniz her zaman yeniden derlenir buda sunucunuza +1 yük daha yükler zend optimizer , apc, ioncube php accelerator, xcache, turck mmcache bu cache yöntemlerinden birini kullarak gözle görülen bir fark yaratabilirsiniz
    • kullanabileceginiz her yerde memcached - Wikipedia, the free encyclopedia i kullanınız çünkü bu size çok büyük fayda saglayacaktır.
    • 1 kezlik kullanım için fonksiyon yazmayın
    • ekrana veri yazdırırken echo $degisken1.''.$degisken2.''.$degisken3; yerine echo $degisken1,$degisken2,$degisken3; daha hızlıdır
    • sayanın başlarında yaptıgınız ve sonradan kullanmıyacagınız sql sorgularını unset($sql); ile yok ediniz
    • sadece büyük projelerinizde oop kullanınız çünkü başlatılan her nesne hafızada tutulur buda gereksiz bir performans kaybına yol açar
    • hata vermelesini engelemek için @ kullanmayınız eger kullanmak istiyorsanız sayfa başına error_reporting(0); koyarak hataları ekrana çıktılamazsınız
    • for döngülerinde for($x=1; $x>count($toplam); $x++) kullanmak ciddi bir performans kaybettirir örnek vermek gerekirse bir siteye bot yazarken tekrarlanan verileri saymak istiyorsunuz vede for ile döndürmek istiyorsunuz eger bu tarz kullanırsanız for her döndügünde veriyi baştan sayar ve işlemine devam eder
    • veritabanı ile işiniz bittigi zaman mysql_close(); fonksiyonunu kullanın
    • bir dosyayı include ederken dosya yolunu düzgün belirtiniz çünkü php dosyayı bulamayınca diger pathlara bakma gerksinimide duyuyor
    • eger template sistemi kullanmıyorsanız html kodu ile php kodunu ayrın örnegin <img src=<?=$resimyolu;?> /> çünkü gönderilen php kodları derleniyor bunun içine html de girdigi zaman buda bir performans kaybına sebebiyet verir
    söyliyeceklerim bu kadar hayırlı kandiller türkiye her nerede yaşıyor vede yaşatılıyorsan
  • 19-07-2009, 22:24:33
    #2
    Üyeliği durduruldu
    saolasın gerçekten çok güzel bi döküman olmuş ellerine sağlık
  • 19-07-2009, 23:40:10
    #3
    Yazıda bazı kısımlar yanlış, ayrıca bana göre de eksik olmuş..

    Alıntı
    basit ekrana yazdırmalar kullanacaksanız printf komutunu kullanınız çünkü echo ile herhangi bir şeyi yazdırdıgımız zaman php degişkene bakıyor sayısal mı yoksa normal text mi olarak printf ile siz sayısal olup olmadıgını belirtirseniz buda performans artışı gösterecektir
    printf kullanmayınız, aslında echo ile aynı işi yapıyor görünse de echo kadar başarılı değil, mesela printf ile şunu yapamazsınız;

    $a = 1;
    $b = 2;
    printf $a,$b;
    syntax hatası alırsınız, ama echo ile yaabilirsiniz, print ve printf ile birden fazla değişkeni ekrana basamazsınız, yani özel durumlar dışında her zaman echo kullanınız. Ayrıca echo ile bişey yazdırdığımız zaman yordamcı değişkene falan bakmaz tırnağa bakar, eğer php kodları için tek tırnak kullanırsanız aşağıdaki gibi herşey ayrıştırılmış olduğu için çift tırnaktan daha hızlı ekrana basar,

    echo 'Bugün günlerden'.$gun.' dir';
    çift tırnakta ise yordamcı text ile php kodlarını ayrıştırmaya çalışacağı için tek tırnaktan daha yavaş çalışır, örneğin;

    echo "Bugün günlerden $gun dir";
    gibi..




    Alıntı
    veritabanı ile işiniz bittigi zaman mysql_close(); fonksiyonunu kullanın
    Bu konu hakkında yabancı sitelerde bir araştırma yaptım, hatta birçok profesyonel scripti inceledim, edindiğim bilgi şöyle;

    Sorgunun sonun da mysql_close() fonksiyonunu kullandığınızda başka sayfada işlem yapan biri için farklı bir bağlantı daha açılıyor, kullanmazsanız başka sayfa da işlem yapacak olan kullanıcı açık bağlantı üzerinden işlem yapıyor, bu tıpkı şuna benziyor, diyelimki firefox kullanıyorsunuz, aynı anda iki pencere açıp işlemci ve ram da daha fazla yer kaplıyorsunuz, oysa bir pencere açıp sekmeler içinde gezinirseniz çok daha az kaynak harcıyorsunuz, dediğim gibi çoğu profesyonel scripti inceledim, örneğin en basitinden açın vbulletin dosyalarını bakın, hangi sorgudan sonra mysql_close kullanılmış...


    Aslında arkadaşın yazdıklarında en önemli yer atlanmış, yukarıda anlatılanların çoğu php tabanlı iyileştirmeler, oysa en çok kaynak tüketen kısım ise sorgu kısımlarıdır, for ve arraya değinmiş ama en önemli kaynak tüketimi gereksiz sorgu yapılmasıdır, sorgular mümkünse tek sorguda yapılması lazımdır, örneğin kullanıcı adı için bir sorgu şifre yada e posta için diğer bir sorgu yapılmaması gerekir, sorgunun tümü bir kerede yapılmalıdır, kaynağın en çoğunu sorgu işlemleri tüketmektedir. Mysql hariç diğer kısımlar bana göre ikinci plandadır...
  • 19-07-2009, 23:41:27
    #4
    LoverzSoft adlı üyeden alıntı: mesajı görüntüle
    ekrana veri yazdırırken echo $degisken1.''.$degisken2.''.$degisken3; yerine echo $degisken1,$degisken2,$degisken3; daha hızlıdır
    Bunu daha önce de gördüm, ama katıldığım veya gördüğüm hiçbir kod yazım rehberinde bu şekilde kullanılmıyor. Acaba virgül kullanmak perfonmansı gerçekten arttırıyor mu, sırf güzellik olsun diye mi nokta kullanıyorlar. Bunun sağlamasını nasıl yaparız, miktotime ve for içindeki bir birleştirme işlemi olur mu?

    ---------------------------------

    LoverzSoft adlı üyeden alıntı: mesajı görüntüle
    for döngülerinde for($x=1; $x>count($toplam); $x++) kullanmak ciddi bir performans kaybettirir örnek vermek gerekirse bir siteye bot yazarken tekrarlanan verileri saymak istiyorsunuz vede for ile döndürmek istiyorsunuz eger bu tarz kullanırsanız for her döndügünde veriyi baştan sayar ve işlemine devam eder
    Bunu da hep yazarlar, ama madem bu performans kaybettiriyor, bir de yanında en performanslı biçim de yazılmalı. php.net e bakıyorum resmi örnekler de aynen öyle kullanılmış.

    Burada da yeni bir kavram doğuyor, hangi döngü türü en performanslı?

    Mesela ben genelde while kullanıyorum:

    $sayi = count($degisken);
    $i = 1
    while($i <= $sayi)
    {
        $i++;
    }
    Açıkçası kendi yapacağım testlere de güvenmiyorum, wmvare ile kurduğum linux üzerindeki apache bile windows XP dekiş apacheden daha hızlı çalışıyor gibi.

    ----------------------------------

    Bir diğer konu da printf ile ilgili, şu yazıda gerekmedikçe kullanmayın deniliyor.


    .
  • 19-07-2009, 23:51:57
    #5
    Alexis; O ilk alıntı yaptığın kısımdaki kodlar doğru çalışır ama yazım yanlıştır, yanlış demeyelimde acemice bir yazılıştır, ikinci alıntı yaptığın kısımda ise for döngüsünü zaten kodumuzda kullanmak zorunda isek mecburen kullanırız, ayrıca adın üstünde döngü, istediğimiz özelliklerde bir döngü yapıp nerede duracağını belirtiyoruz, ama siz 4 bytelik bir veriyi 1000 kere döngüye sokacaksanız bundan kaçınmak gerekir, bu da zaten break ve continue ile sağlanabiliyor.. Yani sonuçta for kullanmamız gerekiyorsa mecburen kullanıyoruz...
  • 20-07-2009, 00:43:11
    #6
    İlk kısımdaki kullanımın sintaksından bahsetmiyorum, örneğin şöyle yapayım:

    $deger = 5;
    
    echo 'Bu gün hava ' . $deger . ' derece<br />';
    echo 'Bu gün hava ', $deger, ' derece<br />';
    İki türlü kullanımda çalışıyor, zaten bunu performans yazılarında sıkça görürüz, ama katıldığım hiçbir proje nin yazım kılavuzunda böyle kullanım yok, daha sı, kurcaladğım hiçbir scriptte virgüllü kullanım görmedim, madem daha hızlı, sıkça kullandığımız birleştirme işlemlerinde sıkça kullanılması gerekirdi diye yorum yapıyorum.


    Döngüler olayı ise, bazen bir döngüyü birden farklı yöntemler ile yazabiliriz, örneğin while ve for benim için neredeyse aynı işlemi yapıyor, bu tür işlemlerde hangisi hızlı olur. foreach ın yavaş olduğunu söylüyorlar, çünkü dizinin bir kopyasını alıyormuş, ama neredeyse tüm örneklerde dizi işlemlerinde foreach kullanılıyor. Sanırım key ve değer almadaki basitliğinden dolayı.


    Bunların dışında bir de bilinmesi gereken ereg, ereg_replace, preg_replace, bunların da performansları bilinmeli.
  • 20-07-2009, 09:15:07
    #7
    Üyeliği durduruldu
    Enigmatic adlı üyeden alıntı: mesajı görüntüle
    Alexis; O ilk alıntı yaptığın kısımdaki kodlar doğru çalışır ama yazım yanlıştır, yanlış demeyelimde acemice bir yazılıştır, ikinci alıntı yaptığın kısımda ise for döngüsünü zaten kodumuzda kullanmak zorunda isek mecburen kullanırız, ayrıca adın üstünde döngü, istediğimiz özelliklerde bir döngü yapıp nerede duracağını belirtiyoruz, ama siz 4 bytelik bir veriyi 1000 kere döngüye sokacaksanız bundan kaçınmak gerekir, bu da zaten break ve continue ile sağlanabiliyor.. Yani sonuçta for kullanmamız gerekiyorsa mecburen kullanıyoruz...
    Enigmatic adlı üyeden alıntı: mesajı görüntüle
    Yazıda bazı kısımlar yanlış, ayrıca bana göre de eksik olmuş..



    printf kullanmayınız, aslında echo ile aynı işi yapıyor görünse de echo kadar başarılı değil, mesela printf ile şunu yapamazsınız;

    $a = 1;
    $b = 2;
    printf $a,$b;
    syntax hatası alırsınız, ama echo ile yaabilirsiniz, print ve printf ile birden fazla değişkeni ekrana basamazsınız, yani özel durumlar dışında her zaman echo kullanınız. Ayrıca echo ile bişey yazdırdığımız zaman yordamcı değişkene falan bakmaz tırnağa bakar, eğer php kodları için tek tırnak kullanırsanız aşağıdaki gibi herşey ayrıştırılmış olduğu için çift tırnaktan daha hızlı ekrana basar,

    echo 'Bugün günlerden'.$gun.' dir';
    çift tırnakta ise yordamcı text ile php kodlarını ayrıştırmaya çalışacağı için tek tırnaktan daha yavaş çalışır, örneğin;

    echo "Bugün günlerden $gun dir";
    gibi..






    Bu konu hakkında yabancı sitelerde bir araştırma yaptım, hatta birçok profesyonel scripti inceledim, edindiğim bilgi şöyle;

    Sorgunun sonun da mysql_close() fonksiyonunu kullandığınızda başka sayfada işlem yapan biri için farklı bir bağlantı daha açılıyor, kullanmazsanız başka sayfa da işlem yapacak olan kullanıcı açık bağlantı üzerinden işlem yapıyor, bu tıpkı şuna benziyor, diyelimki firefox kullanıyorsunuz, aynı anda iki pencere açıp işlemci ve ram da daha fazla yer kaplıyorsunuz, oysa bir pencere açıp sekmeler içinde gezinirseniz çok daha az kaynak harcıyorsunuz, dediğim gibi çoğu profesyonel scripti inceledim, örneğin en basitinden açın vbulletin dosyalarını bakın, hangi sorgudan sonra mysql_close kullanılmış...


    Aslında arkadaşın yazdıklarında en önemli yer atlanmış, yukarıda anlatılanların çoğu php tabanlı iyileştirmeler, oysa en çok kaynak tüketen kısım ise sorgu kısımlarıdır, for ve arraya değinmiş ama en önemli kaynak tüketimi gereksiz sorgu yapılmasıdır, sorgular mümkünse tek sorguda yapılması lazımdır, örneğin kullanıcı adı için bir sorgu şifre yada e posta için diğer bir sorgu yapılmaması gerekir, sorgunun tümü bir kerede yapılmalıdır, kaynağın en çoğunu sorgu işlemleri tüketmektedir. Mysql hariç diğer kısımlar bana göre ikinci plandadır...
    tek tırnak konusundaki düşüncelerinize katılmıyorum çünkü ; çift tırnak içinde php degişken ara bu sebebten daha yavaştır tek tırnak ta ise direk oku '.$degisken.' bu kısımlarda ise degişkene bakar.. mysql konusuna gelincede onun hakkında 2 3 şey yazdım mysql li yoracak en büyük şeyler gereksiz sorgulamalar vede çok sorgulu yerlerde kullanmaları için cache adresleri verdim..



    Alexis adlı üyeden alıntı: mesajı görüntüle
    İlk kısımdaki kullanımın sintaksından bahsetmiyorum, örneğin şöyle yapayım:

    $deger = 5;
    
    echo 'Bu gün hava ' . $deger . ' derece<br />';
    echo 'Bu gün hava ', $deger, ' derece<br />';
    İki türlü kullanımda çalışıyor, zaten bunu performans yazılarında sıkça görürüz, ama katıldığım hiçbir proje nin yazım kılavuzunda böyle kullanım yok, daha sı, kurcaladğım hiçbir scriptte virgüllü kullanım görmedim, madem daha hızlı, sıkça kullandığımız birleştirme işlemlerinde sıkça kullanılması gerekirdi diye yorum yapıyorum.


    Döngüler olayı ise, bazen bir döngüyü birden farklı yöntemler ile yazabiliriz, örneğin while ve for benim için neredeyse aynı işlemi yapıyor, bu tür işlemlerde hangisi hızlı olur. foreach ın yavaş olduğunu söylüyorlar, çünkü dizinin bir kopyasını alıyormuş, ama neredeyse tüm örneklerde dizi işlemlerinde foreach kullanılıyor. Sanırım key ve değer almadaki basitliğinden dolayı.


    Bunların dışında bir de bilinmesi gereken ereg, ereg_replace, preg_replace, bunların da performansları bilinmeli.

    benim gösterdigim örnekte o şekil degil örnegin 3 degişkeni bitişik yazdırcagınız zaman o kullanım daha avantajlıdır
  • 20-07-2009, 09:42:45
    #8
    Benimki ile sizinki arasında bence fark yok, sonuçta aynı kapıya çıkıyor; size yaklaşmak için şöyle yazabilirim o zaman:

    echo 'Bu gün hava ', $deger,$ondalik, $derece_turu, ' derece<br />';
    // 40.05 calvin
    localde test yaptım sonuçlar bana göre ilginç, mesela:

    // hızlı
    $i = 0;
    do {
    	// do nothing
    	$i++;
    }
    while ($i < 250000);
    
    // daha yavaş
    for ($i = 0; $i < 250000; $i++)
    {
        // do nothing
    }
    
    // en yavaş
    while ($i < 250000)
    {
    	// do nothing
    	$i++;
    }
    .
  • 20-07-2009, 10:11:50
    #9
    Üyeliği durduruldu
    evt bende test ettim bendeki sonuçlarda bir hayli ilginç

    do while:1.098
    for:1.391
    while:1.085


    bendeki sonuçlar böyle geldi döndürdügüm sonuç ise 10,000,000 artık while kullanmayı düşünüyorum 10,000,000 u 1,085 sn de döndürüyor mysql de buna katılırsa tahmini süre 4 sn sürüyor

    (tabi 10 milyon mysql sonucunu döndürdügüm zaman bilgisayar dayanırsa artık )