Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zasady pisania na forum Pro

Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.

> Zend API
kwiateusz
post 5.06.2007, 16:06:49
Post #1


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




Tak więc zaspokajając nospora założę temat odnośnie zend api który został zgłoszony przez cicika

Cytat(cicik @ 12.04.2007, 22:09:56 ) *
Ja bym chciał podyskutować o Zend API.
Konkretnie o umieszczaniu części lub całości logiki naszych aplikacji w formie rozszerzenia do PHP.


Zapraszam do dyskusji.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
sobieh
post 14.06.2007, 12:14:35
Post #2





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 28.10.2004

Ostrzeżenie: (0%)
-----


Serializacja zachowa tylko zmienne i stale objektu.
Nie zachowa Metod wiec to jest bez sensu tutaj.

Moze lepszym rozwiazaniem bylo by napisanie extension pozwalajacego
na uzywanie PreCompiled kodu tak jak w C++ sa OBJ. To bylo by bardzo
dobre rozwiazanie tworzac takie PPO (php precompiled object ... tak to bede dalej nazywal)

Wiazalo by sie to ze spora modyfikacja kodu samego PHP ale wydajnosc by podskoczyla kolosalnie.
Sam brak parsowania PHP przy uruchamianiu skryptu to duzo.

W sumie wystarczylo by zlapac i zapisac do pliku to co wypluje kompilator po zparsowaniu i kompilacji pliku PHP
i pozniej ten parser omijac w przypadku uruchamiania PPO. To bylby taki cache tylko duzo
bardziej wydajny. Mozna by nawet wyciagnac sam parser z PHP aby tworzyl PPO z PHP.
Mozna by nawet te PPO trzymac w pamieci. PHP po zparsowaniu i kompilacji calego kodu
linkuje go na swoj sposob i uruchamia a my omineli bysmy parser i kompilator.

Ten post edytował sobieh 14.06.2007, 12:47:42
Go to the top of the page
+Quote Post
cicik
post 15.06.2007, 21:35:51
Post #3





Grupa: Zarejestrowani
Postów: 219
Pomógł: 5
Dołączył: 18.07.2006
Skąd: Piekary Śląskie

Ostrzeżenie: (0%)
-----


Cytat(sobieh @ 14.06.2007, 13:14:35 ) *
W sumie wystarczylo by zlapac i zapisac do pliku to co wypluje kompilator po zparsowaniu i kompilacji pliku PHP
i pozniej ten parser omijac w przypadku uruchamiania PPO.


Też o czymś takim myślałem, to by było najlepsze. Trzeba by się pobawić w coś polegającego na wyczajeniu jak PHP z kodu PHP robi wykonywalne binarki. Przyznam się, że troche odstrasza mnie to, że PHP jest napisane w C. Wolałbym C++.


Cytat
Poza tym w manualu jest coś takiego: PHP bytecode compiler. Nie chodziło wam o to?


a na górze czerwony pogrubiony napis "This extension is EXPERIMENTAL."

Cytat
Twoj problem mozna troche inaczej zrealizowac. 1 uruchomienie zbieranie klass do jakiegos wspolnego pliku gdzie includy nie beda do kazdej akcji i plikow uruchamiane.


Nie chodzi o wyeliminowanie includów tylko procesu interpretacji kodu.

EDIT:
Ta funkcja: http://pl.php.net/manual/en/function.bcomp...-write-file.php wygląda całkiem obiecująco, a zwłaszcza przykład. Może w najbliższym czasie zrobię jakieś testy czy to działa.

EDIT:
Pierwsze wyniki. Nie może być za łatwo.
Funkcja bcompiler_write_file zwraca fatal error, jeżeli plik, który chcemy skompilować zawiera definicje funkcji/klas już wczytanych przez normalne wykonanie skryptu. Nie wiem czemu ale widocznie bcompiler_write_file chce normalnie "zaincludować" konwertowany plik.

