Bezplatné kompilátory PHP. Jedna z doplnkových funkcií

PHP je interpretovaný programovací jazyk, každá požiadavka je analyzovaná a „vykonaná“ zdrojový kód... Tento prístup je samozrejme veľmi vhodný vo fáze vývoja projektu, ale predstavuje ďalší krok v procese vykonávania produkčného kódu. Interpretácia, ktorá sa na prvý pohľad zdá byť silnou stránkou PHP, preto stojí za to viac času a zdrojov CPU.

Ďalej budeme hovoriť o kompilátoroch, ktoré vám umožňujú kompilovať php kód v C ++ a je spustiteľný. Aplikácie PHP sú teda vykonávané priamo procesorom, pričom obchádzajú tlmočník.

Pozrime sa, či je všetko v praxi také dobré.

Ako funguje tlmočník

Na interpretáciu kódu PHP existujú dva kroky:

  1. Analýza kódu a generovanie operačných kódov (Zend opcodes) - pokyny, ktorým tlmočník rozumie.
  2. Vykonávanie operačných kódov.

Prvá fáza je vhodná na optimalizáciu (pomocou vyrovnávacej pamäte operačného kódu), druhá je však dosť uzavretá - tlmočník je vždy prostredníkom medzi sadou inštrukcií a procesorom, ktorý ich vykonáva. Bez tlmočníka nemôže procesor zistiť, čo robiť s operačnými kódmi.

Aby sa zbavili odkazu na tlmočníka, boli vynájdené kompilátory, najobľúbenejším a najnovším z nich je HipHop od Facebooku. Cítime to bližšie.

HipHop PHP

HipHop je napísaný vývojármi Facebooku a je to aplikácia, ktorá:
  1. optimalizuje kód PHP
  2. konvertuje na C ++
  3. generuje z vašej aplikácie viacvláknový webový server, ktorý ju vykonáva
  4. kompiluje do spustiteľného kódu pomocou g ++

Je teda zadaný kód PHP a výstup servera je súčasťou písomnej funkcie.

Pozrime sa, ako sa HipHop dokáže vyrovnať s kompiláciou aplikácie napísanej pomocou rámca, akým je napríklad Wordpress.

Kompilácia Wordpressu

Po inštalácii HipHopu do priečinka src / hphp / získame súbor hphp, ktorý je kompilátorom. Pred kompiláciou nastavíme premenné prostredia:

Cd .. # prejdite do priečinka s hiphopovým exportom HPHP_HOME = `pwd` export HPHP_LIB =` pwd` / bin export CMAKE_PREFIX_PATH = ` / bin / pwd` /../

a choď!

Stiahnite si Wordpress a rozbaľte archív:

Wget http://wordpress.org/latest.tar.gz tar zxvf latest.tar.gz

Skopírujte súbor wp-config-sample.php do súboru wp-config.php a zadajte nastavenia pre pripojenie k databáze (v nastaveniach hostiteľa zadajte 127.0.0.1, nie localhost).

Na úspešnú kompiláciu musíte Wordpress trochu opraviť:

  1. Otvorte wp-includes / js / tinymce / plugins / spellchecker / classes / SpellChecker.php a nahraďte: function & loopback ( / * args .. * /) (návrat func_get_args ();) s funkciou & loopback ( / * args .. * /) ($ ret = func_get_args (); vrátiť $ ret;)
  2. V súbore wp-includes / query.php, namiesto if (! Isset ($ q ["repres_filters"])) $ q ["sup__filters"] = false; vložte $ q ["repres_filters"] = true;

Wordpress je pripravený.

Hiphop "musíte zadať zoznam súborov, ktoré budeme kompilovať - ​​získajte ho a uložte do súboru files.list:

Nájsť. -názov "* .php"> files.list

Všetko je pripravené na kompiláciu, začnime:

$ HPHP_HOME / src / hphp / hphp --input-list = files.list -k 1 --log = 3 --force = 1 --cluster-count = 50

Po dokončení vykonania príkazu v dočasnom priečinku (na začiatku kompilácie hphp ukáže svoju cestu, niečo ako „ / tmp / hphp_ptRgV1“) získame skompilovaný webový server. Začnime to (ak na porte 80 niečo visí, napríklad apache alebo nginx - na uvoľnenie portu sa musíte najskôr zastaviť):

Sudo / tmp / hphp_6s0pzd / program -m server -v "Server.SourceRoot =` pwd` "-v" Server.DefaultDocument = index.php "-c $ HPHP_HOME / bin / mime.hdf

Voila! Ak prejdete na stránku http: // localost, uvidíte funkčný blog WordPress.

Výkon

Uvidíme, či dôjde k zvýšeniu výkonu v porovnaní s nekompilovanou verziou WordPress, ktorá beží na apache2. Nasledujú grafy závislosti rýchlosti generovania stránky od počtu súbežných používateľov.

