Giriş yap! Hesap oluştur!
Nedir?
Ara
Şifreni mi unuttun?
PHP performans taktikleri - Sözümoki
Kerem Dinç Altın Destekçi Altın Destekçi
08 Nisan 2013, Pazartesi 10:20 · 453 Okunma

PHP performans taktikleri

PHP Programlama ile ilgili her programcinin dikkat etmesi gereken performans kurallari :

( John Lim internet sitelerinden derlenmis ve cevrilmistir )

1. Bir metod statik ise onu statik olarak tanimlayiniz. Bu 4 kat daha performans saglar.

2. echo, print ten daha hizlidir. bkz ( http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40 )

3. echo nun parametrelerini kullanin ( string siralama gibi ).

4. For donguleriniz icin duracagi noktayi donguden once belirleyiniz. Dongunun icinden kontrol yaptirmak daha maliyetlidir.

5. Bosa cikan degiskenleri unset() ile hafizadan cikariniz. Ozellikle buyuk boyutlu degiskenler ve diziler hafizada ne kadar yer kaplarsa genel islemler o kadar yavaslar. Yazilimin kullanici sayisi arttikca sunucuda hafiza sorunlari olusabilir.

6. Nesne tabanli kod yazarken __get, __set, __autoload gibi fonksiyonlardan uzak durmaya calisin.

7. require_once() ve include_once() fonksiyonlari require() veya include() den cok daha maliyetlidir.

8. include yaparken tam dosya yolu verin. Eger vermezseniz genel pathlerin tamami taranacaktir dosyanin bulundugu yere kadar olan butun alt dizinler tek tek kontrol edilecektir.

9. Scriptinizin basinda zaman verisine ihtiyac duyuyorsaniz time()
yerine $_SERVER[’REQUEST_TIME’] kullanabilirsiniz.

10. regex yerine strncasecmp, strpbrk ve stripos kullanabilirsiniz.

11. str_replace, preg_replace den daha hizlidir ama strtr, str_replace den 4 kat daha hizlidir.

12. Eger bir fonksiyonunuz hem normal hem dizi degiskenleri parametre olarak aliyorsa
ve parametre listeniz cok uzun degilse, normal degiskenler icin ayri, dizi degiskenler icin ayri fonksiyon yazabilirsiniz

13. Cok sonuclu durumlar icin if-elseif-else yerine switch-case kullanmak daha hizlidir

14. @ karakteri ile hata korleme scriptinizi yavaslatir.

15. Apache’nin mod_deflate modulunu aktiflestirin

16. Veritabani ile isiniz bittiginde baglantiyi kesin. ( mysql_close() )

17. $row[’id’] seklindeki kullanim $row[id] den 7 kat daha hizlidir

18. Hata mesajlari scriptinizi yavaslatir.

19. for dongusunun parametre bolumunde fonksiyon kullanmayin. Ornek :

for ($x=0; $x < count($array); $x)

Buradaki count() fonksiyonu her adimda tekrar calistirilir

20. Artirma yaparken fonksiyonlar icindeki lokal degiskenleri artirmak en hizlisidir. Ayni sekilde fonksiyonlarin icinde lokal degiskenleri kullanmak genel degiskenleri kullanmaktan daha hizlidir.

21. Global bir degiskeni artirmak (++) lokal bir degiskeni artirmaktan 2 kat yavastir.

22. Bir nesnenin degerini artirmak (ornek: $this->deger++) lokal degiskeni artirmaktan 3 kat daha yavastir.

23. Tanimlanmamis bir degiskeni artirmak, onceden tanimlanmis degiskeni artirmaktan 9-10 kat daha yavastir.

24. Bir global degisken tanimlayip onu kullanmazsaniz bu scriptinizi yavaslatir. PHP her artirmada o degiskenin global olup olmadigina bakar.

25. Metot cagirmak bir sinifta tanimlanmis metotlardan bagimsizdir. Test metodundan once, 10 tane daha metod ekleyip test etmemize ragmen performans degismedi.
26. Turetilmis siniflarin icindeki fonksiyonlar asil sinifin fonksiyonlarindan daha hizlidir.