EDIT:
Lipa niestety. Plik skompilowany i oryginalny nie wykonują się tak samo.
Mam klasę SQL_sql. Ona zawiera pole protected i metode public, która z niego korzysta.
Mam klasę SQL_mysqli, która dziedziczy po SQL_sql. Wywołuję jej metodę odziedziczoną po klasie rodzicu i otrzymuję:

Fatal error: Cannot access protected property SQL_mysqli::$tabele_query in F:\strony\php-art\klasy\sql\silniki\sql.php on line 170

EDIT:
Dziś rano zacząłem testować rozszerzenie APC.
Rozszerzenie to w pamięci RAM cachuje bytecode skompilowanego skryptu.
Zapowiada się dość obiecująco. Skrypt przyspieszył około trzech razy.

EDIT:
Niestety pierwsze badania APC były chyba dziełem przypadku po dłuższych obserwacjach nie da się zauważyć jakiegoś przyspieszenia skryptów. Może gdyby serwer był bardziej obciążony...
Ktoś testował?

Ten post edytował cicik 16.06.2007, 09:54:33


--------------------
CMS dla Twojej firmy
Wojciech Małota
Go to the top of the page
+Quote Post
Sedziwoj
post 16.06.2007, 15:03:00
Post #4





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(cicik @ 15.06.2007, 22:35:51 ) *
Lipa niestety. Plik skompilowany i oryginalny nie wykonują się tak samo.
Mam klasę SQL_sql. Ona zawiera pole protected i metode public, która z niego korzysta.
Mam klasę SQL_mysqli, która dziedziczy po SQL_sql. Wywołuję jej metodę odziedziczoną po klasie rodzicu i otrzymuję:

Fatal error: Cannot access protected property SQL_mysqli::$tabele_query in F:\strony\php-art\klasy\sql\silniki\sql.php on line 170

A może to coś pomoże:
Cytat
// you must write DB_common before DB_mysql, as DB_mysql extends DB_common.

Przy bcompiler-write-class" title="Zobacz w manualu PHP" target="_manual


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
cicik
post 16.06.2007, 17:04:18
Post #5





Grupa: Zarejestrowani
Postów: 219
Pomógł: 5
Dołączył: 18.07.2006
Skąd: Piekary Śląskie

Ostrzeżenie: (0%)
-----


Cytat(Sedziwoj @ 16.06.2007, 16:03:00 ) *


Ale ja używam bcompiler_write_file. I powinno działać. Ktoś już wcześniej zgłosił ten bug na PECLu.

Cytat(Ludvik @ 16.06.2007, 15:34:55 ) *
APC czy rozwiązania podobne (ionCube PHP Acceleratior, Zend Optimizer) są powszechnie stosowane przez providerów. Ja zauważyłem kilkukrotne przyspieszenie u siebie, jak włączyłem kiedyś z ciekawości.


Ja jakoś nie zaobserwowałem, skonfigurowałem APC, ściągnąłem APC GUI, pokazuje, że kod jest schachowany.
Ale pomiary wykonane przy użyciu APD nie wykazują zbytnich różnic. APC GUI pokazuje, że odwołanie zostało przechwycone przez APC.

EDIT:
Przyznaję się do błędu. Miałem błąd w php.ini i dlatego APC nie działało. Jednak dziwi mnie jedna rzecz... dlaczego mimo schachowanego kodu wywołuje mi się funkcja __autoload ? Skoro kod jest w pamięci to nie powinna sie wywoływać.

EDIT:
Ok. Wreszcie wyczaiłem jak to działa. To nie jest tak, że jak sie po raz pierwszy includuje plik z klasą to apc zapamiętuje definicję klasy tylko on zapamiętuje cały plik i przy drugim includzie zamiast ściągać go z dysku to jest zwracany z ramu już w postaci bytecode. Trochę to bez sensu bo musze wywoływać includy ciągle (i dlatego też się __autoload wywołuje). Ciągle tylko nie obserwuję wzrostu wydajności.

Ten post edytował cicik 16.06.2007, 18:14:12


--------------------
CMS dla Twojej firmy
Wojciech Małota
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.04.2024 - 16:53