Ako vidíte, výsledky sú šokujúce: zostavený blog funguje v priemere 6 -krát rýchlejšie! Priemerný počet žiadostí spracovaných za sekundu v nekompilovaných 9 a v kompilovaných 50! Neviem ako vy, ale tieto výsledky ma zasiahli, nečakal som taký silný výkonnostný nárast.

Zhrňte

Po takýchto ohromujúcich výsledkoch sa dá povedať len jedno - chalani z Facebooku urobili maximum. Kompilátor robí z aplikácie skutočne raketu a aj keď je potrebné aplikáciu pred zostavením pripraviť, výsledok stojí za to.

K tejto téme:

Ak sa vám príspevok páčil - kliknite na Google +1 - budem mať väčšiu motiváciu písať viac a len pekne.

Programovacie jazyky sa dodávajú v dvoch príležitostiach: interpretované a zostavené. Aký jazyk je PHP? Aby sme mohli zodpovedať túto otázku, musíme porozumieť terminológii.

Program, ktorý prekladá kód napísaný v jednom programovacom jazyku do druhého, sa nazýva prekladač. Kompilátor je tiež prekladač. Prekladá kód napísaný v jazyku vysoký stupeň, do strojového kódu. Proces kompilácie vytvorí binárny spustiteľný súbor, ktorý je už možné spustiť bez kompilátora.

Tlmočník je úplne iná kategória. Tlmočník kód nepreloží, ale vykoná ho. Tlmočník analyzuje programový kód a vykoná každý jeho riadok. Zakaždým, keď spustíte takýto kód, musíte použiť tlmočník.

Pokiaľ ide o výkon, tlmočníci sú výrazne horší ako prekladače, pretože binárny kód je oveľa rýchlejší. Na druhej strane tlmočníci umožňujú plnú kontrolu nad programom počas jeho vykonávania.

Pokiaľ ide o PHP, nie je to ani prekladač, ani tlmočník. PHP je krížencom medzi prekladačom a tlmočníkom. Skúsme na to prísť a uvidíme, ako PHP kód spracuje.

Zvážte obrázok:

Vidíme, že PHP sa skladá z dvoch takmer nezávislých blokov - prekladača a tlmočníka. Prečo ste to museli urobiť? Samozrejme, z výkonnostných dôvodov.

Skript slúži ako vstup do PHP. Preloží (preloží) ho, pričom skontroluje syntax, do špeciálneho bajtkódu (interná reprezentácia). PHP potom vykoná bajtový kód (nie kód samotného programu) bez vytvorenia spustiteľného súboru.

Bytecode je oveľa kompaktnejší ako bežný programový kód, takže je jednoduchšie (a rýchlejšie) ho interpretovať (vykonať). Posúďte sami: analýza sa vo fáze prekladu vykonáva iba raz a „polotovar“ je už vykonaný-bajtový kód, ktorý je na tieto účely oveľa pohodlnejší. PHP je preto viac tlmočníkom ako kompilátorom. Toto „dvojité dielo“ bolo nevyhnutné na nasledujúce účely.

Zvážte slučku:

Pre (i = 0; i<10; i++) { Operator_1; Operator_2; Operator_3; ............ Operator_99; Operator_100; }

Tento cyklus sa „otočí“ 10 -krát. Pri každom z týchto desiatich priechodov musí tlmočník a 100 riadky kódu. A v ňom musíte analyzovať a vykonať 10 * 100 = 1 000 riadkov kódu! Ak jeden cyklus preložíte do bajtkódu jedenkrát, bude musieť analyzovať desaťkrát menej! To znamená, že skripty budú bežať 10 -krát rýchlejšie!

Ukazuje sa, že PHP je.

Hlavnou fázou práce PHP je interpretácia vnútornej reprezentácie programu a jeho vykonanie. Práve táto fáza trvá pri vážnych scenároch najviac času. Spomalenie však nie je také výrazné.

Stojí za to pripomenúť, že verzia PHP 3 bola „čistým“ tlmočníkom a od PHP 4 sa spustenie skriptov stalo oveľa rýchlejšie, pretože PHP 4 (a PHP5) je interpretovaný prekladač.

Jazyk Perl, ktorý sa takmer vždy nazýva kompilátor, funguje úplne rovnako - prekladá text programu do internej reprezentácie a výsledný kód potom používa pri vykonávaní. Môžete teda povedať, že verzia PHP 4 je kompilátor rovnako ako Perl.

Sme teda nútení dospieť k záveru, že PHP je tlmočník so vstavaným prekladovým blokom, ktorý optimalizuje priebeh tlmočenia.

Použitie tlmočníka (a teda PHP) má svoje nepopierateľné výhody:

  • Nie je potrebné sa obávať uvoľnenia vyhradenej pamäte, nie je potrebné zatvárať súbory, keď s nimi pracujete - tlmočník vykoná všetku rutinnú prácu, pretože program je spustený pod jeho ostražitou kontrolou;
  • Nie je potrebné myslieť na typy premenných a taktiež nemusíte deklarovať premennú pred prvým použitím;
  • Ladiace programy a zisťovanie chýb sú výrazne zjednodušené - tlmočník má nad týmto procesom plnú kontrolu;
  • V kontexte webových aplikácií má tlmočník tiež veľmi dôležitú výhodu - nehrozí, že by server „zamrzol“, ak program nepracuje správne.

