Php ile Kod Performansı Nasıl Sağlanır ?

Cevapla
Kullanıcı avatarı
admin
Sistem Geliştiricisi
Sistem Geliştiricisi
Mesajlar: 806
Kayıt: 28 Ağu 2022 04:38
Konum: Database
Meslek: Teknisyen
Teşekkür etti: 434 kez
Teşekkür edildi: 297 kez
İletişim:

Resim

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

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ğiz.

Yazdığınız kodları performans açısından değerlendirirken dikkat etmeniz gereken üç temel başlık 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ğineceğiz.

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 atayı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. Sonuç yazdırı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 kullanmayacaksanı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ı :

Veri tabanı 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 veri tabanına bağlanılmalı ve işlem bittikten sonra bağlantı kapatılmalıdır.

Tasarım : Uygulamanız için veri tabanı oluştururken yapacağınız tasarım hataları uygulamanı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 burada biraz kısa anlatılacaktır.).

Tablo oluştururken alanların birbirinden bağımsız olmasına dikkat edilmelidir (normalization). Yani eğer bir tablonun bir özelliği başka bir özellik kullanılarak 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.

Veri tabanı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.

Veri tabanı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 veri tabanı araçlarıyla sağlamak (trigger). Veri tabanları 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ım ki veri tabanları sadece veri depolamak için değil veriyi kolay işlemek için kullanılmak içindir.
Daha zeki olmanın tek yolu, daha zeki bir rakiple oynamaktır.

Etiketler:
Cevapla

“Php” sayfasına dön