Bartłomiej Krzywania

Bartłomiej Krzywania Deweloper Java, PHP,
itp...

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

Mam roczne doświadczenie z Javą Enterprise. Od niedawna rozpocząłem swoją przygodę z językiem PHP. Pracuję obecnie nad swoim pierwszym projektem w PHP. Jest to też pierwszy projekt webowy, który będzie stworzony samodzielnie od zera.

Zdradzę, że chodzi tutaj o narzędzie do zarządzania sprzedażą na Allegro dla wielu użytkowników jednocześnie. Jestem w trakcie poznawania technologii PHP-owych. Interesuje mnie łatwość stworzenia aplikacji oraz ich późniejszego rozwijania i zarządzania nimi. Szukam sptrawdzonych standardów. Okazuje się, że wiele z pośród dobrych zwyczajów rozwijania projektów webowych (lub enterprise) jest zależna co najwyżej od konkretnych cech wybranych technologii, niż jednej szczególnej technologii. Przyłapuję się na tym iż na samym starcie z PHP próbuję już zastosować te "fajne" rozwiązania z Javy (np OOP, MVC, ORM, warstwa logowania, transakcyjna).

DO SEDNA: Dowiedziałem się, że każde wywołanie skryptu PHP jest u podstawy bezstanowe. PRZEDEWSZYSTKIM kod każdej klasy,procedury jest zapominany i ładowany od nowa przy każdym wywołaniu.

ROZUMIEM, że przy większej ilości kodu to może być szalenie nieefektywne. Czy mam rację?

Czy istnieją METODY aby jednak zapamiętać raz wczytany kod? Czy trzeba by przygotować specjalnie moduł (w C/C++) z paczką kodu? Czy Memcached dałoby radę (czy ono używa się tylko do danych) ? Czy może PHP pod serwer ma wbudowany mechanizm cache-owania kodu?


Dziękuję z góry za pomocne rady.

Pozdrawiam

Bartek

konto usunięte

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

Generalnie masz racje, w przeciwienstwie do Javy, aplikacje w PHP nie sa deployowane na serwery aplikacyjne, tylko przy kazdym hicie leci wszystko od nowa. Jesli chodzi o cache to polecam: http://php.net/manual/en/book.apc.php

konto usunięte

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

Memcache raczej nie nadaje się do takich rzeczy. Jak już, to do cache'owania danych.

Do cacheowania prekompilowanego kodu masz np. tak jak wspomniał Marcin APC, albo eAccelerator.
Osobiście używame tego drugiego i wydajność wzrasta mniej więcej od 50% do 300% w zależności od wielkości skryptów.
Artur Świerc

Artur Świerc Programista PHP/Java

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

Mam pytanie, skoro masz już jakieś doświadczenie w JEE, to po co teraz iść w stronę php, nie lepiej dalej się rozwijać w jednej technologii? Większe zarobki Cie nie motywują? :P

konto usunięte

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

Bartłomiej Krzywania:
Mam roczne doświadczenie z Javą Enterprise. Od niedawna rozpocząłem swoją przygodę z językiem PHP. Pracuję obecnie nad swoim pierwszym projektem w PHP. Jest to też pierwszy projekt webowy, który będzie stworzony samodzielnie od zera.

Cześć

Jeśli chcesz pisać w PHP możesz zerknąć na

http://www.caucho.com/resin-3.0/quercus/

Jest to implementacja php na JVM z całym(chyba) dobrodziejstwem inwentarza.

pzdr
Michał Stanowski

Michał Stanowski magik od php i
wordpress

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

Obawa przed tym, że wszystkie klasy ładowane są za każdym razem trochę jest nad wyraz... za pewne ze względu na Twoje poprzednie doświadczenie z Java.

PHP dobrze sobie z tym radzi i nawet brzy bardzo dużej ilości klas tak łatwo go nie zapchasz :] Ew. może w wersji produkcyjnej umieść wszystkie podstawowe klasy w jednym pliku, a jakieś wspólnie dołączane w plikach pobocznych.

Inkludowanie na raz (i za każdym razem) np. 1000 plików klas na pewno zwolni prace całości.

konto usunięte

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

Ja osobiscie nie doradzalbym umieszczac kilka klas w jednym pliku... Nazwa i umiejscowienie pliku raczej powinno konkretnie sugerowac nazwe klasy.

