php_frameworks

Framework Kavramı ve Benchmark (PHP)

Kelime anlamı olarak baktığımız zaman ‘çerçeve’ anlamına geliyor. Aslında framework dediğimiz şey bir işin yapılışında o işi düzene sokan, disipline eden bir yapının ta kendisidir.Yazılım dünyasında frameworklerin önemi ve popülerliği aşikar. Bu yazımda sizlere nacizhane PHP frameworklerini anlatmaya çalışacağım. PHP dünyasında çok fazla sayıda framework vardır.Fakat bunların en çok bilinenleri: CakePHP, Codeigniter, Kohana, Yii, Symfony […]

Kelime anlamı olarak baktığımız zaman ‘çerçeve’ anlamına geliyor. Aslında framework dediğimiz şey bir işin yapılışında o işi düzene sokan, disipline eden bir yapının ta kendisidir.Yazılım dünyasında frameworklerin önemi ve popülerliği aşikar.

Bu yazımda sizlere nacizhane PHP frameworklerini anlatmaya çalışacağım.
PHP dünyasında çok fazla sayıda framework vardır.Fakat bunların en çok bilinenleri:
CakePHP, Codeigniter, Kohana, Yii, Symfony ve Zend dir.Bu frameworklerin ortak noktası MVC pattern ini kullanmasıdır.MVC hakkında daha detaylı bilgiyi bu adresten alabilirsiniz.

Framework ün getirdiği artılar :

  • Katmanların birbirinden ayrı olması ile kodunuz daha anlaşılır olur.
  • Eğer framework ün kurallarını ve temel yazılım kurallarını uygularsanız bakım ve geliştirme maliyetlerini inanılmaz düşürebilirsiniz.
  • Frameworklerin size sağlamış olduğu kütüphaneleri ve  eklentileri kullanarak daha hızlı geliştirme  yapabilirsiniz.
  • Eğer popüler bir framework kullanırsanız sorularınıza çok rahat ve hızlı cevap bulabilirsiniz.

Framework ün getirdiği eksiler :

  • Framework ile geliştirilen kod hiçbir zaman saf php kadar hızlı olmayacaktır.
  • Framework kullanmak için o framework ile ilgili biraz döküman okumak gerekir.Bu durum da geliştirme sürecinde başlangıç aşamasnda yavaş iş yapmanıza neden olabilir.
Burada dikkat edilmesi gereken nokta şudur.Öncelikle ihtiyaçlarınızı iyi belirlemeli ve framework seçiminizi buna göre yapmalısınız.Ekrana hello world yazmak için framework kullanmak tam anlamı ile saçmalık olacağı gibi, sadece MVC paternini sağlıyor diye  ağır bir framework kullanmakta yanlış bir tercih olacaktır.
Şu şekilde anlatmaya çalışayım. Mesela bu popüler frameworkler arasında en hantal olanı Zend dir.Sebebi şu: Zend developer a çok rahat kod geliştirebilmesi ve istediği gibi bunları customize ediebilmesi için muazzam kütüphaneler ve eklentiler sunar.Bunun için hem boyut olarak hem de life cycle olarak diğer frameworklere göre daha hantal gözükelibilir ama developer a diğer frmaeworklerini verdiğinin çok daha fazlasını verir.
Eğer Zend framework kullanıyorsanız.Bunu köküne kadar kullandığınızda anlamlı olacak.Sadece MVC pattern i için Zend kullanmak hiç akıllıca değil, çünkü eğer derdiniz MVC pattern ise bunu oturup çok kısa bir sürede isteklerinize göre kendiniz yazabilirsiniz veya var olan daha lightweight frameworkleri tercih edebilirsiniz.Eğer Zend kullanıyorsanız bunun Router ı Validator ını vs sini de kullandığınız zaman ancak o zaman framework ün gücünü hissedebilirsiniz.
Symfony ve Zend i ağır frameworkler sınıfına diğerleri ise orta ve hafif frameworker sınıfına koyabiliriz.Ziraa Symfony ve Zend Framework diğerlerine göre açık ara fark yaratmış frameworklerdir.
Bu frameworkler için yaptığım benchmark testini sizlerle paylaşacağım.Yalnız burada önemli bir noktoaya temas etmek isterim.Yaptığım test Hello World testidir.Yukarıda ‘hello world için framework kullanmak çok saçma olur ‘ demiştim.Bu testi yapma amacım frameworklerin lifecycle larını test edip bunların hız performans testini yapmak.

PHP Frameworks Benchmark

Test için apache benchmark tool u kullanarak yaptım.Sunucu tarafında APC kurulu değildi.Zira APC vs şeylere bir sonraki yazımda değinmeye çalışacağım.

Burada gözüken en hızlı Codeigniter 1.7.3 gözüküyor.Tabii ki Codeigniter 1.7 nin PHP4 e destek için çok daha lightweight olduğunu düşünürsek sonuçlar hiç şaşırtıcı değil.

Söylemeye çalıştığım framework seçerken ihtiyaçlarınızı iyi belirlemelisiniz.Bu grafiğe göre şu framework  iyidir bu kötüdür diyemeyiz.Ziraa hızın yanında frameworklerin community leri kütüphaneleri plugin leri esneklikleri.