Existujú aj ďalšie výhody. Používanie tlmočníka môže vo všeobecnosti poskytnúť skriptom silu, ktorú od nich používatelia webu očakávajú.

Strata výkonu PHP je citeľná v prípade veľkých a zložitých slučiek, pri spracovaní veľkého počtu riadkov atď. Všimnite si však, že toto je jediná nevýhoda PHP, ktorá sa bude objavovať stále menej a menej, keď prídu výkonnejšie procesory, takže že nakoniec spravidla prídu na nič.

<<< Назад
(Čo je nové v PHP5?)
Obsah Vpred >>>
(Migrácia na PHP 5.3)

Ak máte ďalšie otázky alebo vám nie je niečo jasné - vitajte u nás

Takmer všetci vývojári skôr alebo neskôr čelia potrebe spustiť alebo rýchlo skontrolovať nejaký kód, ale nie každý vie, že pre takú jednoduchú úlohu nie je vôbec potrebné používať ťažké desktopové IDE alebo kompilátory aplikácií. Stačí použiť online nástroje, ktoré vám umožnia urobiť všetko oveľa rýchlejšie: Ctrl + C, Ctrl + V, Spustiť, nahlas - a výstup programu už máte pred červenkastými očami.

Vybrali sme najlepšie online kompilátory: niektoré z nich sú dosť univerzálne, iné sú prispôsobené striktne špecifickým úlohám. V každom prípade nebudú nadbytočné.

Koding

Koding.com nie je online kompilátorom v obvyklom zmysle. Každý používateľ služby môže vytvoriť niekoľko plnohodnotných virtuálnych počítačov so systémom Ubuntu 14.04 v cloude, na ktorých si môže robiť, čo chce, vrátane kompilácie kódu. Štandardne sú podporované všetky obľúbené jazyky, ale môžete si ľahko pridať svoj vlastný.

V rozhraní je okrem ovládacieho panela pre váš server k dispozícii aj pohodlné IDE a okno terminálu. Koding je najuniverzálnejší nástroj, nižšie sa pozrieme na jednoduchšie a špecializovanejšie možnosti.

IdeOne

IdeOne je online kompilátor a nástroj na ladenie, ktorý vám umožňuje spustiť kód vo viac ako 60 programovacích jazykoch a ich konkrétnych verziách priamo v prehliadači.

Pre tých, ktorí nemajú priateľku, tvorcovia poskytli kompiláciu kódu v jazyku Brainfuck.

JDoodle

Ďalší online kompilátor, ktorý podporuje mnoho jazykov vrátane tých, ktoré v mnohých ďalších online kompilátoroch nenájdete. Príjemnou vlastnosťou JDoodle je schopnosť spolupracovať - ​​stačí odoslať odkaz na vašu aktuálnu reláciu a vytvárať chyby dvojnásobnou rýchlosťou!

jsFiddle

Nenechajte sa zmiasť názvom - jsFiddle nie je len pre JavaScript. Tento online frontend editor vám umožní otestovať akúkoľvek kombináciu JavaScript, HTML a CSS. Samozrejmosťou je podpora rôznych rámcov, napríklad jQuery, Vue, React, TypeScript, ako aj preprocesory CSS ako SCSS. Pre väčšie pohodlie si môžete vybrať klávesové skratky z obľúbeného editora. Pravda, iba ak je vašim obľúbeným editorom Vim, Emacs alebo Sublime Text.

CodePad

CodePad je minimalistická služba, v ktorej môžete ukladať kód, zdieľať ho a spúšťať s následným zobrazením výsledkov jeho spustenia. Na výber je niekoľko najbežnejších jazykov, ale bohužiaľ bez výberu konkrétnych verzií tlmočníkov alebo prekladateľov.

Jeho hlavnou výhodou je jednoduchosť a ľahkosť: stránka bude fungovať rýchlo aj pri pomalom internete. Poskytuje automatické pripojenie štandardných hlavičiek, ako aj integráciu s Vim alebo Emacs.

Temnejšou stránkou je úplný nedostatok zvýraznenia syntaxe pri zadávaní kódu do formulára. Pri prezeraní už uloženého záznamu je však k dispozícii podsvietenie.

GCC godbolt

GCC GodBolt je interaktívny prekladač C ++. Do tejto zbierky som sa dostal z toho dôvodu, že má jednoduché rozhranie a veľký počet nastavení vrátane možností nastaviteľných pomocou klávesov.

Na výber je mnoho verzií kompilátorov, vrátane tých najnovších. Zo zaujímavých funkcií je možné zaznamenať okamžitý preklad programového kódu do montážneho jazyka.