27. 1 parametreli ve icerigi bos olan bir fonksiyon lokal bir degiskenin 7-8 kere artirilmasina esit guc tuketir.A function call with one parameter and an empty function body takes about the same time as doing 7-8 $localvar++ operations. A similar method call is of course about 15 $localvar++ operations.

28. Degiskenlerde cift tirnak (") yerine tek tirnak (') kullanmak daha performanslidir. Cunku PHP cift tirnakli degiskenlerin icinde baska degisken olup olmadigina bakar. Ornek : echo "..." yerine echo '...' kullanmak daha hizlidir. Ama eger tirnaklarin icinde degisken olacaksa (Ornek: echo "Yasiniz $yas oldugu icin...";) yine mecburen ciftli tirnak kullanmak zorundasiniz...

29. echo ile birden fazla degiskeni ekrana yazdirirken birlestirmek icin nokta (.) yerine virgul (,) kullanmak daha hizlidir. $a="A"; $b="b"; $c="c"; echo $a.$b.$c; yerine echo $a,$b,$c; Not: Bu yontem sadece echo ile calisir.

30. Apache php sctiptini ziyaretciye HTML den 2-10 kat arasinda daha yavas ulastirir. Bu yuzden gerekmeyen yerlerde PHP ( ve benzeri ) scriptleri kullanmamalisiniz.

31. PHP scriptleriniz her calismalarinda yeniden derlenirler. Bu da performans kaybina sebep olur. PHP opcode cache uygulamalari ( zend optimizer , apc, ioncube php accelerator, xcache, turck mmcache gibi ) scriptlerin 1 kere derlenmesini ve degismedikleri surece tekrar derlenmemelerini saglayarak %20 ile %100 arasinda performans artisi saglayabilir.

32. Olabildigince Cache yapmaya calisin. Memcached kullanin. Memcached, yuksek performansli nesne tamponlama ( cache ) sistemidir. Dinamik web uygulamalarinda veritabani uzerindeki yuku azaltarak hiz ver performans artisi saglar. Daha genis bilgi icin

33. Stringlerle calisirken string boyutunu almak icin strlen() kullanirsiniz. Bu fonksiyon herhangi bir islem yapmadan, zaten zval (PHP icinde degiskenleri tutmak icin kullanilan bir C dili yapisi) yapisinda bilinmekte olan bir degeri size gosterir. Yine de strlen() bir fonksiyondur ve bir cagri kullanir. Bu yuzden de yavastir. Bu asamada isset() fonksiyonunu kullanarak bir miktar hiz elde edilebilir. if (strlen($degisken) < 5) { echo “Degisken cok kisa”; } yerine if (!isset($degisken{5})) { echo “Degisken cok kisa”; }
isset() kullanmak, strlen() kullanmaktan daha hizlidir. Cunku isset() fonksiyonu icin strlen() fonksiyonunda yapilan bir cok islem yapilmaz.

34. Bir degiskenin degerini artirmak veya eksiltmek icin $i++ veya $i-- kullanmak ++$i veya --$i kullanmaktan daha yavastir. Bu sadece PHP ye ozgu birseydir. ++$i icin 4 opcode kullanilir, ancak $i++ sadece 3 opcode'a ihtiyac duyar.

35. Nesne Yonelimli Yazilim (OOP) hersey degildir. Cunku nesne yonelimli programlamada her fonksiyon icin hafizada bir yer ayrilir.

36. Her veyi yapisini sinif ( class ) olarak olusturmayin, diziler ( array ) ayni oranda kullanislidir.

37. Metodlari gereksiz yere bolmeyin. Tekrar kullanacaginiz kodlari belirleyip ona gore calisin.

38. Sadece ihtiyaciniz oldugunda metodlari ayirin.

39. Make use of the countless predefined functions

40. Eger kodunuzda cok fazla zaman ve islemci harcayan fonksiyonlari C ile extension olarak yazabilirsiniz. Ornek : template ve caching sistemi olarak kullanilan sistemlerden php_blitz bir php extensionu olarak calismaktadir. Bu yuzden php koduyla calisan smarty gibi sistemlere performans acisindan fark atmaktadir.

41. Kodunuzu tanimlayin. Yani neresinde ne kadar zaman ve islemci harcandigini tespit edin. Bunun icin Xdebug gibi bir eklenti kullanabilirsiniz. Bu sayede kodunuzun nerelerde yavasladigini tespit edebilirsiniz.

42. mod_gzip kullanin. mod_gzip, html ciktiyi zipleyerek sIkIstIrIr ve kullaniciya gidecek veri miktarini %80 e kadar dusurerek hizda artis, trafikte azalma saglar.

  • Kerem Dinç
    Kerem Dinç Altın Destekçi Altın Destekçi 1- print yerine echo kullanalım
    2- dizi elemanlarını $isim[1] yerine $isim['1'] şeklinde çağıralım
    3- programın hata mesajı vermesini önleyelim (error_reporting(0); kullanılabilir)
    4- @ karakteri ile hata durdurmaktan kaçınalım
    5- kod kısaltmalarını kullanalım ($sayi+=5; gibi)
    6- eğer gerekli değilse çift tırnak yerine tek tırnak kullanalım
    7- if/else koşulu yerine swich/case kullanalım
    8- gereksiz değişken tanımlamayalım ve kopyalamayalım
    9- dosyaları sunucuya sıkıştırarak yüklemeyi tercih edelim
    10- veritabanına sürekli bağlanmamaya ve UPDATE kullanmamaya çalışalım
    11- veritabanından bir kerede verileri almaya veya eklemeye çalışalım
    12- veritabanı ile işlem bitince bağlantıyı kapatalım
    13- veritabanı kodlarını döngü içerisinde kullanmayalım
    14- büyük boyutlu değişkenleri unset() ile hafızadan çıkaralım
    15- time() fonksiyonu yerine $_SERVER[’REQUEST_TIME’] kullanalım
    16- str_replace yerine preg_replace kullanalım
    17- require_once() ve include_once() fonksiyonlari yerine require() ve include() kullanalım
    18- gerekli değilse global değişken yerine local değişken kullanalım
    19- gerekmeyen yerde php kodundan kaçınım html kullanalım
    20- kodlarımızı sürekli tekrarlamak yerine fonksiyon kullanalım
    21- sürekli değişken tanımlamak yerine dizileri etkin şekilde kullanmaya çalışalım
    22- nesne tabanlı programlamayı öğrenip kullanalım
    23- sabit metodlarımızı statik metod olarak tanımlayalım
    24- uygulamalarımızı hafızada saklayan cache uygulamaları kullanalım (xcache, memcached gibi)
    25 html çıktıyı zipli olarak kullanıcıya gönderen mod_gzip kullanmaya çalışalım
    23 Mayıs 2013, Perşembe 00:03
  • Kerem Dinç
    Kerem Dinç Altın Destekçi Altın Destekçi Burada biraz bilgi var ama daha anlaşılabilir birini bulursan daha güzel olur;

    http://www.beycan.net/635/php-cache-hazirlama-sitenizin-performansini-arttirin.html
    23 Mayıs 2013, Perşembe 00:18
  • Kerem Dinç
    Kerem Dinç Altın Destekçi Altın Destekçi array yerine assoc kullan
    23 Mayıs 2013, Perşembe 11:41
  • Kerem Dinç
    Kerem Dinç Altın Destekçi Altın Destekçi Eğer proje gerçekten büyükse ,
    Zend , Php Optimization, Php Cache , MemCache konularını biraz araştırmanızı öneririm.
    Php interpreted bir dildir , compile edilmiyor , Zend vs compile edilmesini sağlıyor fakat biraz işin teknik tarafına kaçıyor .
    23 Mayıs 2013, Perşembe 13:32
Yazarın diğer paylaşımları;
Sözümoki Mutlaka Bilinmesi Gerekenler
Meslektaşlarına bir nasihatte bulunacak olsan bu ne olurdu ve mesleğin?
X

Daha iyi hizmet verebilmek için sistem içerisinde çerezler (cookies) kullanmaktayız. "Çerez Politikamız" sayfasından daha detaylı bilgilere erişebilirsin.

Anladım, daha iyisini yapmaya devam edin.