Merhaba arkadaşlar. Bugün deneysel bir yazı ile karşınızdayım. Evet deneysel! Peki nedir bu deneysel çalışma? Arkadaşlar bugün kendi gözümüzle hangi fonksiyonların, hangi fonksiyonlardan veya methodlardan daha performanslı olduğunu göreceğiz. Ben canlı canlı hazırladım. Keşke videolu ders olsaydı. Ama bu dersin videolusunu çekeceğimden emin olabilirsiniz!

Şimdi arkadaşlar birçok kişiden de mail aldım; sunucuya yüklenme gibi sebeplerden daha az iş yapmak isteyenler var. Bende ilk önce Php nin yapı modülü olan microtime(); yani sorgunun gerçekleşme süresini aldım ve ekrana yazdırdım. Bunu iki defa yaptım ve birini diğerinden çıkardım. Bu sayede elimde sayfanın yorumlanma süreci oldu. Şimdi birkaç deney yapıcaz…

Öncelikle ilk kodlarım nedir göreyim;

{code type=PHP}<?php
$baslat = microtime(true);

//Buraya Deney Kodlarım Gelecek!

$bitir = microtime(true);
$sonuc = $bitir – $baslat;
echo $sonuc;
?>{/code}

Şimdi bu halinde ekrana 1.9 veya 2 gibi değerler verecektir. Bunlar önemli değil. Öncelikle madde madde giderek deneysel çalışalım;

Öncelikle kodlarınız sade olması gerekir. Bir kod bütünlüğünü defalarca kullanmanız tamamiyle gereksizdir. Mesela veritabanı bağlantı kodlarını defalarca baştan yazarsanız gereksiz yere performans kaybı yaşarsınız. Fakat tek kod ile tüm sayfalarda include gibi yöntemler kullanmak akıllıcadır.

Mesela sanki iki defa toplama işlemini yaptırıyormuş gibi kodlarımızı yeniden düzeltirsek ( bunu da siz yaparsınız baştan kod koymayayım ) yani aynı toplama kodu buraya gelecek yerine iki defa eklerseniz en az 2.4 veya 2.5 gibi sonuçlar alırsınız. Eğer dediğim gibi tek kodu ile işlem yaparsak 2 gibi sayılar olacaktır. Düşünün o yarımlar bir bütün olarak geri dönecektir…

Bir de bayağı merak edilen konu var; echo mu print mi? Arkadaşlar echo, printten bir sonraki versiyonda çıkartılmıştır. Ayrıca echo nun daha performanslı olduğunu açıkça söylüyorlar. Biz deneyimizde de görelim. Bir üst deneydeki toplamaları silin ve echo “deney”; print “deney”; olarak ekleme yapın. Sonra da sonuçları gözlemleyin. Echo da 5, print te 5.4 gibi rakamlar aldım. Demek ki bu durum dediklerimizi kanıtlıyor.

Sonrasında tek tırnak mı yoksa çift tırnak mı sorusu var. Arkadaşlar tek tırnak yaparsanız özel karakterler yani /n gibi operatörler hiç tanınmadan ekrana yazdırılır. Fakat çift tırnakta ise bunlar kontrol ediliyor. Eğer ki özel karakter kullanmayacaksanız tek tırnak en iyisi. Mesela echo ‘deney’; ve echo “deney”; olarak kontrol edelim; tek tırnakta 4.9, çift tırnakta 5.1 sayılarını aldım. Demek ki bunlar gerçekten de performansı etkiliyor.

Sonrasında if sorguları geliyor. Ne kadar çok if sorgusu yaparsanız o kadar çok performans azalır. Bunun içinde || ve && gibi operatörler çıkartılmıştır. Bunları kullanarak birçok sorguyu en aza indirmek en mantıklısı. Mesela ilk önce if(1==1) ve if(2==2) olarak ve if(1==1 || 2==2) olarak deney yapalım; ilkinde 3 ikincisinde ise 2.5 sonuçlarını aldım.

Bundan sonra ise for, while döngüleri geliyor. Zaten en fazla performans etkileyicileri de bunlardır. Arkadaşlar durumuna göre yani bir verinin başka bir veriye eşitlenmesi için while fakat bir sayının bir sayıya eşitlenmesi için for en güzel çözüm. Tabi bunun yanında bu tür sorguları da en aza indirmek de çok mantıklı. Ne kadar çok sorgu o kadar az performans demektir…

Arkadaşlar birde include, require gibi dahil etme methodları var. Bu methodların aralarında sadece bulunmazsa hata verme farkı var. Yine çok fazla dosyayı include etmek yerine tek dosyada birleştirme çok çok mantılı oluyor…

Ayrıca Php nin en büyük performans kaybı da veritabanıdan kaynaklanır. Php deki sorgular mysql içerisine çalıştırılmadan önce işaretler ile yol bulunur. İşte bu yüzden bütün veriler arasından uygunun olanını çekmek yerine toplam veriyi bulup başka bir döngü ile toplama çok çok daha mantılı. Verilerin hepsini kesin olarak nokta atışı yaparak seçin. Sorgularını asla çoğaltmayın. Insert ifadesi dizisel mantık ile çalıştığı için birden çok sütuna birden çok veri ekleyerek gereksiz insert sorgularından kaçınabilirsiniz. Ayrıca veritabanına birden çok bağlantı kurmakta yanlıştır. Bunların yanında eğer ki tek veri ekleyecekseniz sonunda mysql close etmenizde de fayda var.

Daha da bitmedi! Bunların yanında değişkenler konusu var. Arkadaşlar değişkenlerin hepsi hafıza veya ram da yer edinir ve oradan kullanılır. İşte bunun için diziler veya değişkenleri olabildiğince az kullanmakta da fayda var. Nasıl olsa birşey olmaz diyipte boş yere değişken kullanmak mantıksızdır.

Ayrıca arkadaşlar başka dosyalar ile bağlantı kurmak, dosya okumakta da bütün verileri okumak yerine dizisel olarak veri çekmek performanda önemli bir etki yaratır. Yukarıda da dediğim gibi bütün işlemlerden sonra gereksiz tüm fonksiyonları close etmek en iyi çözümlerden biri…

Şimdilik aklıma gelen en önemli konular bunlar. Eğer ki istek veya soru olursa devam edebilirim…

Herkese iyi günler, iyi çalışmalar…