Witam.
Od jakiegoś czasu jako firma realizujemy w miarę duże projekty bazując częściowo na własnych rozwiązaniach (jak to już w świecie php bywa - każdy pisze własny framework). Interesuje mnie wasza opinia czy warto dalej brnąć w tworzenie własnych fundamentów, czy np. nie lepiej pozostawić to innym (Zend Framework, Symfony, itd). Jak wiemy w php zanim się "przetnie deskę", należy sobie stworzyć piłę, samą deskę, a najlepiej to okulary ochronne i wiele innych narzędzi. (szkoda że nie wygląda to tak jak w .net). I teraz najważniejsze to jakie wy narzędzia byście zastosowali przy tworzeniu większych serwisów internetowych (dla przykładu serwis - 50k userów na dzień dobry przeniesionych ze starej wersji - docelowo liczba może sięgnąć kilkuset tysięcy, a może i więcej).
Chodzi mi o solidną platformę - czy ktoś z was pracował na jakimś dobrym ogólnodostępnym frameworku, nad podobnej wielkości projektem i może zdradzić mi jak się zachowywał? A może inne narzędzia? Czego wy używacie przy naprawdę dużych projektach?
Ps. Zależy mi również na szybkości pracy - przy np. 4 programistach nad takim projektem koszta mają dla mnie duże znaczenie.
Pozdrawiam dzięki za sugestie.
anas
Jeżeli chodzi o naprawdę duże projekty to ja wogóle stawiam na inny język niż php mianowicie Ruby. Korzystam przy tym (co będzie odpowiedzią na Twoje pytanie) z framewroka Ruby on Rails (dobry framework to na prawdę niezastąpiona sprawa. Radzę Ci po prostu wrzucić na warsztat to co wymieniłeś i samemu określić co spełnia Twoje oczekiwania)
Jeśli idzie o szybkość działania. Ruby w połączeniu z Railsami jest bardzo wolne. Z grupy RoR, Symfony, Django najszybsze jest Django, najwolniejsze Symfony..
Co do Cake php - http://www.litfuel.net/plush/?postid=138.
Hej.
Ogólnie rzecz biorąc trudno by mi było teraz przekonać wszystkich programistów do tworzenia w Ruby - chodziło mi głównie o frameworki dla php. Co do Symfony - czy ktoś z was postawił na nim duży serwis, z dużą ilośćią odsłon - chodzi mi o porównanie jak się poszczególne fw zachowują w stosunku do obciążenia, jak działa w nich cachowanie, jak szybko się w nich pisze, testuje, etc. Między tym co jest napisane w dokumentacji, a rzeczywistością są zawsze duże rozbierzności - dlatego ciekawią mnie wasze doświadczenia.
Czy np. warto postawić na szybkie tworzenie (stosowanie narzędzi typu ORM) i późniejszcze cachowanie wyników, czy też lepiej skupić się na dobrym oprogramowaniu warstwy DAO i zapomnieć o takim rozwiązaniu?
Ja mam swoją opinię na ten temat, ale nie chciałbym wprowadzać jakichkolwiek sugestii, tylko usłyszeć waszą w miarę obiektywną ocenę.
Pozdrawia i dzięki za pomoc.
anas
nazihipi: chodzi pewnie o ten test http://wiki.rubyonrails.com/rails/pages/Framework+Performance
Wg mnie aktualnie jeśli ktoś ma już coś swojego i to się dobrze sprawuje to nie widze powodów by się przesiadać na inne rozwiązania. Zwłaszcza, że nie powalają.. a wręcz przeciwnie ma się zawsze jakieś swoje zastrzeżenia do nich.
Wiele osób zachwala Cake php, ale jak już pisałem nie raz dla mnie ten framework od strony kodu jest nie do zaakceptowania. Symfony.. przeglądałem jego możliwości, wszystko ładnie wygląda jak się robi schematyczne rzeczy.. ale u mnie w pracy zawsze są jakieś odchyły i żadko kiedy wygląda to tak prosto jak na przedstawionych tam przykładach.
Stawiam na swoje rozwiązanie z uwagi na to, że wiem jak chce tworzyć aplikacje, jeśli zauważe jakiś problem/złe podejście to sam je rozwiązuje, nie musze czekać na poprawki. Ważne tylko by podglądać `konkurencje` i unowocześniać swój framework od czasu do czasu.
anas: framework to nie wszystko. Mozesz rowniesz podkrecic baze danych/serwer. Zamiast np Apache moze zainteresuj sie lighttpd, ktory ponoc jest szybszy od apache (nie wiem nie testowalem, widzialem tylko benchmarki na stronie lighttpd), ktory w sobie uwzglednia mozlwiosc loadbalancing. Dodatkowo rozdzielenie uslug baza na innej maszynie, duzo ramu, + programowanie na poziomie bazy danych - postgresql, chyba ze mowimy o platnych rozwiazaniach, to oracle/mssql.
Mysle ze warto zwrocic uwage na optymalizacje kodu. Np generowanie statysytk moze byc czasochlonne... dlatego takie zadanie moze byc wykonywane raz dziennie, o 3-4 w nocy gdy obciazenie serwera jest praiwe zerowe... Cos za cos, raz na dzien aktualizowane statystyki, ale ... nie obciaza to maszyny. Takich praktyk jest wiele.
Ale dobry projetk systemu + dobry projekt bazy + dobre wykonanie + konfiguracja maszyny = sukces.
Cachowanie calych fragmentow strony moze okazac sie owocne, po co za kazdym razem wyciagac to samo menu z bazy, jak mozna raz zchacowac i miec w postaci pliku html gdzies zapisane?
@mike_mech podejrzewam ze wersja MySQL 7.0 (hehe)
@J4r0d zwracaj uwage na nazwy bo mylisz pojecia
Jesli chcesz wydajność polepszyc zainteresuj sie DB z plsqlem, bedziesz mogl wiekszosc funkcjonalnosci kodu przeniesc na baze danych. Podejscie ze jeden uzytkownik systemu = jeden uzytkownik bazy danych jest najlepszym rozwiazaniem. Uprawnienie dostep do rekordow zostawiasz bazie danych. Wyciagajac dane automatycznie sa filtrowane dla konkretnego usera. Przy wiekszych, zlozonych bazodanowych aplikachacg jak uczy literatura powinno się wiekszosc logiki zostawic bazie danych.
Mysle ze duzy projekt - chociazby gdzie jest strasznie duzo danych w bazie, liczony w milionach rekordow. Po prostu niektore usprawnienia baz typu oracle/pg/mssql usprawnia analize takich danych, co przyczyni sie do wzrostu szybkosci dzialania aplikacji.
Zwroccie uwage, ze zle oprogramowane zagadnienie pracujace na kilku tysiacach rekordow moze byc wolniejsze niz, takie samo zagadnienie lepiej oprogramowane liczone w milionach rekordow.
Wiekszosc pracy ma jednak programista, nie FrameWork, czy Baza danych i to od niego wychodzi ta wydajnosc.
Hej.
Wracając do topicu: głównie chodzi o pogodzenie czasu (wydajności pracy) w stosunku do jakości tworzonych rozwiązań.
@sf: jasne że własne rozwiązania są bardziej elastyczne - co nie znaczy że jak poznasz dogłębnie jakiś framework to nie możesz nim manipulować.
@SongoQ: zgadzam sie w 100% - lecz rozwiazania ktore proponujesz sa czasochlonne, aczkolwiek bardzo wydajne - stosujac w aplikacji warstwe DAO, zawsze mozna w miare potrzeb przepisywac pewne elementy systemu.
@mike_mech, @SongoQ: odnośnie MySQL 5.0 - my aktualnie korzystamy z mysql 5.1.x - wersji beta - wprowadzono wiele zmian, wydajnosc jest akceptowalna, a funkcjonalnosc dla rozwiazan www jak najbardziej wystarczajaca. Oczywiscie nie zamierzam tutaj porownywac rozwiazan MS, Oracle, czy nawet PostgreSQL - bo wiadomo co zapewniaja tamte systemy - ale uwazam ze MySQL zmierza w dobrym kierunku i przyjemnie stosuje sie go nawet w duzych projektach dla www.
Idac dalej - pogodzenie wydajnosci / jakosci = akceptacja klienta. Teraz stosujac rozwiazania ORM, gotowy framework, ktory zapewnia mi wiekszosc standardowej funkcjonalnosci, oprogramowujac sama logike zyskuje na czasie - pytanie jak to wazyc - czy lepiej np. zrezygnowac z narzedzi ORM - oprogramowywac warstwe danych stosujac wyspecjalizowane obiekty DAO i poswiecajac na to wiecej czasu.
Jak to wynika z waszego doswiadczenia - gdzie jest ten zloty srodek - bo my zastosowalismy rozwiazania ORM, przy odpowiednim cachowaniu, sprzecie, acceleratorze i all jest ok - w przyszlosci w przypadku zwiekszajacego sie obciazenia, czy nie uwazacie ze taniej jest inwestowac w sprzet niz godziny programistow?
Pozdrawiam
anas
@Nasty - tak o to się nie martwie - chodzi mi o gotowe narzędzia jak orm - ich wydajność nie jest znakomita, a tym samym jakoś wytwarzanego oprogramowania. Co do optymalizacji w tej chiwli używam APC i rzeczywiście zwiększa to znacznie wydajność. Lokalnie używamy do developerki ZendPlatform i dzięki php Inteligence i profilowaniu udaje się wyszukać wąskie gardła, ale przy np. przetwarzaniu w jednej chwili 50 000 rekordów przez wiele konkurncyjnych połączeń może powodować nie lada problemy - jak sobie z tym radziliście?
Pozdrawiam
anas
@J4r0d: przeczytaj jeszcze raz post anas,
zgadzając się z większością zdań dodam od siebie, że dla naprawdę dużych projektów, gdzie online siedzi powiedzmy 5-10 tysiecy ludzików, żaden czołowy framework nie będzie się niestety nadawał. frameworki mają jak najbardziej uprzyjemniac i przyspieszac pracę, przykładowo pisząc dośc prosty cms w symfony sam napisałem ok 800 linni kodu, gdzie pisząc normalnie musiałbym napisać (korzystając z gotowych bibliotek do obsługi bazy, tempalteów itp.) przynajmniej ok 4-5 tysięcy. cena za to - czas generowania na poziomie 0,2 sekundy, co nie jest wartością porywającą (oczywiście dużo też zależy od konfiguracji sprzętowej)... spotkałem się nawet z poglądami że czasem nie warto stosować się do zasad programowania obiektowego - kolejny zysk na wydajności... myślę że przy ogromnych projektach złotym środkiem jest prosty kontroler, szybki system templatów i biblioteka do obsługi bazy (jednak raczej nie rozwiązanie typu orm) + jak największe uproszczenia wszystkiego. przyjemnie i w miarę szybko będzie się programowało, a kod będzie wydajny...
J4rod - co do testowania i wąskich gardeł ja profilu skrypty za pomocą Zend Platform - dzięki temu rozwiązaniu zyskaliśmy na wydajności nawet do 1000%. Czas wykonywaniu skryptu przy przeszukiwaniu takiej ilośći danych z zastosowaniem narzędzi ORM to nawet do 3-4s - co nie jest akceptowalne - stwierdziliśmy że warto będzie budować indeks.
Cały system to bardzo duża aukcja internetowa - w tej chwili dzięki cachowaniu wydajność jest akceptowalna, ale nie jest górnych lotów.
Rzeczywiście jak napisał pawel_k zdecydowanie szybciej pracują duże serwisy napisane proceduralnie - tworzyłem osobiście www.gorzow.com jak uczyłem się php pod koniec lat 90-tych - obecnie muszę stwierdzić że ta aplikacja pracuje wydajniej niż obecne napisane obiektowo przy użyciu frameworka.
Z moich odczuć wynika że przy bardzo dużych projektach znaczący wpływ na wydajność ma tak naprawdę cachowanie - jeśli znacie jakiś mechanizm cache którym łątwo zarządzać i który daje duże możliwości to będę wdzięczny za podpowiedź - obecnie stosujemy po stronie serwera eAccelerator'a, a po stronie aplikacji własne rozwiązania.
pozdrawiam
anas
a co do znaczy duzy projekt ?
duzo kodu, duzo danych ?
duzo userow online ?
czy moze ilosc $$ na umowie ...
w php naprawde mozna wiele napisac ... nie koniecznie stron www.
zas wybor narzedzi wspomagajacych pisanie projektu zalezy rowniez od wymagan zlecajacego ...
przeciez nie bedziemy brali kobyly na ksiege gosci ktora bedzie miala 100 mln rekordow i obciazenie 200 usero online
ciezko tu poradzic cos jednoznacznie ....
@itsmeMowiac o duzych projektach, mialem na mysli projekty w ktorych jest w miare zlozona funkcjonalnosc - np. serwis aukcyjny, duzy sklep internetowy - i takie ktore maja przy okazji duzy lub bardzo duzy ruch.
@J4rod - nikt tego nie powiedzial - tak poprostu jest - jednak programowanie obiektowe pozwala latwiej organizowac prace, sam projekt, kod, kod staje bardziej elastyczny i co wazne mozna pewne jego fragmenty uzywac w innych projektach bez potrzeby refaktoringu.
Pozdrawiam
anas
Co do frameworkow i innego softu pisanego przez innych. Korzystanie z nich w duzych projektach to tak naprawde porazka. Na frameworki jest moda - miec fw ktory wszystko potrafi. A tak naprawde cos co jest do wszystkiego jest do niczego. Kazdy projekt ktory ma pracowac na duzym obciazeniu powinien miec swoj wlasny szkielet inwidualnie dobrany do projektu - po co komu router ktory supportuje rozne schematy linkow skoro w danym projekcie bedzie tylko jeden I tak pokolei. Tlumaczenie sie tym ze ktos chce miec projekt szybciej przy skalowaniu go na kilkaset tysiecy userow szybciej ( i chce zarobic wiecej kasy ) to zadne tlumaczenie tak naprawde.
Faktycznie OOP jest lepsze do dużych projektów, ale coś za coś - tracimy na wydajności. Jest to widoczne zwłaszcza w php, gdzie inicjalizacja aplikacji odbywa sie nimal za kazdym kliknięciem (AJAX trochę pomaga).
Już samo tworzenie obiektów to duże obciążenie dla progrmu, a dobry kod obiektowy w duzych projektach zazwyczaj charakteryzuje się sporą ilością obiektów.
Z tego, co zdążyłem zauważyć, to gotowe frameworki nadają się zazwyczaj do małych i średnich projektów - przy większych okazuje się, że są po prostu za wolne, a do tego wymagają przebudowania.
Pozostaje pokładać nadzieję w jeszcze szybszym rozwoju infrastruktury sieci oraz sprzętu.
Pozdrawiam,
Czesc ...
Odpowiadacja nad temat duzych projektow i roznych frameworkow,
to sa one takie uzywajac przenosni ze aby "sie napic mlepka to trzeba krowe kupic".
Przerabialem, wysztkie po kolei w nadzieji ze cos jest w miare przyzwoite ale
sie okazalo, ze wiekszosc to przyslowiowe wolne kobyly. Dlatego opracowalem
swoj, ktory nazywa sie IWA albo SOWA (Services Oriented Web Architecture),
zajelo to kilka lat ale wyniki sa rewelacyjne ... Pislame aplikacje przez 6 tygodni
a inn profesjonalna firmasoftwerowa spedzila nad nia (5 osob) uzywajac wlasnie
tych frameworkow 1.5 roku i ani sie nie zblizyla funkcjonalnoscia do mojej ..
pozdrawiam 060156
sluchajcie nie rozumiem zdan ze przez OOP tracimy na wydajnosci i takie tam.
Nie ma innej mozliwosci niz kodowanie OOP. Inne podejscie przy duzych, srednich i malych projektach jest bledne.
Zatem nie rozmawiajmy o tym ze OOp jest wolniejsze bo roznice sa tak niewielkie ze szkoda to poruszac.
Oczywiscie wszystko zalezy od jakosci kodu.
ja wraz ze wspolnikami (tak samo jak 060156 ) rowzniez napisalismy aplikacje ktora ma stale kompenety i jest niezwykle uniwersalna. Jest to program klasy CRM, DMS. Interfej zawsze ten sam wiec nie interesuje nas wogole co sobie zyczy klient. To jest program nie strona www.
Korzysci ? system do zarzadzania zadanami, zasobami (pojazdy, telefony komputery), kontakty (adres, osoby kontaktowe) oraz powiazania pomiedzy tymi obiektami zajmuje nam 2-3 dni. I mamy wszystko od uprawnien, baze po formularze.
kazdy z nas chce kodowac tak aby niska iloscia pracy osiagnac maksymalne wyniki. I wlasnie to chcielismy osignac.
oczywiscie co jezeli klient bedzie chcial cos jeszcze ? wszystko w OOP i MVC zatem zmiany nie sa ciezkie do wdrozenia.
Co do duzych projektow. Uwazam ze mozna korzystac z malych wspomagaczy ktore wspomoga a nie zastapiam nam nasza prace
@060156: moze pochawlisz sie chociaz czesciowo jak wyglada architektura Twojego systemu?
@itsme: Nie mialem na mysli zastapenia czyms wlasnej pracy - przeciez .net to tez gotowy framework prawda? Chodzi mi o podobne podejscie, tak abym nie skupial sie na rozwoju narzedzi, a rozwiazywaniu problemu ktory jest przedmiotem prowadzonego projektu.
@060156: Jeśli Twój system zastępuje pracę 5 osób przez 1.5 roku w stosunku do 6 tygodni jednej to ja jestem skłonny Ci za takie rozwiązanie zapłacić dużo pieniędzy - w takim razie ile by Ci zajęło postawienie systemu ze złożonością powiedzmy allegro na Twoim systemie (orientacyjnie)? Może zwolnie 5 osób i zatrudnie Ciebie dając Ci 5x ich wypłata x okres potrzebny na zrobienie tego (choiaż trudno mi w to uwierzyć)
Pozdrawiam
anas
caly czas mowie ze ciezko to okreslic
system aukcyjny ma zupelnie inne narzedzia niz CMS, niz forum i inne - nie ma uniwersalnych rozwizan do roznych typow projektow - niestety.
ZAtem nie ma tez jednoznacznej odpowiedzi na Twoje pytanie
Ja dodam, że wiekszość wspaniałego oprogramowania, które widzimy na co dzień jest pisana niechlujnie (nie jestem święty) a powodem jest pośpiech.
Co do frameworków, to sprawa jest oczywista: coś co jest do wszystkiego jest do niczego.
(Ale) Może spojrzeć na to jak na silną podstawę do tworzenia swojego projektu? To tak jak z językami programowania, dlaczego nadal nie pracujemy w Assemblerze, tylko przenosimy się na coraz wyższą abstrakcją?
Ja osobiście nie pracowałem nad dużymi projektami, więc mogę jedynie gdybać, ale warto tutaj podejrzeć rozwiązania chociażby z .NET.
Ciekawym pomysłem jest również rozwinięcie swoich komponentów, które poźniej łatwo modyfikować.
Co do sprzętu: sprawa jest oczywista pośpiech powoduje bałagan, a stan idealny - złoty środek - to po prostu bajka. Programiści wychodzą z butów, żeby zdąrzyć na czas, a straty rekompensują sprzętem i właśnie to jest postęp... Mamy nowsze procesory, większe dyski...
Nie zapominajmy, że przyzwyczajenie i nałogi to nasza prawdziwa natura (wedle Arta) i przejście na nowe oprogramowanie też może mieć mały impakt powodujący opóźnienia.
A praca na swoich śmieciach i sprawdzonych rozwiazaniach taki problem niweluje pozwalając maksymilizować zyski z obecnych sposobów bycia.
Pozdrawiam
ww
@itsme - wydaje mi się, że anasowi chodzi o narzędzia takie jak cashe, validatory, auotoloadery itp. Te wystepują (niekoniecznie razem) w prawie wszystkich większych systemach i stawia się na prostę ich konfiguracji niż pisanie od nowa. Dzięki temu są użyteczne. Tak mi się przynajmniej wydaje.
Pozdrawiam.
Odnosnie,
Framoworkow to sie zgadzam, ze cos co jest do wszystkiego to jest do
niczego.
Dlatego zastosowalem inne podejscie.
Nie budowanie monstrum tylko podejscie polegajacych na budowaniu klas
z ktorych mozna skladc system. Oto ich przyklady:
PRZEGLADARKI KLASY:
--------------------------
Service
content marshaling
request, response
Database
Presentation
Screen
Dialog
Canvas, Dynamic, Static
Element
Style
Move
Resize
Default Dialogs
Info
Message
Confirmation
Popup Menu
Upload File
Calendar
Cookie
Clipboard
php KLASY
------------
Service
content marshaling
request, response, forwarding
Database
mysql
browser mysql
odbc
PDF Document
Macromedia Monitoring
Html
pages, emails
Session
License
expiration, evaluate, customer name
Validate
date, zip, phone, credit cards, email
Email
preferred, text, html, attachment
Log
error, warning, info, debug
Pozysze klasy sluza do budowania services po stronie php z ktorymi
sie komunikuje Browser przesylajac lub dostajac business content.
Warstwa komunikacyjna wywolywania serwisow jest obecnie
zaimplementowana w HttpRequest, Frame i IFrame.
MMP aplikacje pisane przez moja firme dzialja na serwerach jest tam okol 2GB ramu i mocny procek
online pracuje okolo 200 userow na jednym programie
zas na drugim okolo 190 USerów
wiec obciazenie jest i naprawde napisanie takiej aplikacji strukturalnie i badanie czasow wydaje sie hmmm niekonieczne prawidlowe ...
dlatego nie mowmy tutaj o OOP i strukturce inne poziomy programownia i inne zastosowanie.
@060156: Twoje rozwiazanie pochodzi mi pod EZ Components + dobudowanie prostej obsługi żądań i odpowiedzi. Domyślam się że to jest bardzo szybkie rozwiązanie - każde żądanie używa bibliotek takich jak potrzebuje, wykonuje swoje zadania zwraca dane i finito.
Mam jednak wątpliwości co do użeteczności - tak naprawdę pewne czynności mogą być uciążliwe: forwardowanie, przekierowania, obsługa błędów, autentykacja, obsługa formularzy, wymiana widoków(HTML, PDF, RTF...), obsługa filtrów. Tak naprawdę jeśli chcesz wprowadzić globalne zmiany musisz modyfikować dużo kodu.
Jak to rozwiązałeś? Lub może ktoś inny rozwiązał?
Pozdrawiam
anas
Znowu gadanie typu frameworki sa zle tez jest bez sensu.
Framework nie koniecznie oznacza cos wielkiego i skomplikowanego. Przeciez oczywiste jest, ze kazda aplikacja wymaga obslugi pewnych rzeczy, takich jak sesja, autoryzacja, baza danych. A co z samym uruchamianiem odpowiednich akcji?
Mozna przeciez napisac framework lekki, ktory udostepnia nam minimalnych srodkow koniecznych do sprawnego budowania aplikacji. W ten sposob oszczedzamy na czasie pisania oraz (co jest moim zdaniem duzo bajdziej znaczace) nasza aplikacja staje sie jednolita pod wzgledem budowy i trudniej o popelnienie jakiegos bledu.
Adrian.
Witam,
Framework kojarzy sie z raczej z kombajnem, ktory daje w prosty sposob uruchomienie dosyc skomplikowanego procesu. Sam uruchimi sesje, wyswietli prezentacje, ble, ble...
Ale jak kolega dobrze zauwazyl - bywaja one czasem wielkiem utrudnieniem. Juz sporo czasu wczesniej myslalem, jak stworzyc system, ktory pozwalalby na wydaje pisanie nowych aplikacji, ktore moga sie bardzo roznic.
Czy ktos ma jakies swoje wlasne szkielety dobrze sprawdzajace sie w takich sytuacjach? Moglby je udostepnic?
Pozdrawiam, Adrian.
że tak spytam z czystej ciekawości jakim utrudnieniem jest wykorzystanie dobrze napisanego frameworka? Bo nie bardzo rozumiem, ale konkretnie przykłady itp.
Nie mam duzego doswiadczenia w pracy z frameworkami. Ale zauwazylem jedno - fraweworki bardzo dobrze sprawdzaja sie okreslonych sytuacjach, takich jak budowanie stron portalowych, blogow itp.
Ale co w przypadku budowanie zupelnie innych aplikacji? Zaraz po napisaniu frameworka stworzylem na nim newsletter - swietnie sie na nim pracowalo (tj. na frameworku). Ale kiedy wzialem pioro do reki, zeby zaprojektowac szkic innej aplikacji, to przyznam, ze framework okazal sie wielkiem utrudnieniem.
Sprawa wygladalaby inaczej, gdyby framework byl zupelnie bazowy - bylby odpowiedzialny jedynie za podstawowe rzeczy, takie jak uruchamianie akcji, forwardowanie. Ponadto udostepnialby szereg klas, dzieki ktorym moznaby szybciej tworzyc aplikacje.
Wtedy zabierajac sie za nowy projekt, moglbym go dobrze zaprojektowac i nie myslec, czy moge cos zrobic, bo framework mi na to pozwoli lub nie.
A do tego wystarczy spojrzec na rozne projekty... wieksze projekty. Zaden z nich nie przypomina frameworkow, takich o jakich ostatnio na forum wiele sie mowi. To raczej bazowe elementy z bogatym zapleczem bibliotek. I co wazne - to jakos bardziej oddaje idee programowania obiektowego, przez co moze byc bardziej intuicyjne - nawet dla autorów.
Adrian.
Wyobraz sobie, ze uprawnienia najbardziej ograniczyly mnie w projekcie...
A z jakiego korzystalem? Z wlasnego W sygnaturze mam linki do Rapide.
Adrian.
W takim razie Twój framework w czym stwarzał Tobie problemy? Wnioskuje z twojej wypowiedzi, żę Rapide umożliwia tworzenie tylko ... no właśnie czego? Bloga? Portalu?
Spróbuj użyć może jakiegoś nie własnego? Może będziesz mógł stworzyć więcej typów aplikacji
Nie twierdze, ze nie dalo sie tego wymienic na inny system, ale w takim wypadku lepiej jest stworzyc cos bardzo prostego i miec wieksza elastycznosc pracy.
Heja
Pytanie na temat, ale troche z innej strony. Duzych projektow zwykle nie robi sie samodzielnie lecz jakas grupa programistow, grafikow itp... Jakich narzedzi uzywacie wspomagajacych prace grupowa ?
Pozdrawiam i z gory dzieki
Hej.
Jak najbardziej chodziło mi o pracę grupową. Wspomagamy się Subversion, do raportowania błędów używamy flayspray'a, MS Project do zarządzania projektem i oczywiście inne narzędzia przy etapie projektowania. Pytanie dotyczyło technologii która ułatwi sam etap implementacji, a dodatkowo będzie bardzo wydajne ze względu na wielkość projektu i jego docelowo dociążenie.
Pozdrawiam.
anas
continuum+ant lub trac+phpunit
Witam.
Myślę że php + mysql całkiem dobrze sobie radzi nawet w dużych projektach... Ale nie mam zamiary się wdawać w dyskucje na temat co jest lepsze bo to głupota...
Myślę również że czas spędzony nad tworzeniem kodu jest zależny od umiejętności programistów. Nic nowego ale dodam że im większe umiejętności to ten czas się ... wydłuża. Lepiej zabezpieczmy, kombinujemy etc.
To jak się pracuje w php zależy od tego jaki framework sobie stworzymy.
W mojej firmie na php + mysql działa kilka serisów mających w jednej bazie ponad 430K userów. Przy czym najpopularniejszy serwis w sezonie internetowym (mam na myśli wrzesień - październik) ma 2M odsłon dziennie.
Muszę przyznać że jeszcze nie mieliśmy problemów z przeciążeniem serwera... Dzięki dobrze skonstrowanemu cachowaniu można poważnie odciążyć serwer bez kompromisów.
Myślę że można zaprojektować w php odpowiedni framework niemal do wszystkiego (portal czy chociażby newsletter). My sobie taki stworzyliśmy i każdu pomysł jaki nam teraz przyjdzie do głowy to kwestia dopisania odpowiedniej klasy.
Fakt jednak jest faktem że aby stworzyć DOBRY framework potrzebna jest dobrze zgrana drużyna programistów którzy mają doświadczenie w programowaniu więcej niż jednym języku.
Pozdrawiam
@jarrod: imho nie php+mysql, a php+$db gdzie !in_array('mysql', $db) == true. MySQl jest dość słabą bazą, nie korzystałem z 5, także wypowiedziałem się na temat 4. Myśle, że wielkie projekty można opisać na 'mocniejszych' bazach , np. pgsql.
Z tego co anas sie wypowiedział że to tak duży projekt to na dzieńdoby powienien pogadac z adminami na temat mozliwosci i architektury sprzetowej całości. Bo jesli to ma działać na jednej maszynce to juz sobie dajcie spokoj. Bo jesli ktos mowi o paru tysiacach ludzi online i złożonej funkcjonalnosci to rozumiem ze to raczej powazna firma ktora ma powazna kase i wlasne zaplecze serverowe.
Z tym ze MySQL sie nie nadaje do duzych projektow, to albo nie widział duzych projektów albo nie umie wykozystac MySQL'a. Podchodze krytycznie do tego i takich tekstów bo jak na razie nic nie było w stanie przekonac mnie ze MySQL nie potrafi obsluzyc duzych baz danych czy tez nie poradzi sobie z duzym ruchem. Jakos przacowałem przy dużym sklepie na MySQL'u gdzie była wielo gigabajtowa baza i chodziło szybko i bez problemów. Aktualnie pracuje przy impementacji klastra mysql ktory takze posiada duże możliwosci których nie potrafił zapewnić postresql, a na oracle nas niestety jeszcze nie stać.
Proponuje przez serverami z apache postawic loadbalancer'a. Podejzewam ze to bedzie apache a nie lighthttpd poniewaz on obsluguje dobrze rzeczy statyczne. Co za tym idzie podzielenie serwerow na serwery generujace strony i na serwer z danymi statycznymi da duży wzrost wydajnosci.
Przy takiej aplikacji raczejbym stawiał na własne wyspecjalizowane rozwiazania aby uzyskać dużą wydajność. Wszystkie rzeczy, które są bardzo elastyczne, do najbardziej wydajnych nie należą. Dobra budowa Bazy danych tez jest wazne.
Wszystkie elementy sa bardzo wazne przy takich aplikacjach wiec nie mozna zostawiac tego tylko w kwestii samej aplikacji.
Mysql wspiera np synchronizacje baz danych co pozwala na rozbicie na pare serwerów.
a może Bizgres? http://www.bizgres.org/home.php Pamiętam że ktoś na pl.comp.bazy-danych miał z ta bazą do czynienia i chyba nawet mile wspominał jako alternatywa dla czystego PostgreSQL-a w "dużych zastosowaniach".
Pozdrawiam,
Marcin Staniszczak
Rozmowa o frameworkach zawsze stanowi pewien problem, tak jak i wymagania zawsze są inne.
Wydaje mi się więc, że jedyne rozwiązania które mogą się sprawdzić w różnorakich zastosowaniach i nie stanowić zbyt dużego obciążenia dla wydajności do zestawy klas typu EZ compontents albo ZF - dobrze przemyślane mechanizmy realizujące konkretne zadania w szybki i skuteczny sposób.
Są to jedyne 'frameworki' które uznaję, bo w ich przypadku nie mam cały czas wrażenia, ze 'za chwilę' okaże się, że wykorzystywany przeze mnie szkielet nie będzie wstanie czegoś zrobić. W przypadku wykorzystywania ZF oznaczać to może po prostu, że należy coś inaczej zestawić, wykorzystać inny komponent, lub po prostu coś dopisać.
Oczywiście narzędzia typu Prado albo Symfony również mogą się wielu ludziom przydać, szczególnie w przypadku braku własnych narzędzi i sprawdzonych rozwiązań, jednak ich użyteczność jest znacznie mocniej ograniczona.
mike_mech - myślę jednak, że tym razem nie przeczytałeś ze zrozumieniem.
Symfony jest bardzo rozbudowaną aplikacją, w bardzo zaawansowany sposób wspierająca programistę. I ja dobrze sobie z tego zdaję sprawę, choć osobiście nie przepadam za tego typu rozwiązaniami.
Z przekonaniem będę jednak bronił stanowiska, że:
1) narzędzia typu ZF czy eZComponents można zastosować w o wiele większej ilości przypadków - są bardziej elastyczne i pozwalają na bardziej "wybiórcze" wykorzystanie
2) zarówno Symfony jak i PRADO - mimo bardzo rozbudowanych systemów cache i sporej optymalizacji kodu - narzucają spory bagaż na wydajność aplikacji. W takim przypadku chęć optymalizacji pewnych elementów, ich uproszczenie lub 'rozczłonkowanie' może być na tyle trudne, że łatwiej byłoby pewnie napisanie tych elementów od zera.
A w Symfony osobiście nie lubię nadmiernego pracowania "za" programistę i oraz wykorzystywanie XML'owego DAO, choć wiem, że to akurat można ominąć.
@Turgon - a Twoja wypowiedź jak zawsze - ma bardzo dużo sensu. Żeby choć była gramatyczna... (kurcze - tylko nie tłumacz się potem, że znów byłeś chory)
To że symfony jest wolne i krowiaste to niestety fakt. Ale ze sie wygodnie na nim pracuje to co innego , chociaż brakuje pare rzeczy
Jak już o frameworkach mowa: czy w php są jakieś LEKKIE frameworki do budowy aplikacji?
Przez lekki rozumiem framework, który nie narzuca określonego sposobu pisania kodu - możesz wziąć z frameworka tylko tyle ile chcesz, a reszty swojego kodu nie musisz do tego dostosowywać.
Przykładem lekkich frameworków dla Javy jest SPRING. Mozna pisać kod w Springu, który jest 100% czystym kodem Javy bez używania jakichkolwiek importów ze Springa.
I drugie pytanie:
Czy jest dla php jakiś framework wspierający IoC? IoC bardzo ułatwia tworzenie i testowanie dużych projektów.
CodeIgniter albo ZendFramework przy czym chyba ZF by ci bardziej spasował skoro chcesz poszczególne klasy sklecić wg. własnego 'widzimisie'.
Witam,
jako że jestem autorem wątku, postaram się odnieść do wypowiedzi powyżej i tego na co ostatecznie postawiliśmy:
Symfony Framework - za jego wydajność, skalowalność, szybkość kodowania, dokumentację, wsparcie, wydajność, wydajność, wydajność, szybkość kodowania, wsparcie, dokumentację, wydajność...
MySQL w wersji 5.1.x obsługiwany za pomocą ORM'a - pewnie za raz padną teksty, że nie ma to prawa bytu, a ja na to jak na lato - bo to działa bez zarzutu - co ciekawe nie jestem jedyny, na grupach Symfony pojawiły się posty w których to autor prezentował wyniki działania aplikacji opartej o Symofny mającej ponad 25, a może i 35 mln rekordów w bazie danych. Wszystko to stoi na 2 serwerach (jeden do obsługi ruchu WWW, a drugi do obsługi serwera baz danych - MySQL.
Od kilku miesięcy cała moja firma, a tym samym programiście w niej pracujący kodują większość rozwiązań PHP'owych właśnie w oparciu o Symfony. Klienci są zadowoleni z wydajności pracy, ja z kasy, serwery z małej ilości pracy przy dobrej konfiguracji środowiska produkcyjnego.
Dodam że dziś wyszła stabilna wersja 1.0 Symfony, niedawno opublikowana została książka - za darmo dostępna na stronach projektu, a np. takie dodatki jak obiekt $browser (odsyłam do dokumentacji) do testowania wydajności aplikacji mówią mi że jako kierownik projektów postawiłem na dobre rozwiązanie.
Co do innych rozwiązań, jak ZF czy EZ Components - można wybiórczo użyć w Symfony, albo napisać sobie plugin, ehhh po co pisać pewnie już jest napisany .
Pozdrawiam, anas
true, smarty przymuli wszystkim
http://www.alrond.com/en/2007/jan/25/performance-test-of-6-leading-frameworks/
http://wiki.rubyonrails.com/rails/pages/Framework%20Performance
http://www.sellersrank.com/php/cakephp-codeigniter-benchmark/ (+symfony)
oczywiście zawsze można mieć jakieś "ale" odnośnie metodologii badań ale wiecznie ostatnie miejsca okupowane przez Symfony chyba nie plasują tego FW w kategoriach "wydajny"?
PHP4 to przezytek - czy jest na serwerach czy nie. I to jest pewne.
Duze projekty przewaznie chodza na serwerach dedykowanych badz firmowych - bo duzego projektu na hostingu wspoldzielonym to ja nie widze. Dlatego tez jedyne sensowne PHP w duzych projektach to PHP5 i basta.
Co do testowania - zadnego z testow nie uwazam za wiarygodne - sporo z nich przegladam ( linkow nie pamietam ) i przewaznie sie rozne wyniki.
Z tego co ja przejadlem pomimo mojego mlodego wieku wynika iz miejscami dobrze napisac FW pod konkrenty projekt. Mowie tu o obciazeniu rzedu kilku mln uniq Napisanie fw pod taki projekt do dla dobrego programisty nie jest niczym szczegolnym. Kierujac firmowym FW wycina sie to co zbedne. Np. jakies pluginy kontrollera ( ZF ) na rzecz konkretyzacji np. pluginu autoryzacyjnego.
ORM - korzystalem tylko z phpDoctrine. Propela chcialem raz uzyc z grubej dosc rury pt. 70 kilka tabeli. Pojawialy sie joiny po kilkunastu tabelach i nie chcialo mi sie patrzec na wydajnosc tego bo jej nie bylo. SMARTY do tego i byl kill. Ale Propela wywalilem przechodzac czesciowo na phpDoctrine, czesciowo na proste mapowanie klasami tabel i pojedynczych wierszy ( activeRecord itp ), do tego szablony przeszly na PHP i cud miod malina
Cześć!
Tak sobie czytałem ten topic i nasuną mi się pomysł jak można odrobinę "ztiuningować" serwis.
Wszyscy zapewne kojarzycie technologie AJAX z serwisami web 2.0 gdzie głownie jest wykorzystywana dla bajeru, po to aby użytkownikowi przyjemniej się chodziło po portalu.
Ale można tez wykorzystać AJAX-a to poprawy wydajności serwisu.
W "normalnych" okolicznościach to surfowanie po portalu wygląda następująco: użytkownik wchodzi na stronę, strona się ściąga, użytkownik klika jakiś link, i kolejna strona się ściąga, aż mu się znudzi i wyjdzie. W tej sytuacji można skorzystać z AJAX-a następująco: użytkownik wchodzi na stronę, strona się ściąga, użytkownik klika w jakiś link, i ściąga się tylko pewna część strony, a inne elementy pozostają nie zmienne. W tym przypadku przyjmijmy ze strona ma rozmiar 50 KB a użytkownik klika w 10 linków zanim mu się nie znudzi.
Wiec jest tak:
- 50 KB (pierwszy raz) + (50*10) = 550 KB
czyli serwer to każdego człowieczka wysyła ponad 0,5 MB
A przy wykorzystaniu tego co omówiłem przed chwilą, to wygląda tak:
- 50 KB (pierwszy raz) + (10*10) = 150 KB
czyli serwer wysyla tylko ~ 27% tego co by wyslal w tradycyjnych warunkach.
Czemu 10 KB a nie 50 KB? dlatego ze główne elementy które sporo waza takie jak reklamy, grafika, itd. pozostają niezmienne.
ps. Może ktoś mówić ze przeglądarki maja cache, ale według mnie to nie daje takich możliwości jak AJAX.
Pozdrawiam
a kiedy przychodzi do SEO to zbierasz resztki tego co z Ciebie zostanie po tym jak Cię klient dorwie i zaczynasz pisać wszsytko od nowa - AJAX w postaci zaproponowanej przez Ciebie TAK - ale dla panelu administracyjnego chyba, albo strony, która całkowicie pozycjonowanie olewa
Można to wszystko napisać tak, aby googlebot widział ten content. Po prostu każdy komponent piszesz w wersji AJAX i zwykłej A w serwisie wtedy możesz rozpoznać w jakiś sposób, czy np: Googlebot sobie chodzi i ustawić mu AJAX=false i po ptakach.
Tyle że to jest Cloaking czyli podstawianie botowi wyszukiwarki innej treści za co niestety Google potrafi ukarać.
Pozdrawiam
już tam nie przesadzajcie, jak wszystko trzeba używać z głową Ajaxa używać do takich elementów, których bot i tak nieindexuje (przykład: głosowanie w ajaxie, zamiast oddania głosu i reloadu strony) a nie do np. paginacji czy innych kluczowych elementów strony.
Poza tym jaki cloaking skoro każdy bot zobaczy to samo?
Zawsze lubiłem symfony, a zf jakoś mnie odrzucał.
Wczoraj poczytałem dokumentację tutorial przetłumaczony przez Wojtka Naruńca i naprawdę super rzecz. Byłem sceptycznie nastawiony do tego frameworka ale teraz jestem jego wielkim fanem.
Polecam wsystkim, dla których liczy się szybkość tworzenia, świetna dokumentacja oraz wsparcie
anas: twoj lobbing na rzecz symfony jest calkiem przekonywujacy , dlatego troche sie tym zainteresowalem
mam pytanie, jak wyglada tam sprawa z uzyciem szablonow xsl ? czy jest to wogole mozliwe ?
Hej,
a79rtur: a dlaczego miałoby nie być możliwe? Przecież to Open Source - można sobie przepisać framework w taki sposób aby była taka możliwość. Rozumiem, że chodzi Ci o jakąś automatyzacje, tak więc:
widok, to zwykły plik, więc możesz tam tworzyć XML'a który będzie opisywał Twój dokument, a następnie transformować go za pomocą XSL do np. XHTML'a - po stronie serwera można to usprawnić poprzez podmianę klasy
rendering_filter:
class: sfRenderingFilter
w pliku factories.yml
Oczywiście można też transformację przenieść na przeglądarkę, ale tutaj pojawia się wiele problemów z obsługą przez nie XSL'a.
Tak czy siak wszystko jest możliwe.
------------
BTW. Teraz borykam się z innym problemem - chodzi o wersjonowanie danych w bazie - wyobraźmy sobie sytuację, że produkt jest opisany za pomocą kilku tabel: produkty, atrybuty, atrybuty_produktow, zalaczniki_produktow, itd...
Teraz jakiś klient sklepu internetowego składa zamówienie dla produktu znajdującego się w jakimś stanie - jakaś cena, przypisane atrybuty, załączniki. Po złożeniu zamówienia dochodzi do tego że administrator kasuje załącznik i dodaje nowy, w drugim wprowadza zmiany (np. dotyczące gwarancji z 24 na 12 miesięcy). Zmienia wartość atrybutu "gwarancja" też z 24 na 12 msc, a tym samym wpływa to na cenę i w głównej tabeli produktu, więc i ją edytuje. Takich zmian dokonuje w między czasie wiele - użytkownik po 2 tygodniach loguje się na swoje konto i chce zobaczyć załącznik do produktu który zamówił (czyli stan taki jak z daty kiedy składał zamówienie) - podobnie ma widzieć odpowiednią cenę i atrybuty produktu.
Jak rozwiązujecie wersjonowanie danych na poziomie bazy, w systemach gdzie stan na daną datę jest krytyczny?
Pozdrówka, anas.
przykład z zamówieniem w sklepie internetowym:
dodałem dodatkową tabelę z zapisanymi zserializowanymi informacjami o produkcie (na wypadek gdyby mi jakieś pola doszły/uciekły) - klient zapisuje dane, a ja odczytuję - kiedy zamówienie zostanie zrealizowane rekord jest usuwany
PS. wszystkie zrealizowane zamówienia zrzucane są do osobnej tabeli a ta archiwizowana raz na miesiąc (umożliwia to odtworzenie wszelkich transakcji)
W sumie jak jest zmieniane coś więcej niż cena to już się staje innym produktem, bo zmieniając okres gwarancji tworzy się nowy produkt, najczęściej z inną ceną.
Edycja produktu powinna się ograniczyć do poprawy błędnych informacji, czy zmiany ceny (bo cena danego produktu maże się zmieniać, ale ją można trzymać w tabeli wiążącej transakcja-produkty)
A więc zmiana okresu gwarancji to utworzenie nowego artykułu, a stary staje się niedostępny do kupna.
Ale to są raczej moje rozmyślania, bo tabela produktów robi się przerostowa. A jak chcieć przenosić skasowane do innej to tabela wiążąca transakcja-produkt powinna wiedzieć, że produkt nie jest w aktywnej liście produktów, tylko w archiwum.
Np. mając dwie kolumny id jedna odnosi do aktualnej tabeli a druga do archiwalnej, tylko wtedy wyzwalacz który by przenosił produkt do archiwalnej przy kasacji musiał by też zmienić kolumnę z id... lub lepiej mieć dwie tabele wiążące transakcje z produktem
Co do przenoszenia (podkreślam, bo tworzenie kopi to inna sprawa) jakiś danych z bazy do pliku, jest dziwne, no chyba że to są elementy nie istniejącego już systemu, a dlaczego dziwne? Bo przecież wchodząc w swoje transakcje chcę widzieć wszystkie i móc zobaczyć co wtedy kupiłem, a nie że (np.) po pół roku znikają...
To przypomina mi Allegro gdzie jednaj osobie wystawiłem trzy razy komentarz, bo zmieniali system czy też archiwizowali(?), ale transakcja została, tylko informacja o komentarzu wyleciała...
Panowie, gdy sprawdzałem sobie wydajność frameworków to za głowę się złapałem. My piszemy kod na podstawie własnego framework'a, który za każdym razem obcinamy na potrzeby konkretnego projektu.
Ten sam kod po implementacji i benchmarkach:
Nasz FW: 300 req/s
ZF: 60 req/s
CakePHP: 27 req/s
Naszym zdaniem:
1. Zaoszczędzisz na czasie kodowania ($ dla programistów) = wydasz na infrastrukturę
(40k BRUTTO za m-c pracy zespołu to mały wydatek przy zakupie 10 wysokowydajnych serwerów)
2. Klient którego ktoś przekona że da się szybciej bez inwestowania w infrastrukturę nie zostawi u Ciebie po raz kolejny pieniędzy.
Bardzo to dobry i pożyteczny topic proszę wytłumaczyć laikowi tak w kilku zdaniach (bo wiem, że o frameworkach napisano juz wiele) co różni wymieniane frameworki i na jakie cechy kładzie się największy nacisk we własnych fw pod kątem aplikacji dużych i mocno obciążonych.
To nie jest pytanie z cyklu "który framework wybrać". Chciałbym się z grubsza dowiedzieć "co kosztem czego" w danym frameworku.
Panowie, ale wydaje mi sie, ze caly czas zapominamy o podstawowej rzeczy - o tworzeniu elastycznego i latwego w utrzymaniu kodu. Owszem, mozna napisac swoj FW (no dobra, biblioteke klas bo nowka sztuka FW to raczej nie bedzie) pod konkretna aplikacje. Mozna, ale potem project manager sie zmieni, lead programmer tez kiedys w koncu odejdzie skuszony praca dla JeszczeBardziejNowatorskiejFirmy i zostanie 2 swiezo przyjetych koderow, ktorzy beda probowali zrozumiec, o co chodzi w tym kodzie.
Ja wiem, upraszczam, ale zaleta stosowania najbardziej popularnych FW jest to, ze w razie jakichkolwiek zawirowan personalnych, dosc szybko mozna znalezc ludzi, ktorzy projekt pociagna dalej, bez tracenia miesiaca na rozgryzanie pozostalosci po poprzednikach. Zas nawet w samych popularnych FW da sie tak przykroic kod, ze zostanie tylko to, co konieczne - bezposrednie wpisywanie kodu SQL do zapytan, cache na wyniki zapytan do bazy, statyczny content, cache serwera lub samej bazy (memcache), uzywanie statycznego w znacznej mierze layoutu rozwiazuje kwestie wydajnosci w 90% przypadkow tzw. duzych projektow.
+1 dla @chlebika
To m.in. dlatego duże firmy wybierają Symfony.
Trochę rozbawiła mnie dyskusja na temat wyższości wydajności jednego frameworka PHP nad innymi
To trochę jak w czasach, kiedy szczytem marzeń był Polonez, porównywać czyj Fiat 126p wykręca więcej na liczniku.
A tak bardziej na serio, to:
1. Wiele serwisów przytyka się na bazie danych, nie na warstwie prezentacji / logiki biznesowej. I winny temu nie jest zwykle ORM, tylko po prostu brak umiejętności posługiwania się obecnymi RDBMSami. Np. jak ktoś robi złączenia kilkunastu tabel na MySQL, to tylko się prosi o kłopoty z wydajnością.
2. Tam gdzie wydajność wyższych warstw ma rzeczywiście ma znaczenie - lepiej pisać serwis w J2EE / .NET. Wydajność wykonywania kodu znacznie wyższa
(ponad 10x), lepsze biblioteki i frameworki, udogodnienia w języku specjalnie do dużych projektów (np. statyczna typizacja), narzędzia do refactoringu, większe możliwości buforowania różnych rzeczy, wiele gotowych zaawansowanych rozwiązań jak np. replikacja, failover itp. Wszystko to oczywiście da się uzyskać w PHP, ale robiliśmy kilka projektów w tym i w tym, i musze przyznać, że w J2EE wychodzi taniej szybciej i porządniej. Jedyny problem, że programiści J2EE cenią się zwykle wyżej niż PHPowcy, więc trzeba im więcej zapłacić. No i ostatnio coś ciężko ich na rynku znaleźć.
Co do porównania pehapowych FW to może i bym się zgodził, ale o jednej rzeczy zapomniałeś - o tym, że logikę też można skopać
Ba! Można ją skopać razem z bazą danych - wystarczy prosty skrypt w php wyświetlający dane z bazy w widoku przez mysql_fetch_assoc(), gdzie w pętli umieścimy dodatkowe obliczenia. Gwarantuję, że jeśli baza ma limity, to zdechnie .
W dużym serwisie łatwiej dostawić serwer z aplikacją niż kolejną bazę ( http://forum.php.pl/index.php?showtopic=102621&view=findpost&p=515320 ). Jeśli łatwiej, to koszt utworzenia aplikacji w .NET, J2EE, czy PHP zdaje się nie mieć znaczenia. Różnice wydajnościowe muszą być niewielkie, skoro php jest dalej stosowane - te 10x to skąd wziąłeś? Bo to tak trochę jak z Rubym, który niby jest taki pro, a jednak muli i nikt go nie chce. Java też muli... .NET - nie wiem
Pozdrawiam.
1. Benchmarki: Wejdź sobie na Great Language Shootout. Ruby jest na końcu listy wydajności, PHP niewiele lepiej. Można instalować przyspieszacze (bytecode cache), ale i tak daleko jeszcze do szybkości języków z górnej części listy (C, C++, D, Java i parę innych).
2. Teoria: Język interpretowany, dynamicznie typowany (PHP, Ruby) zawsze będzie dużo wolniejszy od języka ze statyczną typizacją, natywnie kompilowanego (Java, .NET).
Mimo to, napisałem, że wydajność PHP na ogół nie jest przeszkodą, bo jak się dobrze napisze warstwę logiki / prezentacji, to ona niewiele ma do roboty w porównaniu z np. bazą danych. Oczywiście wszytko zależy od konkretnego systemu.
BTW: Dołożenie nowego serwera aplikacyjnego jest w PHP trudniejsze niż w J2EE. Choćby dlatego, że takie rzeczy jak replikacja przezroczysta dla aplikacji jest w J2EE dostępna "out of the box" (np. Terracotta) - instalacja w kilka minut i mamy klaster - z dowolnej aplikacji, bez ruszania ani jednej linii kodu źródłowego. Podobnie przy aplikacjach w EJB3 - przełączasz 2 switche w ustawieniach serwera aplikacyjnego i masz klaster. Tymczasem o PHP był tu gdzieś wątek i z tego co pamiętam, nikt nie podał satysfakcjonującego rozwiązania (replikacja sesji + failover).
J2EE Taaaak zajebisty pomysł pracuję właśnie w firmie zajmującą się tą technologią - pewnie dało się to zrobić lepiej, ale teraz projekt nad ktorym pracujemy jest ogromną kobyłą, która kompiluje się 12 minut, a uruchamia na serwerze kolejne 25min - najdrobniejsza nawet zmiana to ponad pol godziny czekania. Koledzy z .net mówią ze u nich jest podobnie Dlatego wole php - większość zmian wymaga tylko ctrl+r w przeglądarce i widzę efekty
mrok: Normalnie mało ze śmiechu się nie popłakałem. A nie można tego modułowo napisać i kompilować tylko konkretne części / biblioteki.
Poza tym chyba trochę przesadziłeś z tymi 25cioma minutami. Przecież to jest nierealne. To ta aplikacja służy do obliczeń danych z LHC.
Mógłbyś uściślić co to za kobyła która odpala się 25 minut ?
Pytanie jest o PHP i duże projekty. Wyraziłem tylko opinię, że w dużych projektach PHP nie jest tym co tygryski lubią najbardziej, bo są lepsze rozwiązania i tyle. Może nie na temat?
PHP nigdy nie było projektowane z myślą o dużych systemach. Że niektórzy je stosują na siłę do dużych projektów, bo najpierw projekt był mały, chodził na tanim hostingu, ale zdobył popularność i się rozrósł, to inna sprawa. Ale później są niezłe problemy. Jak mi goście z dużego polskiego portalu opowiadali jakie cuda musieli robić, żeby ostatecznie rozwiązać problem składowania i replikacji sesji, to się zastanawiałem, gdzie sens i logika, skoro w J2EE te rzeczy są gotowe i działają od razu.
Frameworki do budowy aplikacji - wszystko fajnie, jeśli chodzi o funkcjonalność, ale tylko do stron o małym obciążeniu. Narzut czasu wykonania jest ogromny, kiedy taki framework MVC przy każdym requeście musi parsować ponownie wszystkie szablony w XML, tworzyć obiekty, które po zakończeniu skryptu lecą na śmietnik. Są na to jakieś tam obejścia, acceleratory i inne hacki, ale jakbym miał kasę wyłożyc na projekt, to wolałbym, żeby nie był to jeden wielki hack powiązany sznurkami i taśmą klejącą, tylko coś porządnego zaprojektowanego raz a dobrze. Duże serwisy jak Onet, owszem robią w PHP, ale piszą w sposób proceduralny i nie polegają na gotowcach.
BTW: To jakiś niezły WTF macie w tej aplikacji, że musicie restartować wszystko aby zmienić coś w kodzie. W Javie/.NET też można edytować kod bez restartu apikacji. Po kliknięciu "save" zmiany są nanoszone od razu na działający kod. A już ten czas 25 minut to jakiś wielki ROTFL. Robimy duży portal mobilny w J2EE oparty na frameworku komponentowo/zdarzeniowym i odpala się ok. 6-10 sekund na 5 letniej developerskiej maszynie.
spoko, ale nie śmiećcie tutaj o czymkolwiek innym niż PHP. Temat jest jasno sprecyzowany, a miejsce na jakiekolwiek flejmy jest w hydeparku.
//adminie to moj ostatni off o javie w tym temacie - odpowiem krotko przedmówcą
orglee - powiem Ci co to za projekt jak zmienie prace można było podzielić na moduly, ale wcześniej nikt o tym nie pomyślał a teraz brak odważnych
Dobra, pozostając przy PHP: czy są jakieś dobre frameworki do budowania aplikacji komponentowo / zdarzeniowo?
IMHO przy dużych projektach ten sposób programowania jest łatwiejszy, i w przeciwieństwie do proceduralnego, bezstanowego podejścia serwowanego przez większość frameworków MVC (nawet jeśli zaimplementowanych przy użyciu klas i PHP5), w pełni wykorzystuje obiektowość.
PRADO, ale i tak polecałbym zapoznać się z czymś innym.
Dlaczego z czymś innym? Jakie są wady / zalety PRADO?
Czy wydajność w dużym projekcie jest rzeczywiście tak dobra, jak piszą na stronie?
Ktoś się tym bawił?
BTW: znalazłem coś takiego: http://www.avnetlabs.com/php/php-framework-comparison-benchmarks
Wynika z tego, że wszystkie te frameworki są okropnie powolne i generują olbrzymie narzuty.
ale jak to ktos madry powiedział: serwer jest tanszy niz programista
Hahahaha pięknie podsumowaliście pytanie dlaczego należy używać frameworków ^^
Jednak tutaj pytanie jest zdaje się o wydajność innych i to czy warto pisać własny.
Myślę że na drugie można odpowiedzieć tak...
Jeśli możesz wygospodarować trochę czasu lub widzisz wyraźne irytujące braki w innych młotkach, powinieneś zrobić swój własny.
Pisanie własnego czy też używanie już istniejących niesie ze sobą tyle samo zalet co i wad. O tym czy konstruować własny młotek każdy musi zdecydować sam biorąc pod uwagę wiele drobnych szczegółów. Sytuacja ma się nieco inaczej jeśli dotyczy to firmy i grupy programistów.
W takim wypadku jestem zdania że należy użyć już istniejącego jeśli nie chce się doprowadzić do nierentowności firmy.
No, ja się zgadzam z tym, że czas programisty jest droższy niż sprzętu, ale... różnice w tych benchmarkach są rzędu 10-15x na niekorzyść frameworków w porównaniu z "baseline PHP", a koszty sprzętu to nie jedyne wydatki związane z niższą wydajnością. A kto: będzie to serwisował, płacił za prąd, pilnował by nie wynieśli, udostępniał pomieszczenia? IMHO koszt zbudowania klastra 50 serwerów zamiast 4 może być bardzo duży w porównaniu z kosztem samych skrzynek. Zresztą skrzynki serwerowe tanie nie są. Przecież nie postawię serwisu na sprzęcie domowym w garażu u kolegi. Serwer dedykowany to ok. 5 tys /rok. Stawiając takich 50 łatwo wylecieć z całego budżetu na projekt... Przy projektach, które przewidują duże obciążenie, użycie frameworku PHP przynosi korzyści na początku, ale na dłuższą metę może być ryzykowne.
A jeśli pisać własny, to czy w ogóle da się dorównać wydajności zwykłego proceduralnego PHP?
Co do ceny sprzętu, programistów itd.
To nie ważne jakie argumenty wobec ceny sprzętu postawisz, każdy się zgodzi, jeśli jakieś zmiany zajmują długo, to serwis odpada...
Chociażby Grono, wprowadza zmiany, ale gdyby robił to 2x szybciej, wiele więcej osób by z niego korzystało.
Chodzi o to, że czas wprowadzenia poprawek, zmian, czy dodania funkcjonalności to nie tylko czas pracy programisty, a też oczekiwania klienta, jak zgłosi błąd i w ciągu godziny (czy mniej) go nie ma, to ma uśmiech na ustach a jakby czekał dzień, to już nie koniecznie. Nawet przy własnym projekcie, chce się aby zmiany były jak najszybciej, aby użytkownicy je odczuli. Wtey większość nie ucieknie, bo chwilowy brak funkcji zaspokoi przyzwyczajenie, przy dłuższym czasie, już nie...
Dziś ważny jest czas, bo to pieniądz, czasem za ten czas się płaci sporo, ale często się opłaca.
ja wychodze z zalozenia, ze wszystkie frameworki typu cake, kohana, codeigniter - do duzych stron to zdecydowanie za wolne i malo elastyczne...
fajne odgrzebanie tematu po prawie roku :-)
Jeżeli kogokolwiek to nadal interesuje, to wydaje mi się że najważniejsze to optymalizacja kodu, cache...przykład ? nk.pl, stworzone na czystym PHP i MySQL :-)
Akurat NK bym nie brał za przykład, to jest po prostu wyjątek potwierdzający regułę ...
A umieli to zrobić?
Też mogę się mylić
chcąc nie chcąc nasza klasa narzuca standard serwisów społecznościowych w polsce i pewnie jakby zestawić ich pracowników z np ekipą fotki czy allegro to była by znacząca różnica. zaciekawiła mnie informacja o koncie papieża na naszej klasie. czyżby nie mieli jakiegoś krótkiego cacheowania danych które by rozwiązało problem jednoczesnego dostępu wielu użytkowników do jednego zasobu?
Nie ma dużych serwisów w "czystym" PHP. Zarówno Facebook, czy Nasza-klasa to potężne rozproszone aplikacje wykorzystujące wiele maszyn i różne technologie. Do tego ichniejszy kod PHP to co inne od kodziku napisanym w jakimś frameworku pod średnią webową stronkę. Kod przenosi się do binarnych rozszerzeń dla jeszcze większej wydajności (http://www.tuenti.com/jobs/position/?requisition_id=59 -- ktoś chętny?). Po prostu startup wybiera PHPa bo wychodzi najtaniej. Wraz z rozwojem dochodzi do sytuacji, w której trzeba zacząć robić takie kombinacje bo inaczej się nie da. Konkurencja lub oczekiwania użytkowników są tak wysokie że serwis nie może się zazwyczaj zatrzymać żeby zmienić w większym zakresie technologię. A jak nie może się zatrzymać to zaczyna się rozbijanie aplikacji na coraz mniejsze niezależne elementy i zabawy z binarnymi rozszerzeniami do PHPa, czy sieciowymi usługami na masową skalę (np. Thrift). Koszty rosną bo trzeba coraz więcej developerów do wszystkich tych narzędzi i technologii.
Niektóre serwisy wybierają alternatywne rozwiązanie - migrację na inne technologie, np. ostatnio http://www.reddit.com/r/django/comments/bhvhz/the_onion_uses_django_and_why_it_matters_to_us/ - z tym że The Onion nie jest np. serwisem rozrywkowo-społecznościowym muszącym ciągle się rozwijać (mogli zrobić to na spokojnie).
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)