Alexey Romanenko: Moje meno je Alexey Romanenko, pracujem pre RBC. Téma tejto prednášky je do istej miery kontroverzná. Zdá sa, prečo zostavovať skripty PHP, keď sa zdá, že všetko funguje tak?

Pravdepodobne hlavná otázka znie: „Prečo?“ Cieľom tejto prezentácie je vo všeobecnosti pokúsiť sa pochopiť, či je taká kompilácia potrebná, ak áno, prečo, v akej forme a komu.

Čo je to prekladač PHP?

Najprv malý prehľad o tom, čo je to prekladač PHP. Poviem vám, ako to funguje, čo to je a ako to môžete urýchliť.

Prvým funkčným modulom je takzvaný SAPI (Server API), ktorý poskytuje rozhranie na prístup k PHP z rôznych klientov (Apache, nejaký druh servera CGI (Common Gateway Interface) a ďalšie). K dispozícii je tiež integrovaný systém SAPI, ktorý vám umožňuje vložiť PHP do akejkoľvek aplikácie.

Druhou hlavnou časťou je PHP Core, ktoré spracováva požiadavky, implementuje všetky siete, systém súborov a analýzou samotných skriptov.

Tretia globálna časť je Zend Engine, ktorý kompiluje naše skripty do nejakého bajtkódu a vykonáva ho sám virtuálny prístroj a zaoberá sa správou pamäte (implementuje komplexné alokátory).

Jednou z najdôležitejších a veľkých častí je modul Extensions, ktorý implementuje 99% toho, čo používame v PHP. Buď ide o „obaly“ pre niektoré knižnice alebo funkcie, alebo o triedy, vstavané knižnice a podobne. Môžeme tiež písať vlastné rozšírenia.

Ako sa vykonáva samotný skript?

Najprv. Vykonáva sa lexikálna analýza - súbor sa načíta, analyzuje, všetky znaky zo sady tohto súboru sa preložia do určitej sady tokenov, s ktorými potom pracujeme.

Fáza analýzy tieto tokeny analyzuje. Na základe tejto analýzy je zostavená určitá gramatická štruktúra, na základe ktorej bude neskôr vygenerovaný bajtový kód.

Na konci to Zend Engine vykoná. Výsledok sa odošle späť klientovi.

Hovoríme o vysokom zaťažení. Ak budete túto schému akcií reprodukovať zakaždým s nimi, všetko bude fungovať veľmi pomaly. Keď nášmu tlmočníkovi príde súčasne niekoľko stoviek alebo tisícov požiadaviek, rýchlosť tam jednoducho nie je.

Existujú však riešenia. Sú známi už dlho.

Ako dosiahnuť zrýchlenie?

Najjednoduchším, najlacnejším a osvedčeným riešením je ukladanie do vyrovnávacej pamäte bajtových kódov. Namiesto toho, aby sme prechádzali fázami analýzy a analýzy, uložíme do pamäte cache náš bajtový kód. Na to existujú špeciálne rozšírenia - sú dobre známe každému, kto pracoval s PHP - sú to APC, eAccelerator, Xcache a tak ďalej. Zend Engine práve vykonáva bytecode.

Druhou možnosťou je profilovanie kódu, identifikácia úzkych miest. Niečo môžeme prepísať ako Rozšírenia PHP(bude to rozšírenie C / C ++) skompilovajte to a použite ho ako moduly.

Tretia možnosť je globálnejšia - zabudnite na PHP a všetko prepíšte. Vo všeobecnosti má táto možnosť právo na život, ale iba v prípade, že kód php nestačí. Vo veľkých, veľkých projektoch (alebo existujú pre niektoré dlho) sa zvyčajne veľa nahromadí a prepísanie všetkého bude trvať dlho. Obchodné požiadavky vám to nedovolia. Vo všeobecnosti nie je napísanie niečoho v PHP, napríklad pre front-endový server, príliš dlhé, pretože je to jednoduchý jazyk. Umožňuje vám rýchlo robiť veci, ktoré v jazykoch nízkej úrovne trvajú dlhšie.

Existujú Alternatívna možnosťčo sa nedávno rozšírilo, je niekde skompilovať PHP do niečoho rýchlejšie.

Zostavíme niečo?

Slovom „kompilácia“ mám na mysli preklad kódu Skript PHP do niečoho iného, ​​do nejakého iného kódu.

V tomto prípade môže ísť o dva typy.

Natívny kód je druh binárny súbor ktoré je možné spustiť na fyzickom počítači.

Nepôvodný kód. Je možné skompilovať nejaký bajtový kód, ktorý je možné vykonať na inom virtuálnom počítači, napríklad na JVM.

Čo môžete použiť na kompiláciu natívneho kódu z PHP?

Kompilátor Roadsend. Jeho pokračovaním je Raven. Existuje aj PHC (toto je prekladač PHP s otvoreným zdrojovým kódom). Nedávno sa objavil aj HipHop (Facebook).

