Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wydajność PHP
Forum PHP.pl > Inne > Hydepark
dexc
Spędziłem już wiele godzin szukając jakiś dobrych opracowań na temat wydajności PHP vs XYZ, jednak wszystkie opierały się na porównaniu szybkości samej maszyny wirtualnej. Nie wspominająco tym, że niemal wszyscy zdają się niewiedzieć, że da się skompilować PHP do bytecodu i to w sposób fajniejszy, bo dynamiczny, zamiast całego projektu na raz po wstawieniu przecinka...

No i oglądam sobie testy z których wynika, że interpretowany PHP jest 3x wolniejsze od Javy, trochę wolniejsze od Pythona (oczywiście jego wynik też wszyscy mierzą z czasem kompilacji).

Jednak nie ten konkretnie temat - niesprawieliwego mierzenia - chciałbym poruszyć. Niech PHP nawet będzie tym najwolniejszym językiem, jednak z tego co wiem - nikt nigdy tego argumentu nie używa, więc zaczynam mieć wątpliwości - 70-90% "kodu" systemów napisanych w PHP wykonuje się w czystym C! Wszystkie funkcje wbudowane są w C, połączenie z bazą jest w C, cały PECL jest w C.

Java i Python (nie wiem jak Ruby) mają całą bibliotekę napisaną w "samym sobie". Widziałem nawet jeden tekst w internecie: "nie bedziemy mierzyć szybkości sortowania w PHP za pomocą funkcji wbudowanej, bo to by było niesprawiedliwe" - WTF?!

Programowanie w PHP jest trochę jak skryptowanie systemu w BASH-u. To tylko ubranie gotowego kodu C w logikę biznesową - a może się mylę?
Riklaunim
1. Większość języków skryptowych może i jest rozszerzana w C czy C++ (Python, Ruby, PHP).
2. Testy, który język jest szybszy są i tak bez sensu bo nic nie wnoszą poza kłótniami biggrin.gif
3. PHP nie jest kompilowany do bytecode w testach bo tego nikt nie robi na prostych hostingach przy niezbyt złożonych stronach.
4. PHP zaczynał jako coś prostego do debilnych stronek. Rozwija się, ale nie jest to najlepsze rozwiązanie jakie teraz może być (głównie przez zaszłości) pod kątem "szybkości" w prostych testach.

Cytat
Programowanie w PHP jest trochę jak skryptowanie systemu w BASH-u. To tylko ubranie gotowego kodu C w logikę biznesową - a może się mylę?

Bez dobrych narzędzi (typu framework) programowanie w PHP to robienie masy "scrypcików" tworzących obraz wielkiego burdelu winksmiley.jpg Nie wychwalaj tutaj tego C bo to nie wygląda tak różowo jak rozszerzanie w C/C++ innych języków skryptowych (np. Python - PyQt4, PyGame, PyCrystal, PyGTK, wxPython, PIL, PyOpenGL, Pyffmpeg, xapian-bindings.... itd winksmiley.jpg).
Pr0100
dexc szybkość popularnych języków programowanie w największym stopniu zależy od samych założeń języka a nie od jakości interpretatorów. Im większa warstwa "abstrakcji" tym większe wymagania sprzętowe. W PHP masz dynamiczne typowanie zmiennych, brak silnej kontroli typów. Gdyby istniał język tak efektywny jak Py/Rb, prosty jak PHP, przenośny jak Java i szybki jak C++ to nie byłoby potrzeby wymyślać następnych smile.gif

Zresztą jeżeli chodzi o strony www to wydajność języka nie jest tak istotna. Efektywność pracy programisty jest ważniejsza od CPU serwera.
sztosz
Zresztą z tego co wiem to podczas pisania "poważnych" aplikacji, szybkość/wydajność języka ma drugorzędne znaczenie (pomijając miejsca w których wydajność jest priorytetem i facet od assemblera może krocie zarobić tongue.gif ), ważniejsza jest prędkość pisania aplikacji i łatwość jej utrzymania. I nie wiem czy jest jakaś naprawdę duża potężna aplikacja napisana w PHP.
mike
Cytat(dexc @ 8.08.2009, 10:38:45 ) *
Java i Python (nie wiem jak Ruby) mają całą bibliotekę napisaną w "samym sobie".
Nawet kompilator Javy jest napisany w Javie. Przynajmniej ten dystrybuowany przez Sun'a, nie wiem jak pozostałe.
Ale, żeby nie było. Wolę Javę od PHP.

