$30 off During Our Annual Pro Sale. View Details »

Phalcon - Eklenti olarak sunulan PHP çatısı - PHP Günleri 2013#1

Phalcon - Eklenti olarak sunulan PHP çatısı - PHP Günleri 2013#1

PHP Günleri 2013#1 - İstanbul Nişantaşı Üniversitesi

Hidayet Doğan

May 25, 2013
Tweet

More Decks by Hidayet Doğan

Other Decks in Programming

Transcript

  1. Phalcon
    Eklenti olarak sunulan PHP çatısı

    View Slide

  2. Merhaba!
    Fotoğraf: Onur Canalp
    1995 Tübitak Bilgisayar Kulubü
    Linux, BASIC, C, Perl
    1998 Merhaba PHP!
    1999 İş Hayatı: Yazılım + Sistem
    2000 Türkiye PHP Grubu
    (php.org.tr)
    2013 PHP Geliştiricileri Derneği
    (pgd.org.tr)
    http://hi.do
    @hdogan

    View Slide

  3. Çatı (Framework) nedir?
    Bir veya birden fazla konsept, yaklaşım dahilinde yazılım
    geliştirme sürecine rehberlik eden, tekrar kullanılabilir
    platformlar.
    Kod kütüphaneleri, araçlar, API

    View Slide

  4. Neden çatılar?
    Standartları olan ve organize edilmiş bir altyapı sunarak projelerin
    daha kolay idame edilmesini ve daha kısa sürede geliştirilmesini
    sağlar.
    Profesyonel yazılım geliştirme sürecinde gereklidir.

    View Slide

  5. PHP nasıl çalışır?
    PHP yorumlanır, derlenmez*
    Betik her çağırıldığında tekrar yorumlanması gerekir.
    Betik her çağırıldığında (APC, Xcache, Zend Opcache gibi
    eklentiler kullanılmazsa) sözdizimi kontrol edilir ve sözdizimi
    ağacı tekrar oluşturulur.
    PHP esnek, türleri önceden belirtilmemiş (weak/loose typing)
    değişken yapısına sahiptir.

    View Slide

  6. PHP ile hazırlanmış (geleneksel)
    çatılar nasıl çalışır?
    Sınıfları ve fonksiyonları içeren birçok dosya her istekte diskten
    okunur.
    Kullanılan her dosya yorumlanır.
    Modern çatıların bazıları performansı arttırmak için geç yükleme
    ve otomatik yükleme (lazy loading - autoloading) yöntemi
    kullanır. Sadece gerekli dosyalar diskten okunur ve yorumlanır.
    Çatıya ait kodlar genellikle değişmez.

    View Slide

  7. PHP eklentileri nasıl çalışır?
    Web sunucunun yaşam döngüsü boyunca eklentiler PHP ile
    birlikte bir defaya mahsus yüklenir.
    Derlenmiş olduğu için sözdizimi kontrol edilmez ve
    yorumlanmaz.

    View Slide

  8. İyi, güzel de
    PHP
    kullanmayı
    bırakıp C mi
    ögrenelim?

    View Slide

  9. Phalcon!
    Tamamen C dili ile hazırlanmış PHP eklentisi.
    Bileşenleri bağımsızdır, sadece istenilen bileşenler kullanılabilir.
    Veritabanlarına erişimde performans için C dili ile hazırlanmış
    ORM içerir.
    Şablon yorumlamada performans için C ile hazırlanmış şablon
    eklentisi içerir.
    PHP iç yapısına/kaynaklarına doğruca eriştiği için çalışma süresi
    daha kısadır.

    View Slide

  10. Geleneksel Çatılarla Kıyaslama
    Geneneksel Çatılar Phalcon
    Her istekte binlerce satır kodun
    yorumlanması
    Evet Hayır
    Her istekte onlarca dosya
    yüklenmesi
    Evet Hayır
    Her istekte sınıfların,
    fonksiyonların, sabitlerin
    varlığının kontrol edilmesi
    Evet Hayır
    Düşük seviye iyileştirme Hayır Evet

    View Slide

  11. Performans Kıyaslamaları

    View Slide

  12. Merhaba Dünya!

    View Slide

  13. Kıyaslama Ortamı
    İşletim Sistemi: Mac OS X Lion 10.7.4
    Web Sunucusu: Apache 2.2.22
    PHP 5.3.15 + APC 3.1.11 (apc.stat = 0)
    İşlemci: Intel Core i5 2.04 GHz
    Hafıza: 4GB DDR3 1333 MHz
    Disk: 500GB SATA

    View Slide

  14. ab -n 1000 -c 5 http://localhost/phalcon/merhaba/dunya

    View Slide

  15. Saniyedeki İstek Sayısı
    0
    500
    1000
    1500
    2000
    2500
    3000
    Zend Laravel Symfony Fuel Kohana Yii CodeIgniter Phalcon
    2,535.82
    1,059.05
    961.28
    860.59
    729.42
    541.01
    489.03
    354.55
    İstek/Saniye

    View Slide

  16. Bir İstek İçin Geçen Süre
    0
    0.75
    1.5
    2.25
    3
    Zend Laravel Symfony Fuel Kohana Yii CodeIgniter Phalcon
    0.39
    0.94
    1.04
    1.16
    1.37
    1.85
    2.05
    2.82
    Milisaniye/İstek

    View Slide

  17. İstek Başına Kullanılan PHP
    Dosyası
    0
    10
    20
    30
    40
    50
    60
    70
    Zend Kohana Laravel Fuel Yii CodeIgniter Symfony Phalcon
    4
    18
    23
    27
    30
    46
    46
    66
    Dosya sayısı

    View Slide

  18. İstek Başına Kullanılan Hafıza
    0
    0.5
    1
    1.5
    2
    Zend Yii Symfony Laravel Kohana CodeIgniter Fuel Phalcon
    0.75
    1
    1.1
    1.25
    1.25
    1.5
    1.5
    1.75
    Hafıza (MB)

    View Slide

  19. Mikro Çatı Kıyaslaması

    View Slide

  20. Saniyedeki İstek Sayısı
    0
    1000
    2000
    3000
    Silex Slim Phalcon
    2516.74
    1134.21
    448.75
    İstek/Saniye

    View Slide

  21. Bir İstek İçin Geçen Süre
    0
    0.75
    1.5
    2.25
    3
    Silex Slim Phalcon
    0.4
    0.89
    2.23
    Milisaniye/İstek

    View Slide

  22. İstek Başına Kullanılan PHP
    Dosyası
    0
    15
    30
    45
    60
    Silex Slim Phalcon
    2
    17
    54
    Dosya sayısı

    View Slide

  23. İstek Başına Kullanılan Hafıza
    0
    0.4
    0.9
    1.3
    Silex Slim Phalcon
    0.75
    1.25
    1.25
    Hafıza (MB)

    View Slide

  24. ORM Kıyaslaması

    View Slide

  25. mysql> desc urunler;
    +--------------+------------------+------+-----+---------+----------------+
    | Field | Type | Null | Key | Default | Extra |
    +--------------+------------------+------+-----+------+-------------------+
    | id | int(10) unsigned | NO | PRI | NULL | auto_increment |
    | urun_tipi_id | int(10) unsigned | NO | MUL | NULL | |
    | ad | varchar(70) | NO | | NULL | |
    | fiyat | decimal(16,2) | NO | | NULL | |
    | aktif | char(1) | YES | | NULL | |
    +--------------+------------------+------+-----+---------+----------------+
    5 rows in set (0.00 sec)
    500 istek, anlık 10 istek

    View Slide

  26. 10 Adet Kayıt Ekleme - Süre
    0
    1
    2
    3
    4
    5
    6
    Doctrine 2 Phalcon
    2.38
    5.92
    Ekleme süresi (saniye)

    View Slide

  27. 10 Adet Kayıt Ekleme - Hafıza
    Kullanımı
    0
    1
    2
    3
    4
    5
    6
    7
    8
    Doctrine 2 Phalcon
    0.73
    7.42
    Hafıza (MB)

    View Slide

  28. 10 Adet Kayıt Getirme - Süre
    0
    0.5
    1
    1.5
    2
    2.5
    3
    Doctrine 2 Phalcon
    0.47
    2.22
    Getirme süresi (saniye)

    View Slide

  29. 10 Adet Kayıt Getirme - Hafıza
    Kullanımı
    0
    2
    4
    6
    8
    10
    Doctrine 2 Phalcon
    0.77
    9.98
    Hafıza (MB)

    View Slide

  30. Raspberry Pi

    View Slide

  31. Raspberry Pi
    İşletim Sistemi: Raspbian (Debian 7)
    Web Sunucusu: Nginx 1.2.1
    PHP 5.4.4 (FPM)
    İşlemci: ARMv6 700 MHz
    Hafıza: 512MB (480MB)
    Disk: 4GB Class 6 SDHC (Okuma: 19MB/s Yazma: 20MB/s)

    View Slide

  32. Saniyedeki İstek Sayısı
    0
    14
    28
    42
    56
    70
    Laravel Yii CodeIgniter Phalcon
    67.38
    5.40
    3.96
    2.89
    İstek/Saniye

    View Slide

  33. Bir İstek İçin Geçen Süre
    0
    100
    200
    300
    400
    Laravel Yii CodeIgniter Phalcon
    14.84
    185.24
    252.61
    345.58
    Milisaniye/İstek

    View Slide

  34. Özellikleri
    Model View Controller
    Mikro Çatı
    Dependency Injection/Container
    Önbellek (APC, Memcached, MongoDB, dosya)
    Oturum yönetimi, filtreleme, ayarlar, sistem günlükleri (log)
    Şablonlar (PHP ve Volt)
    ACL (Access Control List)

    View Slide

  35. Özellikleri
    ORM (Object Relational Mapper)
    MySQL, PostgreSQL, Oracle, SQLite
    İlişkiler (one-to-one, one-to-many, many-to-many, belongs-to)
    Davranışlar (Behaviors)
    Olaylar (Events)
    Hidrasyon (Hydration)
    Transaction

    View Slide

  36. Özellikleri
    ODM (Object Document Mapper) - MongoDB
    Üst bilgi notları (Annotations)
    HTML, Form yardımcısı
    Komut satırı arayüzü (CLI)
    Unit Test (PHPUnit)
    Debug (Xdebug)

    View Slide

  37. Problemler
    Yaygınlık (Paylaşımlı barındırma,
    PaaS)
    Güncelleme
    Kritik hata ayıklama

    View Slide

  38. Sorular?

    View Slide

  39. Teşekkürler!
    http://phalconphp.com
    http://github.com/phalcon
    @phalconphp
    http://github.com/hdogan
    http://tr.linkedin.com/in/hdogan
    http://speakerdeck.com/hdogan
    Hidayet Doğan
    Phalcon

    View Slide