PHP i wydajność

17

Zawsze słyszę, że PHP jest dla średnich i małych stron internetowych, podczas gdy .NET i Java dla aplikacji korporacyjnych. Moje pytanie dotyczy PHP. Dlaczego PHP nie jest dobrą opcją dla aplikacji internetowych dla przedsiębiorstw? Czy dlatego, że jeśli aplikacja internetowa stanie się większa, to PHP będzie wolniejsze, ponieważ jest językiem interpretowanym?

Wiem, że świat korporacyjny wybierze platformę .NET lub J2EE ze względu na integrację ze swoimi produktami oraz usługi back-end itp. Jeśli jednak mamy PHP do budowania witryn i aplikacji internetowych, to w jaki sposób możemy go wykorzystać, aby dobrze działać z duże witryny?

Krótko mówiąc, czy istnieje związek między wydajnością PHP a rozmiarem strony internetowej? Jakie czynniki sprawiają, że PHP nie jest odpowiednią opcją dla dużych witryn?

Naif
źródło
1
Mediawiki (silnik wikipedii) jest napisany w PHP i sprawili, że działał dobrze, ale to nic nie dowodzi. Może to być przypadek niszowy.
Michael K
2
@MichaeltheGhost korzystający z witryn w pierwszej 50 Alexa (a może nawet więcej) to kiepskie przykłady, ponieważ ich głośność jest na tak ekstremalnym poziomie, że ich rozwiązania są wysoce dostosowane i dostosowane do tego poziomu ruchu i nie są tak naprawdę takie same technologia już.
Ryathal
1
Facebook również używa PHP. Zauważ też, że to oznacza rzeczy związane ze skalowalnością, a nie wydajnością, ale znasz różnicę, prawda? Innym przykładem jest freemobile, który przepisał swoją stronę internetową w języku PHP z Javy, ze względu na skalowalność.
deadalnix
„Obecnie większość kodu PHP w Mediawiki w Wikimedia Foundation korzysta z kompilatora HHVM JIT, chociaż niektóre usługi nadal korzystają z Zend Engine PHP.” en.wikipedia.org/wiki/Wikipedia:FAQ/Techniczne to właśnie Facebook stworzył, aby przyspieszyć php (jest to tłumacz php na c ++, który następnie kompiluje). to działa, tylko nie można powiedzieć tylko dlatego, że jest napisane w php, prędkość zawsze będzie taka sama. To zależy od tego, co robisz z kodem w tym sensie ...
pqsk

Odpowiedzi:

19

Wydajność prawdopodobnie nie jest jednym z czynników. W przypadku języka dynamicznego PHP faktycznie działa całkiem dobrze; w zależności od zadania może, ale nie musi, pokonać innych technologii. Model aplikacji jest po prostu zbyt inny, aby porównać go bezpośrednio z Javą lub ASP.NET. Nawet jeśli istnieje mierzalna różnica prędkości, nie jest duża i prawdopodobnie jest liniowa, co oznacza, że ​​można ją rozwiązać, rzucając w nią większą ilością sprzętu. Ponadto sam język programowania rzadko stanowi wąskie gardło - algorytmy, dostęp do bazy danych, przepustowość sieci i ogólnie we / wy są zwykle sprawcami, chyba że piszesz coś naprawdę wymagającego procesora.

Powody używania ASP.NET lub Java nad PHP, które są bardziej prawdopodobne, obejmują:

  • Integracja platformy ASP.NET oferuje szeroką integrację z .NET i podstawowym systemem operacyjnym Windows.
  • Ogólna celowość. PHP został zaprojektowany specjalnie dla Internetu, podczas gdy .NET i Java są platformami ogólnego przeznaczenia. Korzystając z Java lub .NET, możesz bez problemu nakładać nakładki na pulpity i interfejsy sieciowe na ten sam współużytkowany kod, podczas gdy PHP nie nadaje się do pisania aplikacji na komputery.
  • Funkcje organizacji kodu. Java i .NET zostały zaprojektowane dla OOP od samego początku, podczas gdy OOP w PHP jest nieco później. PHP bardzo niedawno wprowadziło przestrzenie nazw, które są ograniczone i niezdarne w porównaniu z tym, co oferują .NET i Java. Programowanie w stylu korporacyjnym zwykle w dużej mierze opiera się na OOP, co czyni PHP słabszym kandydatem.