Tu je rýchly prehľad toho, čo môžete urobiť pre neprirodzený kód. Pokiaľ viem, existujú 3 pracovné možnosti. Toto je generovanie bajtového kódu pre Javu a generovanie bajtového kódu pre .Net: Quercus, Project Zero, Phalanger. Nebudem zvažovať kompiláciu do neprirodzeného kódu, pretože ho nepoužívame. Vráťme sa k kompilácii do natívneho kódu.

Podľa mňa je najstarší kompilátor Roadsend. Začal sa vyvíjať dosť dávno, v roku 2002. Pôvodne to bola komerčná aplikácia. Bola zatvorená, až v roku 2007 bola vydaná do Open Source. Existuje veľmi zložitá schéma kompilácie: používa sa určitý kompilátor Bigloo pre jazyk Scheme, po ktorom sa vygeneruje natívny kód. Tento kompilátor nepoužíva Zend Engine.

Buď môžeme vygenerovať samostatný spustiteľný binárny súbor, alebo vygenerovať modul pre Apache. Je tiež možné vygenerovať binárku, ktorá bude fungovať ako webový server. Ale nefunguje to. Neviem prečo, ale vôbec mi to nefunguje.

Pokiaľ viem, na Roadsende sa momentálne nepracuje. Znovuzrodil sa ako projekt Raven, ktorý bol úplne prepísaný v C ++. Ako kompilácia používa LLVM na generovanie kódu.

Zapnuté tento moment všetko vyzerá veľmi sľubne.

Ale stále je to vo fáze tvorby. Dokonca aj v dokumentácii existujú rady, že nebudeme generovať binárne súbory. Počkaj

Všetko by bolo smutné, keby sme nemali PHC. Je to kompilátor OpenSource. Vyvíja sa od roku 2005. Jedna z jeho nevýhod: používa vstavaný systém SAPI. Neopúšťame stroj Java, Zend Engine. V zásade prekladá kód PHP do kódu modulu rozšírenia PHP. Potom sa kompiluje, ale proces vykonávania znova používa Zend Engine.

Príklad použitia PHC

Je to veľmi podobné tomu, ako pracujeme napríklad s konvenčnými kompilátormi, gcc. Prvý ukazuje, že existuje jeden binárny súbor, môžeme tiež jednoducho vygenerovať kód v „C“. Pretože po generovaní tohto kódu sa interne používa ten istý gcc, môžeme použiť vlajky, ktoré sú určené na optimalizáciu a ďalšie veci.

Išlo o aplikáciu, ktorá beží na príkazovom riadku.

Na spustenie webovej aplikácie musíte vykonať niekoľko krokov, je to dosť ťažké. Najprv musíte vygenerovať rozšírenie (Extension), potom skompilovať kód a potom ho nejako (dynamicky alebo staticky) prepojiť.

Kľúčové výhody PHC

V skutočnosti používame rovnaké PHP, máme úplnú kompatibilitu. Všetky ostatné rozšírenia sú podporované. Všetko, čo sme zostavili, používame. Celkom dobrá dokumentácia.

Mimochodom, jedným z ďalších bonusov PHC je, že môžete vytvárať prácu XML nášho skriptu na základe toho, ako je XML postavené, niekedy to môže byť užitočné.

Mínusy

Podľa mňa je to neúplný binárny súbor, pretože stále je závislý od Zend Engine. Existuje tiež určitý problém, pokiaľ ide o prepojenie webových projektov.

Hlavná vec

Pravdepodobne by sa táto reč nestala, keby sa neobjavilo riešenie od Facebooku, HipHop. Jeho tvorcovia tiež nahromadili veľké množstvo kódu PHP a dlho premýšľali, čo s tým.

Pokiaľ tomu rozumiem, potom, čo boli odmietnuté možnosti prepísať všetko, bolo rozhodnuté napísať prekladač (v tomto prípade do kódu C ++). Projekt je relatívne mladý, oficiálne vyšiel až vo februári tohto roku. Kód PHP je preložený do kódu C ++ a potom vygenerovaný štandardnými prostriedkami váš operačný systém. Pravda, zatiaľ len operačný systém Linux.

Len včera som sa na toto rozhodnutie spýtal zástupcu Facebooku. Povedal, že v súčasnosti je 100% kódu PHP zostavených prostredníctvom HipHopu. Vo svojej čistej forme kód nefunguje prostredníctvom tlmočníka PHP. Tvorcovia opäť oznámili výrazné zníženie zaťaženia procesora.

Hlavná funkcia HipHopu

Generuje priamo samotný binárny súbor, ktorý je možné vykonať na príkazovom riadku. Existuje taká možnosť, ako ho spustiť ako streamovací webový server. K dispozícii je tiež samostatný vstavaný debugger. Môžu ladiť skripty lokálne aj vzdialene (bude fungovať ako server).

Proces vytvárania je dosť netriviálny. Existuje popis, ale nie všade sa to zhromažďuje. V tejto chvíli, ako som povedal, je všetko zostavené pod Linuxom a všetko bolo spočiatku „nabrúsené“ na 64 bitov. Aj keď teraz je experimentálne podporovaných 32 bitov. Ale podarilo sa mi trochu pozbierať a opraviť - vo všeobecnosti to všetko urobil, pretože v predvolenom nastavení to nejde.

Okrem toho majú svoje vlastné verzie libcore a podľa môjho názoru existuje niekoľko knižníc, ktoré je tiež potrebné opraviť. Proces vytvárania nie je vo všeobecnosti taký jednoduchý.

Na výstupe po zostavení dostaneme určitý súbor hphp, ktorý je prekladačom nášho kódu PHP do C ++. Ak sa pozrieme na vlajky, je ich celkom dosť. Tu som vyzdvihol niekoľko základných, ktoré môžete potrebovať.

Ako konfiguračný súbor (config) môžeme použiť súbor HDF zadaním rôznych smerníc. Môžeme tam nastaviť úroveň chýb a ďalších vecí (HDF je všetko, čo je v štruktúrovanej forme). Konfiguráciu môžeme tiež prevziať z databázy alebo použiť priamo na príkazovom riadku.

Úroveň protokolovania nastavujeme počas kompilácie: zobrazovať všetky chyby alebo tiež zobrazovať varovania, Ďalšie informácie alebo si spravidla uchovajte úplný záznam o všetkom, čo sa stane.

Veľmi užitočná direktíva je input_list = FILE, ktorá nám umožňuje zadať zoznam skriptov, ktoré chceme skompilovať. Za zmienku stojí aj direktíva lazy-bind. Môžeme určiť všetky súbory projektu - tie, ktoré budú zostavené.

Príklad spustenia kompilácie skriptu PHP

Bola nainštalovaná tretia úroveň protokolovania, tu sú celkom obecné informácie o čase, môžete vidieť, koľko to trvalo. V skutočnosti je scenár veľmi jednoduchý. Toto je obvyklé „Ahoj, svet“, práve som urobil snímku obrazovky.

„Najťažší“ súbor je náš „programový“ binárny súbor, jeho veľkosť je 28 MB. V skutočnosti naše „Ahoj, svet“ váži 28 MB. Chcel by som poukázať na to, že okrem štandardného riadku „Echo“ Hello, World! “, Tento binárny súbor obsahuje oveľa viac. Je to plnohodnotný webový server, plnohodnotný server na správu.

Čo dostaneme?

Máme „Hello ...“ v jazyku C ++, ktorý plní funkciu pozostávajúcu z jedného riadka „echo“ Hello, World “. Okrem toho sa načítava veľa vecí tretích strán. Ako vidíme, toto je plnohodnotný súbor v C ++.

Toto je výsledný program. Už obsahuje pomerne veľa rôznych klávesov pre rôzne konfigurácie, ale spomeniem len niekoľko z nich.

Toto je -režim, toto je režim spustenia nášho programu. Môžeme ho spustiť priamo (od príkazový riadok) alebo vo webovom serveri alebo v režime plného démona. Existuje niekoľko ďalších možností, ale sú irelevantné.

Použitá konfigurácia v rovnakom formáte. Nedával som smernice, pretože ich je veľa. Dokumentácia je súčasťou systému HipHop. Nie je na stránke wiki, ale dokumentácia je poskytovaná s distribučnou sadou, kde je všetko jasne popísané. Nečakal som, že popis bude taký podrobný. Umožňuje celkom flexibilnú konfiguráciu riešenia.

Na spustenie v serverovom režime môžeme zadať port. Na správu sa používa samostatný port, kde môžete zadať niektoré požiadavky, ktoré vám umožnia spravovať server. Ak máme spustený ladiaci server, potom označíme hostiteľa a port, na ktorom sa „viazame“ na ladenie.

Spustiť príklad

Na vysielanie sme napríklad zadali port 9999. Vykonaním jednoduchých požiadaviek http môžeme prijímať buď štatistické údaje, alebo nejakým spôsobom spravovať server, alebo prijímať ďalšie informácie. Vo všeobecnosti je to veľmi výhodné.

Možnosť stavu

Stav servera je možné nastaviť v rôznych vstavaných formátoch (xml, json, html). V skutočnosti sú poskytnuté informácie o samotnom hlavnom procese servera a obslužných programoch - vláknach, ktoré spracovávajú požiadavky.

Dodatočné štatistiky

V skutočnosti je k dispozícii veľa štatistík. Pretože HipHop pracuje natívne s memcache a SQL ako MySQL, poskytuje detailné informácie za všetky operácie, ktoré sa s ním vykonávajú.

Úplná štatistika práce s pamäťou

Existuje veľmi užitočná funkcia- Štatistiky aplikácie. Pomocou ďalších funkcií samotného HipHopu v PHP môžeme do našich skriptov písať štatistiky, ktoré potom získavame pravidelným prístupom k http.

Ladenie