Kaynak kodu  https://github.com/ggunlugu/ornekler/downloads adresinden indirebilirsiniz.

Benchmark sonuçları :

 -------------------------------------CAKE 1.3.7---------------------------------
Benchmarking localhost (be patient).....done

Server Software:        Apache/2.2.20
Server Hostname:        localhost
Server Port:            80

Document Path:          /frameworks/cake/1.3.7/hello
Document Length:        12 bytes

Concurrency Level:      5
Time taken for tests:   1.606 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      25200 bytes
HTML transferred:       1200 bytes
Requests per second:    62.26 [#/sec] (mean)
Time per request:       80.313 [ms] (mean)
Time per request:       16.063 [ms] (mean, across all concurrent requests)
Transfer rate:          15.32 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   74  22.6     77     133
Processing:     0    5  24.0      0     152
Waiting:        0    5  24.0      0     152
Total:         42   79  19.2     78     152

Percentage of the requests served within a certain time (ms)
  50%     78
  66%     83
  75%     89
  80%     92
  90%    102
  95%    110
  98%    133
  99%    152
 100%    152 (longest request)

------------------------------------CAKE 1.3.10---------------------------------
Benchmarking localhost (be patient).....done

Server Software:        Apache/2.2.20
Server Hostname:        localhost
Server Port:            80

Document Path:          /frameworks/cake/1.3.10/hello
Document Length:        12 bytes

Concurrency Level:      5
Time taken for tests:   1.292 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      25200 bytes
HTML transferred:       1200 bytes
Requests per second:    77.43 [#/sec] (mean)
Time per request:       64.576 [ms] (mean)
Time per request:       12.915 [ms] (mean, across all concurrent requests)
Transfer rate:          19.05 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   61  18.7     61     105
Processing:     0    2  11.8      0      65
Waiting:        0    2  11.8      0      65
Total:         38   64  14.0     62     105

Percentage of the requests served within a certain time (ms)
  50%     62
  66%     67
  75%     73
  80%     75
  90%     83
  95%     89
  98%    101
  99%    105
 100%    105 (longest request)

 ------------------------------------CODEIGNITER 1.7.3---------------------------------

Benchmarking localhost (be patient).....done

Server Software:        Apache/2.2.20
Server Hostname:        localhost
Server Port:            80

Document Path:          /frameworks/ci/1.7.3/
Document Length:        12 bytes

Concurrency Level:      5
Time taken for tests:   0.472 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      25200 bytes
HTML transferred:       1200 bytes
Requests per second:    211.99 [#/sec] (mean)
Time per request:       23.586 [ms] (mean)
Time per request:       4.717 [ms] (mean, across all concurrent requests)
Transfer rate:          52.17 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   22   9.3     21      56
Processing:     0    1   4.8      0      37
Waiting:        0    1   4.8      0      37
Total:         12   23   8.3     21      56

Percentage of the requests served within a certain time (ms)
  50%     21
  66%     24
  75%     28
  80%     30
  90%     36
  95%     40
  98%     46
  99%     56
 100%     56 (longest request)

------------------------------------CODEIGNITER 2.0.2---------------------------------

Benchmarking localhost (be patient).....done

Server Software:        Apache/2.2.20
Server Hostname:        localhost
Server Port:            80

Document Path:          /frameworks/ci/2.0.2/
Document Length:        12 bytes

Concurrency Level:      5
Time taken for tests:   0.553 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      25200 bytes
HTML transferred:       1200 bytes
Requests per second:    180.76 [#/sec] (mean)
Time per request:       27.661 [ms] (mean)
Time per request:       5.532 [ms] (mean, across all concurrent requests)
Transfer rate:          44.48 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   26   8.6     26      52
Processing:     0    1   6.9      0      48
Waiting:        0    1   6.8      0      48
Total:         15   27   7.8     26      52

Percentage of the requests served within a certain time (ms)
  50%     26
  66%     29
  75%     32
  80%     33
  90%     38
  95%     45
  98%     48
  99%     52
 100%     52 (longest request)

 ------------------------------------KOHANA 3.0.9---------------------------------
Benchmarking localhost (be patient).....done

Server Software:        Apache/2.2.20
Server Hostname:        localhost
Server Port:            80

Document Path:          /frameworks/kohana/3.0.9/index.php/welcome
Document Length:        12 bytes

Concurrency Level:      5
Time taken for tests:   0.492 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      26700 bytes
HTML transferred:       1200 bytes
Requests per second:    203.43 [#/sec] (mean)
Time per request:       24.579 [ms] (mean)
Time per request:       4.916 [ms] (mean, across all concurrent requests)
Transfer rate:          53.04 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   22  10.8     22      95
Processing:     0    2  12.0      0      89
Waiting:        0    2  11.9      0      89
Total:         12   24  14.1     23      95

Percentage of the requests served within a certain time (ms)
  50%     23
  66%     25
  75%     26
  80%     28
  90%     33
  95%     39
  98%     94
  99%     95
 100%     95 (longest request)

 ------------------------------------KOHANA 3.1.3.1---------------------------------
Benchmarking localhost (be patient).....done

Server Software:        Apache/2.2.20
Server Hostname:        localhost
Server Port:            80

Document Path:          /frameworks/kohana/3.1.3.1/index.php/welcome
Document Length:        13 bytes

Concurrency Level:      5
Time taken for tests:   0.818 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      26800 bytes
HTML transferred:       1300 bytes
Requests per second:    122.19 [#/sec] (mean)
Time per request:       40.918 [ms] (mean)
Time per request:       8.184 [ms] (mean, across all concurrent requests)
Transfer rate:          31.98 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   38  12.7     39      73
Processing:     0    2   8.1      0      42
Waiting:        0    2   8.1      0      42
Total:         22   40  10.0     39      73

Percentage of the requests served within a certain time (ms)
  50%     39
  66%     42
  75%     46
  80%     48
  90%     53
  95%     57
  98%     73
  99%     73
 100%     73 (longest request)

 ------------------------------------LITHIUM---------------------------------

Benchmarking localhost (be patient).....done

Server Software:        Apache/2.2.20
Server Hostname:        localhost
Server Port:            80

Document Path:          /frameworks/lithium/0.9.9/helloworld
Document Length:        23331 bytes

Concurrency Level:      5
Time taken for tests:   68.903 seconds
Complete requests:      100
Failed requests:        4
   (Connect: 0, Receive: 0, Length: 4, Exceptions: 0)
Write errors:           0
Total transferred:      2262856 bytes
HTML transferred:       2240756 bytes
Requests per second:    1.45 [#/sec] (mean)
Time per request:       3445.143 [ms] (mean)
Time per request:       689.029 [ms] (mean, across all concurrent requests)
Transfer rate:          32.07 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0  497 1012.4    100    3568
Processing:     0 2899 1226.2   3256    5485
Waiting:        0    2  11.3      0      68
Total:       1797 3396 539.7   3375    5485

Percentage of the requests served within a certain time (ms)
  50%   3375
  66%   3421
  75%   3443
  80%   3463
  90%   3538
  95%   3637
  98%   5485
  99%   5485
 100%   5485 (longest request)

------------------------------------YII 1.1.5---------------------------------
Benchmarking localhost (be patient).....done

Server Software:        Apache/2.2.20
Server Hostname:        localhost
Server Port:            80

Document Path:          /frameworks/yii/1.1.5/demos/helloworld/
Document Length:        12 bytes

Concurrency Level:      5
Time taken for tests:   0.623 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      25200 bytes
HTML transferred:       1200 bytes
Requests per second:    160.63 [#/sec] (mean)
Time per request:       31.127 [ms] (mean)
Time per request:       6.225 [ms] (mean, across all concurrent requests)
Transfer rate:          39.53 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   30  10.5     30      59
Processing:     0    1   5.7      0      38
Waiting:        0    1   5.7      0      37
Total:         17   31   9.3     30      59

Percentage of the requests served within a certain time (ms)
  50%     30
  66%     33
  75%     36
  80%     38
  90%     45
  95%     49
  98%     58
  99%     59
 100%     59 (longest request)

------------------------------------YII 1.1.8---------------------------------
Benchmarking localhost (be patient).....done

Server Software:        Apache/2.2.20
Server Hostname:        localhost
Server Port:            80

Document Path:          /frameworks/yii/1.1.8/demos/helloworld/
Document Length:        12 bytes

Concurrency Level:      5
Time taken for tests:   0.636 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      25200 bytes
HTML transferred:       1200 bytes
Requests per second:    157.17 [#/sec] (mean)
Time per request:       31.812 [ms] (mean)
Time per request:       6.362 [ms] (mean, across all concurrent requests)
Transfer rate:          38.68 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   30   9.9     29      58
Processing:     0    1   6.0      0      38
Waiting:        0    1   6.0      0      38
Total:         19   31   8.4     29      58

Percentage of the requests served within a certain time (ms)
  50%     29
  66%     35
  75%     38
  80%     40
  90%     42
  95%     47
  98%     51
  99%     58
 100%     58 (longest request)

------------------------------------ZEND 1.11---------------------------------
Benchmarking localhost (be patient).....done

Server Software:        Apache/2.2.20
Server Hostname:        localhost
Server Port:            80

Document Path:          /frameworks/zend/public/
Document Length:        12 bytes

Concurrency Level:      5
Time taken for tests:   1.519 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      25200 bytes
HTML transferred:       1200 bytes
Requests per second:    65.84 [#/sec] (mean)
Time per request:       75.939 [ms] (mean)
Time per request:       15.188 [ms] (mean, across all concurrent requests)
Transfer rate:          16.20 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   72  21.1     74     120
Processing:     0    3  13.1      0      93
Waiting:        0    2  12.8      0      93
Total:         44   75  17.3     75     121

Percentage of the requests served within a certain time (ms)
  50%     75
  66%     82
  75%     88
  80%     93
  90%     99
  95%    103
  98%    108
  99%    121
 100%    121 (longest request)