Innym powodem postrzeganego efektu jest to, że PHP jest darmowe (jak w piwie) i wszechobecne - każda tania współdzielona firma hostingowa ma PHP w swoim standardowym pakiecie, ale serwer .NET lub Java będzie cię znacznie kosztował. W związku z tym ogromna liczba małych witryn korzysta z PHP, nie dlatego, że jest to najlepsze narzędzie do pracy, ale jedyne pod ręką.

Nie oznacza to, że PHP nie nadaje się do dużych projektów - po prostu nie idzie dobrze z programowaniem „przedsiębiorczym”. Jego mocne strony leżą gdzie indziej, a jeśli możesz je wykorzystać, możesz równie łatwo budować aplikacje na dużą skalę, jak możesz przy użyciu dowolnej innej technologii internetowej.

tdammers
źródło
2
Jeden drobny spór, możesz uzyskać wspólny hosting ASP.NET za tę samą cenę, co wspólny hosting LAMP. Problem polega na tym, że pierwsze miejsca, które większość ludzi szuka podczas wyszukiwania, są sprzedawane małym i średnim firmom i są droższe.
jfrankcarr
+1, to bardzo dobrze powiedziane i podsumowane. Wąskim gardłem w przypadku najsłabiej działających aplikacji jest rzadko język.
GrandmasterB
1
to prawda, ale nie sądzę, że Java jest rozwiązaniem - miałem nieszczęście korzystać z wielu aplikacji „Enterprise” takich firm jak Oracle. Prawie wszystkie z nich można zastąpić aplikacją PHP OSS z niewielkim zmniejszeniem funkcjonalności, ale ogromnym wzrostem wydajności i użyteczności.
gbjbaanb,
3
@gbjbaanb: Java nie jest rozwiązaniem w tym kontekście, ponieważ nie ma problemu. To, czy coś jest open source, czy nie, nie ma absolutnie nic wspólnego z tym tematem.
tdammers
@GrandmasterB tak i nie. Na przykład Java ma wiele wewnętrznie synchronizowanych operacji podstawowych, a PHP nie. Wymaga to większej dyscypliny w pisaniu skalowalnego kodu Java. freemobile jest przykładem tego efektu w świecie rzeczywistym. Ponieważ jednak skalowalność nie zależy tylko od interfejsu użytkownika (na przykład bazy danych są tutaj bardzo ważne), musisz o tym pomyśleć.
deadalnix
13

Mylisz ruch („mała i średnia strona internetowa” zwykle oznacza stronę internetową o małym lub średnim ruchu), ze stopniem komplikacji logiki biznesowej (prosta strona internetowa a rozwiązanie dla przedsiębiorstw). W drugim przypadku wydajność nie jest kluczowym czynnikiem.

Na przykład Facebook to witryna o dużym ruchu, ale nie jest to aplikacja dla przedsiębiorstw. Z drugiej strony istnieje mnóstwo intranetów opartych na serwerach aplikacji Java, które nie byłyby w stanie obsłużyć ruchu nawet średniej wielkości witryny.

PHP pod względem wydajności nie jest najlepszą opcją, ale też nie jest tak źle. Szczególnie w porównaniu z innymi dynamicznymi językami. Jednak znowu surowa wydajność nie jest najważniejszym czynnikiem. Tworzenie witryn o dużym ruchu polega bardziej na optymalizacji pod kątem skalowalności na poziomie architektonicznym.


