Rap

Rap
 
AnasayfaAramaKayıt OlGiriş yap

Paylaş | 
 

 PHP Kodu Renklendirme [Devamı]

Önceki başlık Sonraki başlık Aşağa gitmek 
YazarMesaj
The_SaS
Admin
Admin
avatar

Mesaj Sayısı : 67
Kayıt tarihi : 12/04/08
Nerden : ßir Köylü çocugu

MesajKonu: PHP Kodu Renklendirme [Devamı]   Ptsi Nis. 14, 2008 10:04 am

İlk uygulamalarımızı geliştirdikten bir süre sonra clean code ve hızlı çalışan scriptler yazamamış olmaktan endişe ederiz. Bu yazıda hızlı çalışan scriptler için bazı öneriler bulacaksınız.


Öncelikle belirtmeliyim ki, PHP scriptlerinin hızlı çalışması için yapacağınız düzenlemeler çoğu kez kayda değmeyecek iyileştirmeler sağlar. Ama yine de kod yazma alışkanlıklarımızı geliştirmek fayda sağlayacaktır.

YAZDIRMA KOMUTLARI

İlk olarak bilmemiz gereken şey, PHP'de tek tırnak işaretlerinin string yani metin, çift tırnak işaretlerinin değişken içeren metin ve hiç tırnak kullanmamanın da yazı fonksiyonlarında değişken, değişkenlerde ise sayılar için kullanıldığıdır. Ayrıca işlemlerde öncelik belirleme durumları dışında parantezlerin öneminin olmadığını da unutmamalıyız. Örnekler:

$foo='bu bir metindir';
$bar='Ahmet';
$foo="Merhaba, $bar"; //Merhaba, Ahmet
$foo='Merhaba, $bar'; //Merhaba, $bar
$foo=10;

Eğer çift tırnak kullanırsanız PHP burada bir değişkeni dahil etmeye hazırdır. Oysa ki tek tırnak kullanırsanız, değişken okumak gibi bir durum söz konusu değildir. Dolayısı ile daha hızlıdır. Yani;

echo 'bu bir metindir'; //daha hızlı
echo "bu bir metindir"; //daha yavaş

Bunun yanında bir değişkene çift tırnak içinde yer vermek yerine . ile eklemek de daha hızlıdır. Yani;

$bar='Ahmet';
echo $bar.', Merhaba'; //daha hızlı
echo "$bar, Merhaba"; //daha yavaş

Gereksiz yere echo veya print fonksiyonlarını kullanmak performans kaybına neden olur. Örnek;

echo "Merhaba";
echo "$bar"; //daha yavaş
echo 'merhaba'.$bar; //daha hızlı

Eğer yazdırılacak metin parça parça eklenecek ise, bunu önce bir değişkene eklemek sonra yazdırmak daha hızlıdır. Ancak tüm yazım işlerini böyle yaparsanız çok fazla değişken kullanarak hafızaya yüklenmiş olursunuz. Örnek;

$metin='Merhaba';
$metin.=$bar;
echo "$metin"; //yavaş
echo $metin; //en hızlısı

Bir diğer konu da echo veya print fonksiyonlarının kullanımıdır. Prensip olarak echo ile yapabileceğiniz işi diğerleri ile yapmayınız. Çünkü echo sadece yazdırma işini yaparken print yazdırma işinin ardından true veya false olarak bir değer döndürür. Çoğu kez buna ihtiyacımız yoktur. printf veya printr ise gerekmedikçe kullanılmamalıdır.

SORGULAR

Veritabanı sorgularında performans açısından mümkün olduğunca çok işi SQL sorgusunda yapmak ve sorgu sayısını en az seviyede tutmak prensip olmalıdır. Yani veritabanından her hangi bir sınırlama yapmadan bilgi çekip sonra PHP ile if else operatörleri ile veriyi filtrelemek performans açısından olumsuzdur.

PHP PARSER

PHP parser HTML kodlarını kontrol etmez, dosyaya eklenen fonksiyon veya class ların kullanılsın veya kullanılmasın tümünü kontrol eder. Parser ve compilerın servis hızına göre