Cytat(dexc @ 8.08.2009, 10:38:45 ) *
Nie wspominająco tym, że niemal wszyscy zdają się niewiedzieć, że da się skompilować PHP do bytecodu (...)
Tylko po co na siłę robić z PHP coś czym on nie jest? Śrubokrętem również można wbić gwoździa, tylko czy to ma sens?
ucho
Proponuje zapoznać się z http://shootout.alioth.debian.org/, szczególnie z tymi 2 pytaniami na początku. Jedyne co jest głupsze od porównywania wydajności języków na prostych programach jest porównywanie frameworków PHPowych na przykładach typu Hello World.
nasty
Cytat(dexc @ 8.08.2009, 10:38:45 ) *
Java i Python (nie wiem jak Ruby) mają całą bibliotekę napisaną w "samym sobie". Widziałem nawet jeden tekst w internecie: "nie bedziemy mierzyć szybkości sortowania w PHP za pomocą funkcji wbudowanej, bo to by było niesprawiedliwe" - WTF?!

To jest nie do końca tak.. bo i tak nawet Java, C++, Ruby czy Python, łącząc się korzysta z systemowego API, wszystko z czegoś korzysta, tak skacząc z jednego poziomu abstrakcji do kolejnego (niższego) aż dojdziemy do Kernela systemu. Tak samo jest w przypadku PHP.

Cytat(dexc @ 8.08.2009, 10:38:45 ) *
Jednak nie ten konkretnie temat - niesprawieliwego mierzenia - chciałbym poruszyć. Niech PHP nawet będzie tym najwolniejszym językiem, jednak z tego co wiem - nikt nigdy tego argumentu nie używa, więc zaczynam mieć wątpliwości - 70-90% "kodu" systemów napisanych w PHP wykonuje się w czystym C! Wszystkie funkcje wbudowane są w C, połączenie z bazą jest w C, cały PECL jest w C.
Zamieniłbym to na "jest wykonywane przez coś napisanego w C".
Porównaj ten przykład z Twoją tezą na temat PHP-C:

  1. #include "stdio.h"
  2. #include "stdlib.h"
  3.  
  4. void exec_funct_one()
  5. {
  6. /* ... */
  7. }
  8.  
  9. void exec_funct_two()
  10. {
  11. /* ... */
  12. }
  13.  
  14. int main()
  15. {
  16. FILE* fp = fopen("skrypt.txt", "r");
  17.  
  18. int funct_num = 0;
  19. fscanf(fp, "%d", &funct_num);
  20. if(funct_num == 1)
  21. exec_funct_one();
  22. else if(funct_num == 2)
  23. exec_funct_two();
  24. else
  25. printf("Syntax error.\n");
  26. fclose(fp);
  27. return 0;
  28. }


i plik "skrypt.txt" który ma zapisane w sobie wartość "1" albo "2".

Czy o takim czymś mówimy, że skrypt.txt jest wykonany w C? bo przecież funkcja którą wykonuję (a raczej jest w nim polecenie żeby się wykonała) jest w C! nie.
Identyczną sytuację masz z PHP. w PHP masz listę rzeczy które mają się wykonać, w jakiej kolejność itd.. (oczywiście po analizie leksykalnej) i jest wykonywana. Gdzie? Z poziomu wywołań API danego systemu. Tak samo jest z każdą platformą.

Cytat(dexc @ 8.08.2009, 10:38:45 ) *
Programowanie w PHP jest trochę jak skryptowanie systemu w BASH-u. To tylko ubranie gotowego kodu C w logikę biznesową - a może się mylę?
j/w.
kris2
zajmuje się serwerem który na jednej cztero procesorowej maszynie z trzema dyskami obsługuje 1,5 miliona odwiedzin dziennie. Ludzie ściągają dziennie kilka milionów stron generowanych w php a requestów jest pewnie kilka razy tyle. Do tego 1/2 ruchu na serverze to forum na vbulletinie (bardzo rozbudowany framework, działa obiektowo). Cały php działa tylko na jednej maszynie, jest druga maszyna zajmująca się jedynie bazą danych. Forum ma kilkanascie milionów postów. Server który to obsługuje nawet za bardzo się nie poci. Myśle że pociągnął by spokojnie nawet po wyłączeniu akceleratora i to pewnie tez by go nie zmęczyło. (mocy jest nadmiar bo server obsługuje też wiele skryptów które w czasie rzeczywistym robią statystyki i przygotowywują dodatkowe dane). Patrząc na różne testy wydajności i jakość kodu jaki widziałem w ASP i Railsach śmiem twierdzić że żaden z tych języków nie dał by rady przy tym obciążeniu na jednej maszynie.