Dlaczego PHP jest tak znienawidzone przez przedsiębiorstwa? Jest kilka przyczyn, po pierwsze byłaby to okropna reputacja bezpieczeństwa . Po drugie, jest postrzegany jako język dla amatorów tworzących brzydki, niemożliwy do zarządzania kod spaghetti HTML-PHP. Ta percepcja utrzymuje się, mimo że istnieją dojrzałe frameworki MVC. Wydaje mi się, że oryginalny autor PHP twierdzi, że nie potrzebujesz frameworku , nie pomaga. Fakt, że ci nieświadomi amatorzy z niewielkimi umiejętnościami programistycznymi nazywają siebie „programistami PHP”, również nie pomagają. Po trzecie, każdy doświadczony programista zgodzi się, że PHP jest źle zaprojektowane jako język. Widać wyraźnie, że został zaprojektowany przez webmastera,

I tak, w przedsiębiorstwie chodzi o integrację systemu, w której PHP też nie świeci. Przy wystarczającym wysiłku możesz stworzyć moduły C. Istnieje most PHP-Java, który jest dość żmudny w użyciu. Poza tym nie masz wiele. Próby stworzenia Boost :: PHP (integracja z C ++) zakończyły się niepowodzeniem. Klony PHP działające na JVM są dalekie od 100% kompatybilności z PHP (na marginesie, nie ma formalnej definicji języka PHP, jedynym odniesieniem jest domyślna implementacja).

vartec
źródło
6

Nie mam pojęcia, dlaczego ludzie twierdzą, że PHP jest przeznaczony dla małych i średnich stron internetowych. Według mojej najlepszej wiedzy nie jest to prawdą. Wiem, że niektóre witryny wspierane przez PHP zaczęły od małych, a następnie stały się 100 najlepszymi witrynami w moim kraju. Nadal używają PHP i nie planują nic na ten temat zmieniać.

Rzeczą, która może doprowadzić ludzi do takiego wniosku, jest to, że w przypadku Javy (i chyba również w .NET) scalling aplikacji jest terminem często poruszanym w dokumentacji i literaturze. Większość serwerów aplikacji obsługuje pewne formy klastrowania, które umożliwiają szybkie dodanie „mocy” wraz ze wzrostem popularności. W przypadku PHP musisz sam zbudować klaster. Możesz to zrobić na wiele sposobów, używając różnych komponentów i musisz dowiedzieć się nieco więcej o wewnętrznych działaniach PHP. To prawdopodobnie sprawia, że ​​ludzie myślą, że z jednym serwerem PHP (a tym samym małą lub średnią stroną internetową) jest ślepy zaułek dla PHP.

Jacek Prucia
źródło
3

Nie ma czegoś takiego jak tylko korporacyjna aplikacja internetowa. W świecie korporacyjnym zazwyczaj masz pełny system korporacyjny, w którym część internetowa jest dość mała w porównaniu do całego systemu. W sieci znajduje się wiele systemów, które wykonują przetwarzanie wsadowe, wysyłanie wiadomości do kolejki, integrację z przedsiębiorstwem, bramy i wiele innych. Wydarzenie na górze może być nie tylko

Podczas gdy PHP jest dobre dla sieci, nie jest tak dobre dla innych typów systemów rozproszonych. A ponieważ wszystkie te systemy pracujesz w Javie lub .NET, łatwo jest również zbudować stos sieciowy na tej samej platformie, a nie w PHP.

m3th0dman
źródło
1

Powiedziałbym, że problemy z PHP wynikają mniej z wydajności niż z historii luk bezpieczeństwa. Chociaż niewątpliwie możliwe jest napisanie strony internetowej o dowolnym rozmiarze lub złożoności w PHP i nadal utrzymywanie bezpieczeństwa, ponieważ złożoność wzrasta, utrzymanie bezpieczeństwa staje się coraz trudniejsze.

Z drugiej strony Java została zaprojektowana z przynajmniej kilkoma pomysłami na temat bezpieczeństwa od samego początku. Chociaż nie pasują one w pełni do większości obecnych wdrożeń (pierwotne myślenie dotyczyło przede wszystkim apletów, a nie serwletów), nacisk kładziony jest na to, że jego funkcje lepiej pasują do tworzenia bezpiecznego kodu. I oczywiście również nie stał w miejscu - ponieważ aplety są teraz w większości martwym problemem, Java została ponownie zdefiniowana w celu podkreślenia roli serwera (obecnie).