HTML veya PHP olmayan kodlar //kontrol yok en hızlı
Dosya içindeki PHP kodları //daha yavaş
Fonksiyon ve sınıflar //daha da yavaş
Include veya Require //en yavaş

şeklinde işlenir. Buna göre;
Sık ve farklı dosyalardan çağrılmayacak kodlar için fonksiyon kullanmak

Kod yoğunluğundan dolayı bakım ve güncelleme zorluğu olmayan dosyalarda class kullanmak

Fonkisyonları çok sayıda harici dosyada tutup bunları sayfaya (çok sayıda) include etmek

HTML kodlarını PHP kodu içinde yazmak
performans kaybına neden olur.

Bu durumlardan fonksiyon ve classlar ile ilgili olanlar tasarıma göre göze alınabilir.
Bunun yanında include veya require fonksiyonları yerine include_once veya require_once fonksiyonları kullanılmalıdır.
HTML için örnek:

if(!isset($A1) {
echo "<input type=\"text\" name="A1\" value=\"$foo\">";
}
echo"<input type=\"submit\" name=\"ok\" value=\"Gönder\">";

yerine

<?
if(!isset($A1) {
?>
<input type="text" name="A1" value="<?=$foo ?>">
<? } ?>
<input type="submit" name=ok" value="Gönder">

daha hızlıdır ve daha kolay okunur.

DOSYALAR

Mümkün olan en az sayıda dosya işlemi yapılmalıdır. Dosyadan okumak yerine vertabanından okumak tercih edilmelidir.

DÖNGÜLER

Dizi işlemlerinde eğer dizi çok küçük değilse foreach kullanmak yavaştır. Çünkü foreach dizinin kendisinde değil yarattığı bir kopyasında çalışır. Bunun yerine for döngüsü tercih edilebilir. Ancak diziyi saydırma işini önceden yapmak daha hızlıdır. Yani;

for($i=0;$i<count($dizi);$i++) { ..... }

yerine

$m=count($dizi);
for($i;$i<$m;$i++) {...... }

çünkü ilk yazım şeklinde döngü devam ettiği sürece her defasında dizideki elemanları tekrar saydırırsınız, bu hem gereksiz hem de zaman kaybettiren ama yazım kolaylığı olan bir tarzdır.

SAYILAR

Sayıları tırnak içinde kullanmak onları string yapar ve bu da yavaştır. Örnek:

for($i="0";$m="15";$i++) { .... } //yavaş
for($i=0;$m=15;$i++){.... } //hızlı

HAFIZA

Eğer bir değişkene büyük bir veri atarsanız kullanımdan sonra bunu sıfırlamanız iyidir. Değişkene 0 veya null değeri atayarak yapabilirsiniz.
Bununla birlikte MySQL sorgularınızdan sonra mysql_free_result($degisken); fonksiyonu ile aynı şekilde hafızanın daha optimum kullanımını sağlayabilirsiniz.

Ayrıca PHP komplike ifadeleri başarı ile destekler. bu nedenle değişken kullanmadan yapabileceğiniz işleri komplike ifadeler ile yapmanız uygundur. Örnek;

$kontrol=mysql_num_rows($sorgu);
if($kontrol<1) {.... }

yerine

if(mysql_num_rows($sorgu)<1) {.... }

hafızayı daha etkin kullanmanızı sağlar.

DÜZENLİ İFADELER

String Manipülasyon (str fonksiyonları) en hızlısıdır, Perl Tipinde düzenli ifadeler (preg..) daha yavaş, POSIX (ereg..) en yavaşıdır.

MySQL

Eğer konfigürasyonunuz uygun ise kalıcı (persistent) bağlantı kurmanız , her sorgudan önce bağlantı kurmaktan daha hızlıdır.

Umarım faydalı bir yazı olmuştur.

Senih Özkiper (xeno)
Sayfa başına dön Aşağa gitmek
Kullanıcı profilini gör http://sistem.forum0.net
 
PHP Kodu Renklendirme [Devamı]
Önceki başlık Sonraki başlık Sayfa başına dön 
1 sayfadaki 1 sayfası

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
Rap :: ASP, Perl, Php, Html-
Buraya geçin: