Programavimas

„Facebook“ išrado virtualią PHP mašiną

Socialinių tinklų milžinė „Facebook“ žengė dar vieną žingsnį, kad PHP žiniatinklio programavimo kalba veiktų greičiau. Bendrovė sukūrė „PHP Virtual Machine“, kuri, jos teigimu, gali net devynis kartus greičiau paleisti kalbą nei savaime paleisti PHP didelėse sistemose.

„Mūsų tikslas yra priversti PHP paleisti tikrai labai greitai“, - sakė „Facebook“ inžinerijos vadovas Joelis Pobaras. Nuo šių metų pradžios „Facebook“ visuose savo serveriuose naudojasi virtualia mašina, vadinama HHVM („HipHop Virtual Machine“).

[Sužinokite, kaip dirbti protingiau, o ne sunkiau, apžvelgdami visus patarimus ir tendencijas, kuriuos programuotojai turi žinoti „Developers Survival Guide“. Atsisiųskite PDF jau šiandien! | Sekite naujausias kūrėjų naujienas naudodami „Developer World“ naujienlaiškį. ]

Pobaras aptarė virtualią mašiną OSCON („O'Reilly Open Source Conference“) konferencijoje, vykstančioje šią savaitę Portlande, Oregone.

„HHVM“ nėra pirmasis „Facebook“ bandymas pritaikyti PHP, kad būtų galima greičiau naudoti. PHP yra aiškinama kalba, o tai reiškia, kad šaltinio kodą procesorius vykdo tiesiogiai. Paprastai kalbant, aiškintomis kalbomis, pvz., PHP, parašytos programos dažniausiai nevykdo taip greitai, kaip kalbos, tokios kaip C arba C ++, kurios iš anksto buvo sukompiliuotos į mašininės kalbos baitų kodą. „Facebook“ išliko ištikima PHP, nes ją plačiai supranta daugelis kompanijoje dirbančių interneto programuotojų.

Tačiau, norėdamas neatsilikti nuo nepasotinamų vartotojų poreikių, „Facebook“ iš pradžių sukūrė kompiliatorių, vadinamą „HipHop“, kuris PHP kodą pavers C ++ formatu, todėl jį būtų galima sukompiliuoti iš anksto, kad greitesnis veikimas būtų pasiektas.

Nors „Facebook“ keletą metų naudojosi šia pirmosios „HipHop“ versijos našumu, ji ieškojo kitų būdų, kaip pagreitinti dinamiškai sukurtų tinklalapių pristatymą maždaug savo milijardui vartotojų. „Mūsų veiklos strategija tuo tikslu buvo išnaudota“, - prisipažino Pobaras.

HHVM yra kitas „Facebook“ žingsnis. Maždaug trejus metus kuriama HHVM iš tikrųjų veikia tuo pačiu principu kaip ir JVM („Java Virtual Machine“). HHVM turi JIT (just-in-time) kompiliatorių, kuris prireikus konvertuoja žmogaus skaitomą šaltinio kodą į mašinoje nuskaitomą baito kodą. (Ankstesnis „HipHop“, pervadintas į HPHPc, dabar „Facebook“ buvo išleistas.)

Šis JIT metodas leidžia virtualiajai mašinai „vykdyti protingesnius sprendimus vykdymo metu“, - sakė Pobaras. Pavyzdžiui, jei į „MySQL“ duomenų bazę kreipiamasi norint perskaityti duomenų eilutę, HHVM gali skristi ir išsiaiškinti, kokio tipo duomenys tai yra, pavyzdžiui, sveikasis skaičius arba eilutė. Tada jis gali sugeneruoti ar paskambinti kodą, kuris geriausiai tiktų tvarkyti šio tipo duomenis.

Su senuoju „HipHop“ „geriausia, ką ji gali padaryti, tai išanalizuoti visą„ Facebook “kodų bazę, pagrįsti ją ir tada specializuotis kodą, remdamasi jo samprotavimais. Bet jis negali tinkamai pagrįsti argumentų. Yra tam tikrų kodo bazės dalių, jūs negalite paprasčiausiai daryti išvados ar motyvuoti “, - sakė Pobaras.

Pobaras apskaičiavo, kad HHVM yra maždaug dvigubai greitesnis nei HPHPc, ir maždaug devynis kartus greitesnis nei bėgimas tiesiu PHP.

„Facebook“ paskelbė HHVM kodą „GitHub“, tikėdamasi, kad kiti jį naudos ir savo PHP svetainėms paspartinti.

HHVM yra optimizuotas tvarkyti labai dideles ir labai naudojamas PHP kodų bazes. Pobaras skaičiavo, kad naudojant HHVM standartinio dydžio svetainėms, tokioms kaip „Wordpress“ tinklaraščio talpinimas, našumas pagerės tik penkis kartus.

"Jei paimsite šiek tiek PHP ir paleisite jį į„ HipHop “, procesoriaus vykdymo laikas [gali] būti ne našiausias veiksnys. Yra tikimybė, kad [sistema] praleidžia per daug laiko kalbėdama su duomenų baze arba praleidžia per daug laiko kalbėdama su [ ] memcache "talpyklos sluoksnis, sakė Pobaras.

Joabas Jacksonas aptaria įmonės programinę įrangą ir bendrąsias naujienas apie technologijas Naujienų tarnyba. Sekite Joabą „Twitter“ adresu @Joab_Jackson. Joabo el. Pašto adresas yra [email protected]

$config[zx-auto] not found$config[zx-overlay] not found