Ponieważ .NET przynajmniej próbuje konkurować prawie bezpośrednio z Javą, zapewnia w tym względzie podobne funkcje i możliwości. Możesz spierać się (i zwolennicy obu obozów) o to, czy Sun lub Microsoft wykonują lepszą pracę w tym zakresie, ale prosty fakt, że obaj mają zespoły ludzi, którzy naprawdę starają się nad tym pracować, daje im dość poważną przewagę nad PHP w tym szacunek.

Jerry Coffin
źródło
0

1) Wydajność: w tym miejscu wprowadzono w błąd kilka odpowiedzi.
Projekt Phalanger (którego z powodzeniem używałem w przeszłości) pozwala na używanie kodu C # w PHP i odwrotnie lub całkowite przełączanie z jednego języka na inny. Prawdopodobnie będziesz musiał wprowadzić pewne zmiany, ale gdy będą nad tym pracować, będzie coraz lepiej.
Chodzi mi o to, że odkryli, że istnieje średni współczynnik prędkości 2,5 na korzyść C # (lub .NET w ogóle, VB zrobiłby to samo, na końcu jest MSIL).
Sprawdź ich testy w Wordpress, przyciągnęło to wielu programistów.

Teraz go jeszcze nie widzieliśmy, ale zawsze jest koleś, który powie ci, że FaceBook jest napisany w PHP. Źle. Tak było, dopóki nie zrozumieli swojego błędu i napisali HipHop, aby przekształcić go w C ++.

EDIT: Najwyraźniej, że ostatni blok jest jasne, więc co miałem na myśli to FaceBook JEST napisany w PHP, ale sprawia, że HipHop RUN jak C ++, aby poprawić ogólną szybkość, PONIEWAŻ PHP jest powolny.

2) Bezpieczeństwo: jak już wspomniano, PHP ma długą historię problemów bezpieczeństwa.

3) Czas programisty: Tworzenie strony internetowej w języku PHP jest zwykle łatwiejsze, szczególnie przy użyciu dostępnych frameworków i wszystkich „kreatorów stron”. Tworzenie dobrej, niezawodnej i bezpiecznej strony PHP to inna historia.

Louis Kottmann
źródło
Jeśli chodzi o Facebook / HipHop, niewiele się to zmienia. Nadal piszą instrukcje PHP, prawda? Istnieje również kompilator PHP na Java. Jeśli skompiluję z nim cały mój kod PHP, czy to znaczy, że moja strona jest naprawdę napisana w Javie?
Jacek Prucia
To nie znaczy, że jest to Java, oznacza to, że działa jako takie.
Louis Kottmann
Ok, masz rację, ale czy nadal mogę twierdzić, że moja strona jest napisana w języku PHP? Jeśli tak, to każdy może również twierdzić, że Facebook jest napisany w PHP. Innymi słowy, wszystko sprowadza się do tego, jak rozumiesz termin „język programowania”. Czy jest to tylko kombinacja prawidłowych instrukcji, czy też środowisko wykonawcze. Wolę pierwsze znaczenie i dlatego dla mnie HipHop niewiele się zmienia. Jestem
właściwie tym kolesiem z
Dobra, wyjaśnię to. Ale dla przypomnienia, jestem pewien, że większość czytelników zrozumiała mój punkt widzenia.
Louis Kottmann,
Nie było pomyłką pisanie Facebooka pierwotnie w PHP. Kiedy odkryli, że nie nadąża za skalowalnością, którą widzieli, naprawili problem za pomocą HipHop. Myślę, że to oznacza, że ​​używanie PHP jest bardzo dobrą opcją dla wszystkich stron internetowych. To powiedziawszy, Slashdot używa prostego perla i rozwiązał problem skali, wikipedia używa zwykłego PHP, a także nie ma problemów ze skalą.
gbjbaanb,