Ako som už povedal, na ladenie skriptov je možné použiť vstavaný „debug“. Je to veľmi výhodné, pretože tlmočník hphpi funguje podobným spôsobom ako ten, ktorý sme zostavili. Je rozdiel v „správaní“ skriptov, keď sú vykonávané v štandardnom PHP a pri použití niektorých údajov z kompilovaných. Na ladenie toho, čo je kompilované, Facebook napísal samostatného tlmočníka.

V prvom prípade spustite kód pomocou klávesu „-f“ a zistite, ako sa súbor správa; všetok výstup ide do štandardného výstupu. Alebo ho môžeme spustiť v režime ladenia a dostať sa do interaktívneho ladiaceho programu. Je veľmi podobný štandardnému GDB: môžete tiež nastaviť zarážky, spustiť, zadávať hodnoty premenných, sledovať a ďalšie.

Jeden z ďalšie príležitosti

Máme program, ktorý vyšiel po kompilácii. Môže byť použitý ako server RPC. Spúšťame požiadavky cez http a volaním funkcie params môžeme parameter odovzdať buď ako pole json, alebo ako samostatný parameter. Necháme vrátiť json, ktorý vráti výsledky týchto funkcií. Je to veľmi výhodné - požadovaná funkcia je už vstavaná od začiatku.

Nevýhody HipHopu

Jazykové konštrukcie a funkcie, ako sú eval (), create_function () a preg_replace () s / e, v súčasnosti v HipHopu nie sú podporované, aj keď sú všetky analogické s eval (). Je pravda, že v posledných vydaniach podľa mňa stále môžete povoliť eval () prostredníctvom konfigurácie. Neodporúča sa to však robiť. Vo všeobecnosti je zlé používať eval ().

Hlavné výhody HipHopu

Hlavným plusom je samozrejme podpora zo strany Facebooku. Funguje a vyvíja sa celkom aktívne. Okolo tohto projektu sa vyvíja komunita vývojárov. Bola napísaná úplne nová implementácia PHP.

Ako som povedal, plusom je, že sa generuje natívny kód. Nárokovaný nárast výkonu znížením nákladov na využitie CPU (testy to potvrdzujú).

Je veľmi flexibilný vo svojej konfigurácii. Bol som príjemne prekvapený, že existuje veľa možností prispôsobenia. Myslím si, že je to kvôli tomu, že projekt skutočne funguje. Všetko, čo sa používa, sa zvyšuje.

Ako som už spomenul, HipHop poskytuje niekoľko ďalších funkcií. Medzi nimi použitie ako server RPC, správa, rôzne štatistiky a mnoho ďalšieho. Mimochodom, existuje aj API pre prácu s inými jazykmi.

Pre toto riešenie bola napísaná celkom dobrá dokumentácia. Ďalšia výhoda: je to riešenie, ktoré je skutočne pripravené na použitie vo výrobe (príklad - Facebook).

Mínusy

Hlavnou nevýhodou je, že v súčasnosti je podporovaný dosť obmedzený počet modulov. Napríklad pri práci s databázou môžeme používať iba funkcie pre prácu s MySQL. Neexistuje tu žiadna podpora pre PostgreSQL.

Existuje aj taký moment ako zložitosť montáže, ktorý som už spomenul. V 32-bitových systémoch existujú problémy so zostavením. Ale myslím si, že to bude čoskoro napravené. Zatiaľ je použitá iba kompilácia z PHP 5.2. Verzia 5.3 zatiaľ nie je podporovaná, ale bude podporovaná tak, ako bolo sľúbené.

Čo by sa nemalo očakávať od kompilácie všeobecne a od spoločnosti HipHop zvlášť?

Kompilácia v žiadnom prípade nezrýchli vaše pomalé dotazy SQL voči databáze. Ak je prekážkou základňa, potom ju skompilujte alebo nekompilovajte, nebude to mať zmysel.

Kompilácia nezrýchľuje statiku načítania, iba dynamiku. Ladenie je oveľa ťažšie. Pravdepodobne si mnohí zvykli na to, že všetko je v PHP ladené jednoducho. Keď je to skompilované, už to nebude fungovať. Aj keď, ako som poznamenal, Facebook tento proces maximálne zjednodušil, bez neho by bolo zostavovanie zakaždým ešte ťažšie.

Nečakajte, že ide o akúsi „striebornú guľku“, ktorá vyrieši všetky vaše problémy. Kompilácia v skutočnosti rieši dosť úzky okruh problémov. Ak sú, tak to môže pomôcť.

Aké problémy rieši kompilácia?

Znižuje zaťaženie CPU, pretože pri aktívnej práci s PHP s veľkým počtom požiadaviek sa jeho zaťaženie značne zvyšuje. Samozrejme, rád by som vykonal niekoľko testov.

Testovanie

Prvý test (najjednoduchší) je pomerne drahá operácia, ktorej dokončenie trvá dlho. V testoch som sa pokúsil abstrahovať sám seba, nie vytvárať požiadavky pomocou externého zdroja.

