Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Phalcon - Eklenti olarak sunulan PHP çatısı

Phalcon - Eklenti olarak sunulan PHP çatısı

XVII. Türkiye'de İnternet Konferansı - Anadolu Üniversitesi, Eskişehir

Hidayet Doğan

November 07, 2012
Tweet

More Decks by Hidayet Doğan

Other Decks in Programming

Transcript

  1. Phalcon
    Eklenti olarak sunulan PHP çatısı
    Friday, November 9, 12

    View Slide

  2. Çatı 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
    Friday, November 9, 12

    View Slide

  3. 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.
    Friday, November 9, 12

    View Slide

  4. 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 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.
    Friday, November 9, 12

    View Slide

  5. 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
    (lazy loading - autoload) yöntemi kullanır. Sadece gerekli dosyalar
    diskten okunur ve yorumlanır.
    Çatıya ait kodlar genellikle değişmez.
    Friday, November 9, 12

    View Slide

  6. 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.
    Friday, November 9, 12

    View Slide

  7. Hız
    Friday, November 9, 12

    View Slide

  8. Fibonacci 40
    0
    80
    160
    240
    320
    400
    C Java 1.6 Ruby 1.9 Lua 5.1 PHP 5.4 Python 2.7 Perl 5.12 PHP 5.3
    377.19
    161.2
    77.9
    77.7
    40.7
    37.4
    1.3
    0.2
    Saniye
    Friday, November 9, 12

    View Slide

  9. Fibonacci 40
    0
    80
    160
    240
    320
    400
    C Java 1.6 Ruby 1.9 Lua 5.1 PHP 5.4 Python 2.7 Perl 5.12 PHP 5.3 PHP Eklenti
    0.79
    377.19
    161.2
    77.9
    77.7
    40.7
    37.4
    1.3
    0.2
    Saniye
    Friday, November 9, 12

    View Slide

  10. Hız neden önemli?
    Google: Yarım saniye gecikme = %20 ile %25 arası daha az trafik
    Bing: 1 saniye gecikme = %2.8 daha az gelir, 2 saniye gecikme =
    %4.3 daha az gelir
    Yahoo!: 0.4 saniye gecikme = %5 ile %9 arası daha az trafik
    Mozilla: İndirme sayfasının 2.2 saniye hızlanması = %15.4 daha
    fazla indirme
    Friday, November 9, 12

    View Slide

  11. Hız neden önemli?
    Kullanıcıların %47’si bir sayfanın açılma süresini 2 saniyenin
    altında bekler.
    Kullanıcıların %40’ı sayfa 3 saniyeden daha uzun sürede açılıyorsa
    o sayfayı terkeder.
    Friday, November 9, 12

    View Slide

  12. İyi, güzel de
    PHP
    kullanmayı
    bırakıp C mi
    ögrenelim?
    Friday, November 9, 12

    View Slide

  13. 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.
    PHP iç yapısına/kaynaklarına doğruca eriştiği için çalışma süresi
    daha kısadır.
    Friday, November 9, 12

    View Slide

  14. 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
    Friday, November 9, 12

    View Slide

  15. Performans Kıyaslamaları
    Friday, November 9, 12

    View Slide

  16. Merhaba Dünya!
    Friday, November 9, 12

    View Slide

  17. 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
    İşlemci: Intel Core i5 2.04 GHz
    Hafıza: 4GB DDR3 1333 MHz
    Disk: 500GB SATA
    Friday, November 9, 12

    View Slide

  18. ab -n 1000 -c 5 http://localhost/phalcon/merhaba/dunya
    Friday, November 9, 12

    View Slide

  19. Saniyedeki İstek Sayısı
    0
    500
    1000
    1500
    2000
    2500
    3000
    Zend Laravel Symfony Fuel Kohana Yii CodeIgniter Phalcon
    2386.74
    862.58
    762.55
    727.07
    568.41
    541.01
    424.97
    324.02
    İstek/Saniye
    Friday, November 9, 12

    View Slide

  20. Bir İstek İçin Geçen Süre
    0
    1
    2
    3
    4
    Zend Laravel Symfony Fuel Kohana Yii CodeIgniter Phalcon
    0.42
    1.16
    1.17
    1.37
    1.76
    1.85
    2.35
    3.09
    Saniye/İstek
    Friday, November 9, 12

    View Slide

  21. İ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ı
    Friday, November 9, 12

    View Slide

  22. İ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)
    Friday, November 9, 12

    View Slide

  23. Mikro Çatı Kıyaslaması
    Friday, November 9, 12

    View Slide

  24. Saniyedeki İstek Sayısı
    0
    1000
    2000
    3000
    Silex Slim Phalcon
    2516.74
    1134.21
    448.75
    İstek/Saniye
    Friday, November 9, 12

    View Slide

  25. Bir İstek İçin Geçen Süre
    0
    0.75
    1.5
    2.25
    3
    Silex Slim Phalcon
    0.4
    0.89
    2.23
    Saniye/İstek
    Friday, November 9, 12

    View Slide

  26. İstek Başına Kullanılan PHP
    Dosyası
    0
    15
    30
    45
    60
    Silex Slim Phalcon
    2
    17
    54
    Dosya sayısı
    Friday, November 9, 12

    View Slide

  27. İ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)
    Friday, November 9, 12

    View Slide

  28. ORM Kıyaslaması
    Friday, November 9, 12

    View Slide

  29. 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
    Friday, November 9, 12

    View Slide

  30. 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)
    Friday, November 9, 12

    View Slide

  31. 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)
    Friday, November 9, 12

    View Slide

  32. 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)
    Friday, November 9, 12

    View Slide

  33. 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)
    Friday, November 9, 12

    View Slide

  34. Özellikleri
    PSR-0 uyumlu sınıf yükleyici (Phalcon\Loader)
    Model View Controller
    Mikro Çatı
    Dependency Injection (Bağımlılık enjeksiyonu/zerki)
    Önbellek (APC, Memcached, dosya)
    Oturum yönetimi, filtreleme, ayarlar, sistem günlükleri (log)
    Şablonlar (PHP ve C ile hazırlanmış Volt)
    Friday, November 9, 12

    View Slide

  35. Özellikleri
    ORM (Object Relational Mapper)
    MySQL
    PostgreSQL
    SQLite
    İlişkiler (one-to-one, one-to-many, many-to-many, belongs-to)
    Doğrulayıcılar (validators)
    Olaylar (beforeSave, afterSave)
    MongoDB
    Friday, November 9, 12

    View Slide

  36. Yol Haritası
    Bileşen arayüzleri (interfaces)
    Veritabanı destekli oturum yönetimi
    Kullanıcı doğrulama (authentication)
    Mail!
    Friday, November 9, 12

    View Slide

  37. Kimler?
    Andres F. Gutierrez (Kolombiya)
    Eduar Carvajal Diaz (Kolombiya)
    Nikolaos Dimopoulos (ABD)
    Kenji Minamoto (Japonya)
    Wojtek Gancarczyk (Almanya)
    Marcin Wawrzyniak (Polonya)
    Hidayet Doğan (Türkiye)
    Friday, November 9, 12

    View Slide

  38. Sorular?
    Friday, November 9, 12

    View Slide

  39. Teşekkürler!
    http://phalconphp.com
    http://github.com/phalcon
    Twitter @phalconphp
    http://hi.do
    http://github.com/hdogan
    Twitter @hdogan
    Friday, November 9, 12

    View Slide