İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

Php Kod İle Performans

Raqe

1
İyinet Üyesi
Katılım
4 Mayıs 2010
Mesajlar
615
Reaction score
8
Konum
İstanbul/Pendik
Bu Döküman Kendi Emeklerim İle Yazılmıştır.

Bir program yada betiğin başarısı sadece işini tam yapmasıyla ölçülmez. Gerektiği kadar zaman kullanması, sistem kaynaklarını gerektiği kadar kullanması ve verimli çalışması da işin başarılı kabul edilmesinde etkilidir. Bahsettiklerimiz çoğu zaman işin doğru yapılması kadar önemlidir.

PHP gibi ağ tabanlı çok kullanıcılı sistemler için kullanılan programlama dillerinde bu ölçülere daha çok dikkat edilmelidir. Ağ tabanlı uygulamaların masaüstü uygulamalarından en önemli farkı aynı anda farklı yerlerden bir çok kullanıcı tarafından çalıştırılacak olmalarıdır. Bu durumda yapılan bir fazla zaman yada sistem kaynağı kullanımı daha çok etkisini gösterecektir.

Bu yazıda PHP ile program/betik yazarken daha iyi bir performans için dikkat edilebilecek bazı ayrıntılardan bahsedeceğim.
Yazdığınız kodları performans açısından değerlendirirken dikkat etmeniz gereken üç temel konu vardır;
1) Kullandığınız dilin (Yazıda PHP kullanılacaktır) araçları
2) Sistem kaynaklarının kullanımı (hafıza (memory) kullanımı, sabit diskten okuma)
3) Veritabanı kullanımı


Şimdi sırayla bu başlıklara değinelim.
1) Kullandığınız dilin araçları : Programlama dilleri program yazarken kullanmanız için bir sürü fonksiyon (echo(), substr() ) ve araçlar (if,while, for) sağlarlar. Bu araçların kullanım amaçları farklı farklıdır. Aynı işi farklı araçlar kullanarak farklı yollarla yapabilirsiniz. Her farklı yolun harcadığı zaman farklıdır. Burada zamandan kastımız kodun çalıştırılırken (PHP motoru tarafından) harcadığı zamandır. İki farklı yolun ne kadar zaman harcadığını basitce basinda ve sonunda zamanı microtime() kullanarak yazdırıp görebilirsiniz. Daha ayrıntılı ve detaylı bilgiyi Benchmark (PEAR), DBG, Xdebug veya Advanced PHPDebugger kullanarak elde edebilirsiniz. Bu konumuzun biraz dışında :) .

Şimdi PHP araçları kullanırken dikkat edebileceğimiz ufak ayrıntıları listelemeye başlayalım.

Aynı işi birkaç defa yapmamak : Aynı işlemi aynı sonucu verecekse tekrar yapmak zaman kaybıdır. Kod yazarken örneğin bugünün tarihi betiğin birkaç yerinde yazdırmamız gerekiyorsa hesaplamayı en başta yapıp bir değişkene atıp sonra bunu kullanmak işlem sayısını azaltacaktır.

Karar mekanizmaları (if) gerektiği kadar kullanmak : Kara mekanizmaları normal işlemlerden (toplama,çıkarma,eşitleme gibi) daha çok zaman aldığı için çok fazla kullanmak doğru değildir. Örneğin aynı şarta bağlı işlemleri bir araya toplamanız daha doğru olacaktır.

