Archiwum dla September, 2008

Kapitalne video pokazujące z jakimi problemami musi sobie radzić programista przez całe życie.

category programowanie, życie programisty Komentarze (2)

Zadanie było jasno określone: po dwukrotnym kliknięciu radiobuttona miał się on odznaczać. Czyli miał się zachowywać dokładnie jak checkbox. Po krótkich poszukiwaniach odnalazłem ten plugin - wszystko fajnie, radiobutton się odznacza, ale przy submicie formularza i tak pamiętana jest stara wartość zaznaczonego radiobuttona :/

Zgodnie z zasadą - jeżeli coś ma być zrobione dobrze, zrób to sam - napisałem prosty plugin, który przy dwukrotnym kliknięciu odznacza radiobutton, a przy wysyłaniu formularza usuwa wcześniej nadaną wartość.

/**
 * Behave like Checkbox
 *
 * @autor Hubert Marzec
 * @link dzbanyit.pl
 */
(function(){
jQuery.fn.likeCheckbox = function() {
    return $(this).each(function(){
        $(":radio", this).dblclick(function(){
            $(this).clone().hide().val('').insertAfter(this);
        });
    });
}
})(jQuery);

Jest to najprostsza wersja, bez limitu na liczbę tworzonych klonów- uznałem to za zbędne. A działanie jest bardzo proste, tworzymy klon naszego radiobuttona, ustawiamy pustą wartość, ukrywamy i wstawiamy za oryginalnym obiektem. Testowane pod IE 6,7 oraz FF 2,3.

category javascript, jquery Komentarze (0)

Zend Framework to oczywiście najlepszy framework php ;) ale ma bardzo duże problemy co do wydajności. Przy prostych stronach można to jeszcze przeżyć, ale dla aplikacji, które są przewidziane na duże obciążenie staje się to już drzazgą w tyłku.

Na pierwszy ogień pójdzie funkcja Zend_Loader::registerAutoload() - korzystanie z niej jest bardzo wygodne, ale wpływa bardzo negatywnie na szybkość i ilość pamięci wykorzystywanej przez skrypt.

Przeprowadźmy test

Aby test miał więcej wspólnego z rzeczywistością zostanie wykonany na już przygotowanym frameworka do pracy. Z grubsza będą to:

  • Inicjacja i sprawdzenie autoryzacji na podstawie Zend_Acl (lista praw trzymana w pliku php)
  • Wykryciu i ustawieniu odpowiedniego locale (Zend_Locale)
  • Ustawienia widoku
  • Nawiązanie połączenia z bazą danych MySql
  • Ustawieniu routes na podstawie plików ini
  • Inicjacji Zend_Mail_Transport_Smtp

Akcja indexAction() jest pusta, nie jest wykonywane żadne zapytanie do bazy danych. Do profilowania kodu użyłem zmodyfikowanego Profiler’a z Magento Ecommerce. Kod został podzielony na odpowiednie bloki: application, setup, dispatch, action. Na mojej maszynie mam:

  • PHP 5.2.4
  • XDebug 2
  • Apache 2
  • MySql 5

Samych parametrów mojego komputera nie będę podawał, bo nie ma to sensu, nie będziemy zwracać uwagi na same liczby, a raczej na różnice procentowe.

zf_autoload_without_require_mini.png

Nas najbardziej interesuje pierwszy rząd  ‘Application’ obejmująca całą aplikacje. Najbardziej przykuwającą oko rzeczą jest pożerana pamięć 5MB.

Teraz przygotujemy plik require.php, który dołączamy jak najwcześniej w bootstrapie. Plik zawiera dołączenia wszystkich klas aplikacji (Zend i nasze własne), które były potrzebne do uruchomienia strony testowej.

require_once 'Zend/Session.php';
require_once 'Zend/Session/Abstract.php';
require_once 'Zend/Session/Namespace.php';
require_once 'Zend/Session/SaveHandler/Interface.php';
require_once 'Zend/Session/Exception.php';
require_once 'Zend/Exception.php';
require_once 'Zend/Acl/Role/Interface.php';
require_once 'Zend/Config.php';
itd...

zf_autoload_with_require_mi.png

Pomimo prawie 3-krotnie zmniejszonego czasu (0.25 vs 0.09), pamięć wykorzystana przez skrypt zmalała z 5 MB do 326 KB, to ponad 10-krotnie mniej!!! Nawet sobie nie wyobrażacie jaka to ulga dla serwer.

Listę plików ładowanych podczas działania aplikacji można otrzymać dzięki informacji jakie klasy zostały załadowane (w ZF jedna klasa to jeden plik), a tę informacje dostajemy dzięki funkcji get_declared_classes().

Wniosek

Na etapie tworzenia aplikacji spokojnie możemy ze względu na wygodę używać Zend_Loader::registerAutoload(), zaś już w czasie wdrażana zdecydowanie sugeruję rozwiązanie podobne do mojego.

category php, programowanie, zend framework Komentarze (8)