A includowanie 1000 plikow zwolni prace(kompilacje) nawet w C++ :)
Osobiscie doradzalbym raczej uzywanie require_once i korzystanie bez ogrodek z calego dobrodziejstwa obiektowego. Przy duzym ruchu wspomniane acceleratory spelniaja sie znakomicie.
Przy ogromnym ruchu i tak uzywa sie load balancerow :)

Swoja droga tez mnie zastanawia to co wspomnial Artur kilka postow wczesniej :)Marcin Olichwirowicz edytował(a) ten post dnia 06.11.09 o godzinie 11:09
Bartłomiej Krzywania

Bartłomiej Krzywania Deweloper Java, PHP,
itp...

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

Artur Świerc:
Mam pytanie, skoro masz już jakieś doświadczenie w JEE, to po co teraz iść w stronę php, nie lepiej dalej się rozwijać w jednej technologii? Większe zarobki Cie nie motywują? :P

Otóż pracuję nad własnym projektem (z dwoma innymi osobami). Początkowo do własnych celów, a potem na sprzedaż (idealnie jako jedna usługa zintegrowana m.in. z hostingiem). Jeśli ten wypali, pójdę za ciosem i będę dalej "szukał szczęścia" na własną rekę. TO znaczy nie będę szukał zatrudnienia. Ewentualnie zlecenia. Natomiast idealnie własny produkt.

Zdecydowałem, że ten projekt jest na tyle prosty, iż bardziej opłaci się użyć PHP niż Java.

konto usunięte

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

mysle, ze moze Cie zainteresowac ten post, jest w nim sporo keywords, ktore warto dalej zglebiac

http://blog.facebook.com/blog.php?post=2356432130
Alan Gabriel B.

Alan Gabriel B. Software Engineer,
IFX

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

Marcin Olichwirowicz:
Ja osobiscie nie doradzalbym umieszczac kilka klas w jednym pliku... Nazwa i umiejscowienie pliku raczej powinno konkretnie sugerowac nazwe klasy.

Jedno nie wyklucza drugiego. Symfony i Agavi oferują wsparcie dla kompilowania takich zbiorczych plików z już istniejących.
A includowanie 1000 plikow zwolni prace(kompilacje) nawet w C++ :)
Osobiscie doradzalbym raczej uzywanie require_once i korzystanie bez ogrodek z calego dobrodziejstwa obiektowego. Przy duzym ruchu wspomniane acceleratory spelniaja sie znakomicie.
Przy ogromnym ruchu i tak uzywa sie load balancerow :)

Ja osobiście w ogóle zrezygnowałbym z includowania klas poprzez include(), require() etc. Po to są mechanizmy autoloadera, żeby z Nich korzystać. Narzut troszkę większy, ale przy wykorzystaniu wspomnianej wcześniej techniki wszystko wychodzi na plus.

konto usunięte

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

Przeciez w autoloaderze tez musisz uzyc require wiec jaka tu mowa o rezygnowaniu z niego... Chyba ze myslimy o innych autoloaderach :)
Alan Gabriel B.

Alan Gabriel B. Software Engineer,
IFX

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

Bo dla mnie wynika ztekstu, że chodzi Tobie o sztywne używanie komend ładujących pliki w kodzie, a tego właśnie można uniknąć używając autoloaderów.
Coś jak w ZF, gdzie można spotkać kod a'la:

if($error) {
require_once("CustomException.class.php");
throw new CustomException;
}
Alan Gabriel B. edytował(a) ten post dnia 06.11.09 o godzinie 14:42

konto usunięte

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

Oczywiscie, ze przeczytalem.
Po prostu zle sie wyraziles. Chodzilo Ci o zrezygnowanie z jawnego require/include. I z tym sie zgadzam.
A co do ZF to ma on tez autoloader z ktorego z reszta zawsze korzystam.
Alan Gabriel B.

Alan Gabriel B. Software Engineer,
IFX

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

Doszliśmy zatem do jako takiej zgody :)