Döngüleri (for, while ...) doğru kullanmak : Döngüler de karar mekanizmaları gibi normal işlemlerden daha çok vakit alırlar çünkü her işlem sırasında döngü şartını kontrol ederler. Basit bir örnek vermek gerekirse 3 defa çalışacağını bildiğimiz bir döngü gereksizdir. Onun yerine direk olarak işlemi üç defa yazmamız daha doğrudur. Eğer bir döngünün kesin olarak kaç defa çalışacağını biliyorsak direk olarak işlemeleri yazmamız bize hız kazandıracaktır. Dögüleri kullanırken sık yapılan hatalardan biri de kontrol şartlarında aynı işlemi sürekli yaptırmaktır. Genel olarak döngülerde dizi (array) kullanırken döngüyü dizi sayısı kadar döndürürüz (for($i=0;$i

Echo veya print kullanmak: PHP geliştiricileri echo 'nun print ten daha hızlı olduğunu belirtiyorlar (bakınız Kaynak 1). Sonuç yazdırken echo kullanmak daha doğru olacaktır.

String türünde değişkenleri tek yada çift tırnak kullanmak : Tek tırnak kullandığınız zaman PHP motoru değişkeni formatsız olarak kabul eder ve hiçbir kontrol yapmaz. Yani tek tırnak kullandığınız değişkenlerde n gibi özel karakterler ve değişkenler kullanamazsınız. Tek tırnaklı string'de kontrol yapılmadığı için hızlı çalıştığından eğer başka değişken kulllanmayacaksanız ve özel karakter kullanmayacaksanız tek tırnak kullanmanız daha doğrudur.

Dosya çağırmak (include) : Program yazarken dosya çağırmaya ihtiyaç duyduğunuzda include,require,include_once veya require_once kullanırsınız. Require ile include fonksiyonlarinin tek farkı dosya bulunumayınca include uyarı require hata verir. '_once' li fonksiyonlar ise dosyanin daha once çağırılıp çağırılmadığını kontrol eder. Çağrılmışsa yeniden çağırmaz. Eğer bir dosyayı birden fazla çağırma ihtimali yoksa '_once' olmayan fonksiyonları kullanmanız daha doğrudur.

2)Sistem kaynaklarının kullanımı (hafıza (memory) kullanımı, sabit diskten okuma) : Bütün programlamlar çalışırken kullandığınız değişkenleri hafızada tutar. Hafızayı mümkün olduğu kadar az kullanmak için gereksiz değişkenler kullanılmamalıdır.

Bir başka dikkat edilmesi gereken konu ise dosya okuma işlemleridir. Dosya okumanız gerektiğinde fscanf gibi paramatre alan fonksiyonların yerine dosyayı satır satır okuyup PHP string parçalama fonksiyonlarını kullanmanız daha doğrudur.

Dosya okuma işi sırasında dikkat edilmesi gereken başka bir konu ise dosyaların okuma işlemi bittikten sonra kapatılmasıdır (fclose() ).

3)Veritabanı kullanımı : Veritabanı kullanan uygulamalar yaparken yaptığınız bağlantı ve sorgu sayısı uygulamanın hızını doğrudan etkiler. Dikkat edilmesi gereken noktaları şöyle sıralayabiliriz.

Bağlantı : Gerektiğinde veritabanına bağlanılmalı ve işlem bittikten sonra bağlantı kapatılmalıdır.

Tasarım : Uygulamanız için veritabanı oluştururken yapacağınız tasarım hataları uygulamınızın hızını etkiler. (Bu konu başlı başına bir makale konusu olabileceğinden ve bu makalenin konu sınırını aşacağından burda biraz kısa anlatılacaktır.).

Tablo oluştururken alanların birbirinden bağımsız olamsına dikkat edilmelidir (normalization). Yani eğer bir tablonun bir özelliği başka bir özellik kullanırak bulunabiliyorsa yani bağımlı ise bu özelliği alan olarak tabloda belirtmeye gerek yoktur.
Aynı özellikte bilgiler için tek tablo oluşturulmalıdır.

Sorgu: Sorgu cümlesi iyi oluşturulmalı ve istenilen sonuçların her zaman doğru olarak döndürüldüğü kontrol edilmelidir.

Veritabanının kolayca yaptığı (count,rand,limit,date,order vb) işlemler veritabanına yaptırılmalıdır. Sorgu sayısı mümkün olduğu kadar azaltılmalıdır. Bunun için sorgu işlemleri farklı modüllere bölünebilir.
Sorguda sadece gerekli alanlar çekilmelidir ve 'select *' kullanımından kaçınılmalıdır.

