PHP Performans Tavsiyeleri
PHP web uzerinde kullanilan en populer dillerden birisidir. Bu yazida sizlere cok hizli ve sorunsuz yapabileceginiz bir kac degisiklikle PHP scriptlerinizin performansini duzeltebiliriz!
Not: PHP scriptinizin performansini hangi PHP versiyon kullandiginiz, calistigi web sunucu’nun hizi ve kodunuzun kompleks olmasi etkiler…
Website yaparken “Premature Optimization(Software optimization)” butun kotuluklerin koku oldugunu aklinizda bulundurun. Kodunuzu degistirmeden, kodun neden yavas oldugunu ogrenmelisiniz, Kodunuzun yavasligi veritabani yuzunden mi, Network ile iliskisi mi var bunlari once bulmaliyiz. Kodunuzda ki bottlenecks (en önemli sorunlar) bulmak icin PHP kodunuzu profillemeniz gerekir.
PHP versiyonunuzu yukseltin…
PHP-engine’yi gelistiren developer’lar yillar boyunca önemli performans duzenlemeri yaptilar, eger sizin sunucunuzdaki PHP versiyonu eskiyse optimize etmeden önce PHP versiyonunu yukseltin…
PHP 4′ten PHP 5.0.x’e geçis
PHP 5.0.x’ten PHP 5.1.x’e geçis
PHP 5.1′den PHP 5.2′ye gecis
Caching Kullanin
Memcache gibi caching modüllerden faydalanin veya Smarty gibi caching destekleyen template engine’lardan faydalanarak cachelenmis Veritabani sonuclari ve islenmis sayfalar websitenizin performansini artirir.
Output bufering kullanin
PHP ekrana veri yazmadan once o veriyi hafizada sakliyor, verileri depoladigi icin ziyaretciler “sonucu” gormek icin bekliyor.. Bu bekleyis ziyarteciler icin sorun oluyor ve bazen ziyaretci bile kaybedebiliyoruz Neyse ki sitenizin daha hizli oldugunu hissettiren, bazi degisiklikler yaparak bir nevi Performans saglamis olacaksiniz.
Output Buffering Control hakkinda bilgi
Hicbirsey yapmayan, setters ve getters yazmayin…
Kod guzelligi icin ise yarayan fakat performans icin ters dusen bir bolum bu.. Baslamadan once
ikisinden birini secmek zorundasiniz, Kod guzelligi mi Perfomans mi?
Yazimiz performans oldugu icin performans diyerek devam ediyoruz..
Setters ve getters ile calismak yerine direkt object properties’le calismak size hiz kazandiracaktir.
- Kod: Tümünü seç
Class Dog {
public $_name;
public function setName($name){
$this->_name = $name;
}
public function getName(){
return $this->_name;
}
}
$dog = new Dog();
$dog->setName('Nazli');</p>
echo $dog->getName();
Bu ornekteki gibi, yaparsaniz, kodun guzelligi hemen goze carpacaktir.. ancak performans acisindan dogru degil.
- Kod: Tümünü seç
Class Dog {
public $_name;
}
$dog = new Dog();
$dog->_name = 'Nazli';
echo $dog->_name;
Bu sekilde yaparsaniz hiz konusunda, amacina ulasmis olursunuz performans acisindan cunki Sonuclar belli
Gereksiz yere degisken kullanmayin!
Bazen Yeni PHP’ye baslayanlara bir degisken kullanmadan onu onceden tanimlasini soyleriz kod guzelligi icin.. Ama bu islem bellek tuketimini arttirir. Asagida ki ornekte kullanici textarea’ya 512 KB buyuklugunda yazi yazsaydi bu sunucu yaklasik 1MB bellek kullanmasina yol acar.
- Kod: Tümünü seç
$description = strip_tags($_POST['description']);
echo $description;
Yukaridaki ornekte gordugunuz gibi degiskene atamak icin hicbir neden yok, ayni islemi 1 satirda halledebiliriz ve bu sayede fazla bellek kullanmamis oluruz.
- Kod: Tümünü seç
echo strip_tags($_POST['description']);
SQL Sorgularini dongulerin icinde calistirmayin!
Dongulerin icinde yapilan sorgu genellikle yapilan bir hatadir. Bu hata sonucunda veritabani yavaslar ve bunun yuzunden scriptiniz yavaslar. Asagida gordugunuz örnekte ki gibi her dondugunde sorguyu calistiriyor.
- Kod: Tümünü seç
foreach($userList as $user){
$query = 'INSERT INTO users (first_name, last_name) VALUES("'.$user['first_name'].'", "'.$user['last_name'].'")';
mysql_query($query);
}
Sorgu sonuc:
- Kod: Tümünü seç
INSERT INTO users (first_name, last_name) VALUES("John", "Doe");
Bir dongu kullanmak yerine, verileri 1 sorguda birlestirip 1 kerede yollayabilirsiniz veritabanina..
- Kod: Tümünü seç
$userData = array();
foreach($userList as $user){
$userData[] = '("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
}
$query = 'INSERT INTO users (first_name, last_name) VALUES '.
implode(',', $userData);
mysql_query($query);
Sorgu sonucu:
- Kod: Tümünü seç
INSERT INTO users (first_name, last_name) VALUES("Serkan", "Yildiz"),("Mustafa","Iren");
Ornekte gordugunuz gibi verileri array’a aktarip sonra 1 sorguyla ekliyoruz veritabanina.
Bu ipuçlarini uygulayarak scriptinizin performansini artirabilirsiniz..
Serkan@phpTR.org
Kaynak: http://www.phptr.org