Możesz mi wyjaśnić zatem co popchnęło developerów ZF do stworzenia mechanizmu autoloadera (który notabene był kiedyś - nie wiem jak jest teraz - bardzo prosty i nieelastyczny) a zrezygnowanie z niego w samej bibliotece?
Dla mnie się to kupy nie trzyma. Kiedyś był argument o elastyczności i małych zależnościach pomiędzy komponentami, czyli użyj Zend_DB, ale nie musisz używać Zend_Autoloader. Teraz przy wielkości tej biblioteki te argumenty przestają być valid. Szczególnie spoglądając na devów eZComponents, którzy jakoś sobie z tym poradzili.

konto usunięte

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

Trudno jest mi odpowiedziec na to pytanie, byc moze to kontynuacja zamierzonej drogi w sensie - tworzenia komponentow a nie strickte frameworka (frameworka w rozumieniu wiekszosci developerow).

Wydaje mi sie ze goscie z ZF wychodza z zalozenia: dajmy im mase odseparowanych narzedzi, niech sobie sami porobia z nich piaskownice jaka im pasuje.
Piotr Maksymilian Socha

Piotr Maksymilian Socha php architect, zce
php, zce zf, mysql,
etc...

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

Alan Gabriel Bem:
wlasnie po to sa konstrukcje w kodzie w stylu

if($error) {

require_once("CustomException.class.php");

throw new CustomException;

}


zebys nie musial uzywac autoloadera, a jezeli nie wiesz jak teraz wyglada autoloader, to znaczy ze nie patrzyłeś na ZF przynajmniej z pół roku ( co troche umniejsza siłe arugmentów ), czyli od wersji 1.8
Bartłomiej Krzywania

Bartłomiej Krzywania Deweloper Java, PHP,
itp...

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

Ciekawe rzeczy o tych autoloaderach i narzędziach cache-ujących kod piszecie :) Co do autoloadera to już zastosowałem to w praktyce :> Pomijając fakt, że użyty przeze mnie Doctrine korzysta z tego mechanizmu. Bardzo prosty, a jaki użyteczny...
Alan Gabriel B.

Alan Gabriel B. Software Engineer,
IFX

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

Piotr Maksymilian Socha:
wlasnie po to sa konstrukcje w kodzie w stylu
[...]
zebys nie musial uzywac autoloadera, a jezeli nie wiesz jak teraz wyglada autoloader, to znaczy ze nie patrzyłeś na ZF przynajmniej z pół roku ( co troche umniejsza siłe arugmentów ), czyli od wersji 1.8

Żebym nie musiał? To śmieszne, bo po rozrośnięciu się ZF ma on tyle zależności pomiędzy komponentami, że osobiście nie widzę sensu w utrzymywaniu Ich poprzez statyczne include_once - w dodatku przy Ich zbyt dużej liczbie są mniej wydajne niż identyczny kod bez nich, ale z dobrym autoloaderem.
Ponadto nigdzie, ale to nigdzie nie widziałem przykładu integracji pojedynczego komponentu bez rejestrowania autoloadera, czy to w wiekowym Jobeecie, czy w niedawnych slajdach Fabiena Potenciera poruszającego ten temat.
Prędzej, czy później developerzy ZF dojdą do Tego samego wniosku co Ci od eZComponents, czy jakiegokolwiek innego nieźle napisanej biblioteki/frameworka/projektu: autoloader powinien być w jakimś stopniu obowiązkowy i tyle.
Bartłomiej Krzywania

Bartłomiej Krzywania Deweloper Java, PHP,
itp...

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

Dzięki za użyteczne komentaże!

Pozdrawiam
Alan Gabriel B.

Alan Gabriel B. Software Engineer,
IFX

Temat: W jakich zastosowaniach PHP jest/może być efektywne?

Alan Gabriel B.:
Prędzej, czy później developerzy ZF dojdą do Tego samego wniosku co Ci od eZComponents, czy jakiegokolwiek innego nieźle napisanej biblioteki/frameworka/projektu: autoloader powinien być w jakimś stopniu obowiązkowy i tyle.

Dzisiaj wpadłem przypadkowo na roadmap dla ZF 2.0 i chciałbym jedynie rzec "a nie mówiłem?" :)
Autoload-only. We will move to using autoloading throughout the framework. This solves a number of performance issues, as well as simplifies coding dependencies (particularly exceptions).
>Alan Gabriel B. edytował(a) ten post dnia 15.11.09 o godzinie 23:30

Następna dyskusja:

Dwa interpretery php a wyda...




Wyślij zaproszenie do