Veritabanına veri girişi yaparken yapılan kontrolleri mümkün olduğu kadar veri tabanına yapmasını sağlamak. Veri tutarlığını çok özel durumlar olmadığı sürece veritabanı araçlarıyla sağlamak (trigger). Veritabanları bu işlemleri yapmak için tasarlandığı için sizin yazacağınız programlardan çok daha hızlı ve kolayca bu işlemleri hallederler. Unutmayalımki veritabanları sadece veri depolamak için değil veriyi kolay işlemek için kullanılmak içindir
 

Hugo

0
İyinet Üyesi
Katılım
4 Mayıs 2010
Mesajlar
332
Reaction score
10
Tüm yazı bold olunca ve karakteri böyle olunca okunması çok zor oluyor. Yazıyı takip etmesi çok zor oluyor ayrıca gözleri de çok yoruyor...
 

tetal

1
İyinet Üyesi
Katılım
6 Şubat 2003
Mesajlar
3,776
Reaction score
20
Konum
Ordan, burdan..
yararlı bir döküman, eline sağlık. daha okunur ve anlaşılır olması amacıyla normal fonta çevirdim. iyi çalışmalar.
 

Raqe

1
İyinet Üyesi
Katılım
4 Mayıs 2010
Mesajlar
615
Reaction score
8
Konum
İstanbul/Pendik
İnşallah yazmış oldugum dökümanı alıntı yapıp kendi lehine cevirenler olmaz :(

Yorum için teşekkür ederim
 

Raqe

1
İyinet Üyesi
Katılım
4 Mayıs 2010
Mesajlar
615
Reaction score
8
Konum
İstanbul/Pendik
tamamı değil sadece bir kısmı benim çalışmam bazı kısımları arkadaşlarımındır.
 

OsmanAtabey

0
İyinet Üyesi
Katılım
26 Mart 2005
Mesajlar
922
Reaction score
4
Buradaki çalışma kimin peki ? --> internetdergisi.com/index.php?Part=Article&id=189

Alıntı yaptığın yazıların nereden alındığını veya kimin yazısı olduğunu belirtirsen daha iyi olur.
 

OsmanAtabey

0
İyinet Üyesi
Katılım
26 Mart 2005
Mesajlar
922
Reaction score
4
Raqe işim gücüm yok konumu baltalıcam burada ? verdiğim linkteki yazı o siteye 2005 yılında eklenmiş. Altında kaynak olarak verilen isim var + kaynak site kapalı şu anda. Forumda birçok konu açıyorsun arka arkaya ve hiçbirisinde kaynak veya yazar ismi yok.
 

Raqe

1
İyinet Üyesi
Katılım
4 Mayıs 2010
Mesajlar
615
Reaction score
8
Konum
İstanbul/Pendik
wardom.org sitesindeki ekibim dahilinde bu paylaşımı yaptım ve wardom.org 1998 yılından beri bu işle uğraşıyor biraz dikkat edin derim.wardom olarak yapıyoruz dediğimiz zaman reklam diceksiniz yine aynı konu olacak.
 

OsmanAtabey

0
İyinet Üyesi
Katılım
26 Mart 2005
Mesajlar
922
Reaction score
4
Wardom yokkende ben vardım internette. Konu wardom değil eklediğin dökümanları kendin yazmışsın gibi davranıp kaynak ve yazar ismi belirtmiyorsun.
 
T

trgy

Misafir
Uzatmayın tartışmaya gerek yok güzel bir makale kaynak ekleyin olsun bitsin. Gerçi kaynak kapalıymış şu an ama. Boşverin kırmaya gerek yok birbirimizi. :)
 

Emre000

0
İyinet Üyesi
Katılım
9 Haziran 2010
Mesajlar
8
Reaction score
0
Bişiyler öğretebilmek için uğraşmışsın ve paylaymışsın teşekkür ederim.
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Üst