Ktoś też napisał że nie wie czy jest duża i potężna aplikacja napisana w php, tylko co rozumie przez potężną aplikache? 10 mb kodu to już duża aplikacja? a 50mb? To że 95% "programistów" PHP nie napisało w życiu niczego więcej od prostego sklepu internetowego nie oznacza że PHP nie jest wykorzystywany przy bardzo dużych projektach.

A porównywanie C z PHP jest raczej śmieszne, dawno temu pisałem skrypty w CGI używająć C i jak tylko pojawiło się PHP 4 nie zastanawiałem się nawet 5 minut który język wybrać. Należy mierzyć podobne języki, PHP, ASP, Railsy, Python a nie robić testy oderwaje od rzeczywiśtości. Bo nikt przy zdrowych zmysłach nie rozważa zamiany PHP na C czy Javy na Pascala smile.gif
Riklaunim
Cytat(kris2 @ 9.08.2009, 17:50:42 ) *
Server który to obsługuje nawet za bardzo się nie poci. Myśle że pociągnął by spokojnie nawet po wyłączeniu akceleratora i to pewnie tez by go nie zmęczyło. (mocy jest nadmiar bo server obsługuje też wiele skryptów które w czasie rzeczywistym robią statystyki i przygotowywują dodatkowe dane). Patrząc na różne testy wydajności i jakość kodu jaki widziałem w ASP i Railsach śmiem twierdzić że żaden z tych języków nie dał by rady przy tym obciążeniu na jednej maszynie.

Tu nie decyduje wydajność języka, którą można praktycznie pominąć, a wydajność napisanego kodu.

Cytat(kris2 @ 9.08.2009, 17:50:42 ) *
Ktoś też napisał że nie wie czy jest duża i potężna aplikacja napisana w php, tylko co rozumie przez potężną aplikache? 10 mb kodu to już duża aplikacja? a 50mb? To że 95% "programistów" PHP nie napisało w życiu niczego więcej od prostego sklepu internetowego nie oznacza że PHP nie jest wykorzystywany przy bardzo dużych projektach.

Facebook smile.gif Napisany w PHP, tyle że trudno określić czy więcej tam kodu PHP czy C winksmiley.jpg
kris2
Cytat(Riklaunim @ 9.08.2009, 18:03:16 ) *
Tu nie decyduje wydajność języka, którą można praktycznie pominąć, a wydajność napisanego kodu.


Ja zakładam od razu ze soft jest dobrze napisany i mimo to nie podoła.
Choc przy logice tego co widziałem w niektorych projektach asp to ciężko się doszukiwać dobrze napisanego kodu smile.gif Ale tak to juz jest z językami w których twórcy próbują jak najbardziej wyręczyć nas z myślenia i własnej inwencji twórczej.
sztosz
Pisząc że nie wiem czy są potężne aplikacje w PHP nie twierdzę że wątpię w takie możliwości tylko że zwyczajnie nie znam. Dla mnie potężna aplikacja to np. platforma bankowa która obsługuje multum operacji dziennie klientów, pracowników banków oraz współpracuje z platformami innych banków. Albo system do obsługi połączeń telefonii komórkowej, gdzie miliony ludzi dzwoni, a setki ludzi dodaje usuwa sobie właściwości swojego konta takie jak np. dodatkowe dane (dodaj do tego retencję danych jeśli chcesz). Inny przykład to systemy firm kurierskich które śledzą skany milionów przesyłek dziennie w setkach hubów przeładunkowych i stacji nadawczo/odbiorczych, do tego dochodzi inkasowanie pieniędzy w zależności od wagi i rozmiarów przesyłek + masy innych rzeczy. To są dla mnie potężne aplikacje, takie gdzie nie może być mowy o błędzie wynikłym z powodu czynnika innego niż ludzki.

I te aplikacje mogą być napisane w C, mogą w Pythonie, PHP czy nawet Brainfucku, tu wydajność języka ma drugorzędne znaczenie, liczy się wydajność kodu, ale najważniejsze są koszty utrzymania i napisania tego kodu.
nasty
Cytat(kris2 @ 9.08.2009, 18:59:32 ) *
Ja zakładam od razu ze soft jest dobrze napisany i mimo to nie podoła.
Choc przy logice tego co widziałem w niektorych projektach asp to ciężko się doszukiwać dobrze napisanego kodu smile.gif Ale tak to juz jest z językami w których twórcy próbują jak najbardziej wyręczyć nas z myślenia i własnej inwencji twórczej.
Zgadzam się w 100%. ASP.NET - a w szczególności w połączeniu z Web Controls potrafią z początkującego programisty zrobić tępego rzemieślnika.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.