Merhaba arkadaşlar bu gece itibari ile (07.06.2010) yeni php kategorimi açmış bulunuyorum. Bugune kadar hep başı siteleriyle belada olan arkadaşlarımıza Optimizasyon tavsiye ettik.Siz de bu “optimizasyon yap(tır)malısın” lafını duymuşsunuzdur. Ama hiç kimseye optimizasyon konusuna nerden başlamalı ya da nasıl başmalı bilgilerini verdiğimi hatırlamıyorum. Optimizasyon önemli.! Bunu Yapın.! Bu yazımda PHP Optimizasyonuna giriş yapmakla beraber ilk tavsiyelerimi de yazmak istiyorum.
PHP ‘yi küçümsemeyin.!
Optimizasyon konusunda değinmek istediğim en önemli şey bu aslında. optimizasyon sadece aşırı tekrar ve ya yanlış seçimlerden kaçmaktır bana göre yani yazdığı şeyi daha doğru yazmaktır. optimizasyon kaynak kullanımında pintilik yapmak değildir. PHP düşündüğünüz kadar küçük bir dil değil. Yazarken korkmayın ( Optimizasyona ihtiyac duyulursa yapın phpnin yeteneklerinden yararlanmayı bilin.) Bana göre esneklikoptimizasyondan önce gelir. İkisi bir arada olmaz mı ? İşte bu kategoriyi açmamın sebebi buydu. Hem esnek hem stabil kod yazabilmek.
Kodunuzu satır satır profillendirin ,tanıtın.
Kodlarınızı her zaman üçüncü bir şahıs okuyacakmış gibi yazmaya çalışın. Ne yapmak istediğinizi karşıdakine anlatırken gereksiz kodlardan kaçındığınızı göreceksiniz.Ve yavaşlatabilecek kısımları da biliyor olacaksınız. Scriptinizi hızlandırma çalışmalarına başlamadan önce scripti yavaşlatan kod bloklarını keşfedin nereyi optimize edeceğinizi bilin. Ve optimize edeceğiniz yeri bilmeden kodda düzenleme yapmaya başlamayın .!
bunun için güzel bir araç olan APD ye burdan ulaşabilrsiniz.
Yol haritanız olsun.
Scriptiniz üzerinde yapcağınız işlemler önceden planlanmış işlemler olsun (asla plansız kod yazmaya başlamayın). yapacağız optimize işlemleri dahi önceden bir yerlere yazılmış olsun. Bu size hem hız katacaktır hem düzen. Haritanızda Scriptinize versiyon vermeye de çalışın.
En güncel PHP versiyonunu kullanın.
PHP motorunun geliştiricileri de yıllardır performans için düzenlemeler yapıyor.! Bu yüzden PHP yi küçümsemeyin demiştik. Optimizasyon yapmadan ya da yaptırmadan önce ya da hızından şikayet etmeden once php versiyonunuzu yükseltin. versiyon yükseltme işlemlerini de her zaman php.net ten takip edebilirsiniz.
Cache mekanizmanızı kurun.
Ne kadar statik o kadar hız. Cache yapayım derken de abarmayın. Tüm çıktıların saklanması cache değildir .. Dinamikliği ya da yeniden oluşumu minimuma indirmeye çalışın. Veritabanına kayıtlı olan her şey sayfanızın her işlenmesinde tekrar tekrar sorgulanıp gelmesin. Mekanizmanız extra maliyetler ya da kaynak gereksinimi getirmesin veriyi size hızlı veren bir uygulama kullanın örn : Memcache Tema işlemleriniz için de Cache oluşturamıyorsanız Smarty gibi bir uygulama kullanın.
Output buffer ‘a hükmedin.
PHP’nin ik önce bellekte oluşturduğu output kullanıcıyı bekletir ve çıktı bitene kadar bellekte birikir. bu birikme sayfalarınızın geç yüklenmesine sebep olabilir. Bazı işlemlerinizde Output ‘u dışarı vermeye zorlayabilir ve hızlandırabilirsiniz.
Getter ve Setter metodlardan kaçının
0 1 2 3 4 5 6 7 8 9 10 11 12 | class Yazilimci{ public $name=''; public function setName( $name ) { $this->name = $name; } public function getName() { return $this->name; } } |
Şu kodda gördüğünüz gibi setName() ve getName() size name elemanını saklamak ve vermek dışında hiç birşey yapmıyor.
0 1 2 | $yazilimci=new Yazilimci; $yazilimci->setName('Tufan Barış YILDIRIM'); echo $yazilimci->getName(); |
setName() fonksiyonunda yapmak istediklerimiz olursa. ( onNameChanged olayı gibi ) o zaman bu metodların bir anlamı olur.
Direk name elemanını kullanmanız hızını %100 arttıracaktır.
0 1 2 | $yazilimci=new Yazilimci; $yazilimci->name='Tufan Barış YILDIRIM'; echo $yazilimci->name; |
Gerek duymadıkça kopya değişkenler oluşturmayın
PHP scriptlerimizde dışardan parametre alma ihtiyacı duyarız. Bu son kullanıcıya sağladığımız ya da programlamada kendimize sağladığımız bir kolaylık olabilir. Bu parametrelerin de bir süzgece ihtiyacı vardır “cleaner functions” . Dışardan bize 500 KB boyutunda bir verinin textare aracılığı ile gönderildiğini düşünelim. bizim bunu yeni bir dğeişkene atamamız 1 MB bellek harcamamız anlamına gelir.
0 1 | $konuMetni = strip_tags($_POST['konu_metni']); echo $konuMetni; |
Inline operasyonlar yapın ram kullanımızı çok düşürecektir.
0 | echo strip_tags($_POST['konu_metni']); |
Kullandığınız veritabanının yeteneklerini öğrenin.!
Veritabanı sadece veri saklamak için değildir.! Veritabanı hızlı ve düzenli ulaşım ve saklama yapabilir. Yeteneklerinden en iyi şekilde faydalanmamız demek sorguların azalması , bu da hızın artması demektir.
Döngü içine sorgu yazmak yerine JOIN , istisnai durumlar da SUB QUERY işlemlerine başvurmalıyız.
Çoklu insert örneği vermemiz gerekirse
0 1 2 3 | foreach ($yazilimcilar as $yazilimci) { $query = 'INSERT INTO yazilimcilar (adi,soyadi) VALUES("' . $yazilimci['adi'] . '", "' . $yazilimci['soyadi'] . '")'; mysql_query($query); } |
bu kullanım $yazilimcilar sayısı kadar mysql_query çalıştırmaya sebep olacaktır.
MYSQL INSERT kalıbını incelediğimizde bunu tek sorgu ile yapabildiğimizi görüyoruz. O halde bu yeteneğinden faydalanalım.
.. devamı gelecek








sql sorgularınada girerseniz zamanla çok güzel olacak elinze saglık tufan hocam
Aynı zamanda veri tabanı için Performance Tuning işlemlerine de değinmek lazım.Özellikle MySQL tarafında tuning yapmakla ilgili bir konuda açmalısınız bence.
tufan hocam ben 5 senedir php geliştirmeler yapıyorum gerek phpile 0dan veritabanı sistemi olsun gerek php ajax birleştirmesi olsun şu 1 sene içersinde vakit buldukça class yapısını kullanmaya özen gösteriyorum ama sizin gibi .net ile phpyi bir arada götüren bir kişiyi daha görmedim
teşekkürler
Teşekkürler,
İkisinin de yeri ayrı ikisi de yetenekli ortamlar. Web sitenizi yazmamışsınız incelemek isterdim. iyi çalışmalar…