Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP do C++ - zwiększenie wydajności skryptu - pytania
Forum PHP.pl > Forum > PHP
keypax
Cześć.

Mam za słaby serwer i zanim kupię nowy, chciałbym znacząco podnieść wydajność skryptów na nim.
Problem w tym, że serwer ma 1,2GHz i odpalenie pustego skryptu PHP zabiera mu jakieś 8% procesora.

Słyszałem, że jest możliwość przerobienia skryptów pod C++, żeby zwiększyć wydajność niemal dwukrotnie. Stąd moje pytania

- co polecacie do przerobienia skryptu z PHP na C++
- czy można skrypt napisać w czystym C++? Jeżeli tak to jak go wykonać? Przez exec w PHP (co powoduje odpalenie PHP, który nawet pusty zabiera 8% procka)
- czy są jeszcze jakieś metody na odpalenie skryptu tak optymalnie, by z każdym uruchomieniem zabierał mniej niż te 8%?
- istnieje coś takiego jak HipHop dla PHP od twórców Facebooka. Miał ktoś z tym do czynienia? Na jakiej zasadzie to działa w praktyce?
erix
Cytat
Problem w tym, że serwer ma 1,2GHz i odpalenie pustego skryptu PHP zabiera mu jakieś 8% procesora.

Wszystko zależy od tego, jak masz skonfigurowany interpreter. Podejrzewam, że działa u Ciebie jako zwykłe CGI. A wystartowanie procesu trochę zżera winksmiley.jpg

Cytat
- co polecacie do przerobienia skryptu z PHP na C++

Chyba tylko hiphop istnieje.

Cytat
- czy można skrypt napisać w czystym C++? Jeżeli tak to jak go wykonać? Przez exec w PHP (co powoduje odpalenie PHP, który nawet pusty zabiera 8% procka)

Można. Sęk w tym, że czas poświęcony na naklepanie skryptu w C++ spokojnie mógłbyś poświęcić na zarobienie na lepszy serwer i jeszcze Ci zostanie. tongue.gif Musiałbyś zaimplementować najpierw coś do łączności z demonem http (FastCGI np) i inne pierdoły, które w PHP masz już na starcie. Nie polecam. tongue.gif

Cytat
- czy są jeszcze jakieś metody na odpalenie skryptu tak optymalnie, by z każdym uruchomieniem zabierał mniej niż te 8%?

Albo jako moduł serwera, albo jako FastCGI. Polecam ten drugi - poczytaj, dowiesz się o jego zaletach.

Cytat
- istnieje coś takiego jak HipHop dla PHP od twórców Facebooka. Miał ktoś z tym do czynienia? Na jakiej zasadzie to działa w praktyce?

Gdzies widziałem niedawno bloga, na którym ktoś pisał właśnie o hiphopie. Sęk w tym, że nawet najmniejsza przeróbka skryptu PHP wymaga całej powtórnej konwersji do postaci binarnej. Jak działa? Można w ogóle wywalić PHP - serwer wtedy konfigurujesz tak, aby przekazywał żądania do tej binarki, a nie do interpretera.

A ogólnie do tematu - najpierw sprawdź konfigurację, przede wszystkim:
  • jeśli korzystasz z PHP z paczek - skompiluj własne binarki. z paczek są może łatwe w instalacji, ale gra nie warta świeczek. httpd i php IMHO powinny być zawsze skompilowane
  • wyłącz niepotrzebne rozszerzenia - no to już wypadkowa tego pierwszego; phpinfo raczej zbyt krótkie z tych paczkowanych nie jest
  • sprawdź konfigurację serwera - zarówno jego samego jak i pod kątem współpracy z PHP, o czym wspomniałem
  • zoptymalizuj skrypty, właściwie od tego powinieneś zacząć tongue.gif moc na odpalenie procesu raczej aż tak mocno obciążająca nie jest; zresztą - zależy od konfiguracji i w ciemno ciężko coś powiedzieć
keypax
Dziękuję Ci erix za bardzo wyczerpującą odpowiedź smile.gif
Wiesz, chodzi o to, że jeżeli teraz zoptymalizuje te najbardziej obciążające skrypty, to przy kupnie lepszego serwera teoretycznie osób online będzie mogło być dwa razy więcej.
Wszyscy chwalą właśnie FastCGI, muszę obadać ten temat dokładnie winksmiley.jpg

Co do skryptów, obciążających najwięcej serwer są one napisane obiektowo + include różnych plików. Postaram się te skrypty obciążające najbardziej napisać w jednym pliku używając tylko potrzebnych funkcji. Co w takim przypadku z frameworkiem (np. zend), który też domyślnie includuje różne klasy? Warto przepisywać wszystko na framework, czy wynik będzie podobny (znów będzie trzeba pozostawić jedynie potrzebne funkcje)?
phpion
Cytat(keypax @ 2.08.2010, 14:06:34 ) *
Co w takim przypadku z frameworkiem (np. zend), który też domyślnie includuje różne klasy? Warto przepisywać wszystko na framework, czy wynik będzie podobny (znów będzie trzeba pozostawić jedynie potrzebne funkcje)?

Każda aplikacja napisana z użyciem dowolnego frameworka będzie wolniejsza od tej napisanej w "czystym" PHP. Frameworki niosą ze sobą narzut wydajnościowy - ale coś za coś: wygoda pisania <-> pogorszenie wydajności.
erix
Cytat
Co do skryptów, obciążających najwięcej serwer są one napisane obiektowo + include różnych plików. Postaram się te skrypty obciążające najbardziej napisać w jednym pliku używając tylko potrzebnych funkcji. Co w takim przypadku z frameworkiem (np. zend), który też domyślnie includuje różne klasy? Warto przepisywać wszystko na framework, czy wynik będzie podobny (znów będzie trzeba pozostawić jedynie potrzebne funkcje)?

Bez jakiegokolwiek akceleratora (eAccelerator/APC/Zend Optimizer/etc) nawet nie masz co marzyć, że takie molochy będą szybko działać. Nie bez powodu np. przy Doctrine (nie znoszę go, ale przykład akurat tutaj pasuje) wszędzie jest zalecany jakikolwiek dopalacz z interpreterem.
keypax
Dzięki wszystkim za odpowiedź smile.gif
Wychodzi na to, że w moim przypadku najlepiej wszystko robić w czystym PHP bez includowania żadnych klas + nginx winksmiley.jpg
erix
Z tego, co mi się obiło o uszy, to Nginx nie jest taki superhiper, jeśli chodzi o treść generowaną. Dla statycznej - jak najbardziej.

Cytat
najlepiej wszystko robić w czystym PHP bez includowania żadnych klas

Nie przesadzajmy, jakikolwiek akcelerator wystarczy. winksmiley.jpg
Crozin
Jeżeli masz zacząć pisać może i bardzo wydajny, ale przy tym kompletnie nieelastyczny kod przy którym się pochlastasz, gdy za 2 miesiące będziesz chciał coś zmienić to oznaka, że po prostu trzeba zainwestować w sprzęt. Optymalizacja jest opłacalna do pewnego poziomu - potem taniej (czas/pieniądze) jest po prostu rozbudować maszynę.

Co do samej optymalizacji jednak - zacznij od wyszukania wszystkich wąskich gardeł aplikacji - je możesz spróbować zoptymalizować. Jeżeli i to nic nie pomoże - rozbuduj maszynę.
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.