Zaťaženie padá výlučne na procesor. Test ukázal, že HipHop „vyhral“ nad každým: funguje takmer jeden a pol krát rýchlejšie ako štandardný kompilátor PHP. PHC prešiel týmto testom veľmi pomaly.

Na druhý test výkonu som vzal oficiálny skript PHP, ktorý je možné stiahnuť z SVN. Vykonáva množstvo funkcií, ktoré vykonávajú triedenie, priradenie, súčet - z hľadiska matematiky dosť nákladné operácie.

HipHop bol opäť vpredu. Navyše pri štandardnom PHP je časový rozdiel asi 3 -krát. PHC si tu počínal lepšie, ale asi dvakrát horšie ako HipHop.

Na toky, ktoré spracovávajú požiadavky http, sa väčšinou používa PHP - na to treba pamätať.

Niekoľko štandardných konfigurácií (Apache s PHP, Nginx s fpm-php a zásuvný APC na ukladanie kódov do pamäte cache). Piata možnosť je HipHop.

Ak mám byť úprimný, testy som nespúšťal na serveri, ale na prenosnom počítači. Čísla, samozrejme, nemusia úplne zodpovedať skutočnosti, ale v tomto prípade sú výsledky normálne. Stojí za zmienku, že so zvyšujúcim sa zaťažením sa súčasne zvyšuje počet požiadaviek a celkový počet požiadaviek. Ďalej je RPS. Testovali sme štandardnú stránku, ktorá obsahuje 10 jednoduchých začlenení. V zásade ide o testovanie PHP ako tlmočníka.

Otázka od publika: Aké sú čísla v bunke - sekundy?

Alexey Romanenko: Toto je fps.

Tu môžeme konštatovať, že s nárastom počtu súbežných požiadaviek sa HipHop správa veľmi dobre.

To je jasné pomocou APC je štandardná prax. Ukazuje, že napríklad ako Apache pridáva približne 2 -násobný nárast výkonu. Nginx to má tiež. Ale skutočnosť, že Nginx je pomalý, neznamená, že je tento balík horší. Len konkrétny test. Ak tu skutočne testujeme, Apache „zomrie“ na pomalé požiadavky.

Pravdepodobne chcem pochopiť, či to potrebujeme alebo nie.

Kedy by ste mali zvážiť kompiláciu?

S najväčšou pravdepodobnosťou je to potrebné v prípade, keď vidíme, že našou prekážkou je procesor. Ak „narazíme“ na procesor pomocou PHP ako štandardného tlmočníka, pravdepodobne stojí za zváženie, že možno časť projektu možno zostaviť.

V niektorých prípadoch, keď na spustenie svojej aplikácie potrebujete autonómiu, je nepravdepodobné, že by táto metóda fungovala.

Zníženie počtu serverov. Keď je veľa serverov, potom znížením výkonu, zhruba povedané, znížime číslo na polovicu. Keď je to jeden server, nedáva to zmysel, ale keď ich je 100-200, potom to asi dáva zmysel.

Hlavným dôvodom, prečo Facebook začal používať HipHop, je prítomnosť veľkého množstva kódu PHP, ktorý nie je možné prepísať (alebo neexistuje žiadny alebo je jednoducho drahý). 2x zvýšenie produktivity je už dobrá vec.

Asi všetko. Čakanie na otázky.

Otázky a odpovede

Otázka od publika: Ahoj. Prosím, povedzte mi, či máte okrem Facebooku aj ďalšie príklady úspešných implementácií Hiphopu. Chcete preniesť webovú stránku RBC napríklad na HipHop? Alexey Romanenko: Začnem tým druhým. Web RBC je ťažké preložiť. O úspešnej implementácii. PHP Unit som zostavil sám, úspešne sa skompilovalo. Tiež, pokiaľ viem, doska PHP Bunty sa úspešne kompiluje. Mnoho organizácií už kompiláciu používa. Ďalšie testy ukážu, ako odôvodnené bude použitie tohto projektu. Otázka od publika: Môžete uviesť príklad organizácie, ktorá ju používa? Alexey Romanenko:Úprimne, teraz vám to nepoviem, ale toto je Západ. Pokiaľ viem, nikto to tu nepoužíva. Otázka od publika: Aký je rozdiel za behu, okrem nedostatku podpory pre niektoré z funkcií, ktoré ste uviedli. Ako nebezpečné je prekladať živý projekt? Alexey Romanenko: Rozdiel je v tom, že každý skompilovaný program môže zlyhať. Možno sa objavia nejaké problémy, ktoré ešte neboli identifikované. V skutočnosti existuje množstvo rozdielov v „správaní“ samotného PHP. Nespomínal som ich, pretože podrobnejšie informácie nájdete v dokumentácii. Tím Facebooku napísal vlastného tlmočníka, čo je v skutočnosti 99,9% ekvivalent k tomu, ktorý bude fungovať v kompilovanej forme. Je lepšie testovať kód nie pomocou štandardného tlmočníka PHP, ale, ako som povedal, hphpi pre PHP.