» »

[PHP] Zend engine?

[PHP] Zend engine?

fiction ::

Sicer se s programiranjem v PHP-ju (skoraj da) ne ukvarjam,
me pa vseeno zanima par osnovnih konceptov delovanja.

Do PHP3 je ocitno vse skupaj delovalo tako da je se je pognal
nek interpreter nad .php fajlom in to je bilo to.
Samo kako pa je to sedaj s PHP 4 in 5, ki imata t.i. Zend I oz. II
engine? Najprej kaj sploh je tocno Zend engine? Kolikor
sem dojel je to nek VM za izvajanje PHP bytecoda... je to res?

Kdaj se ta bytecode ustvari?
JIT ali se dejansko cela .php datoteka (ali vec datotek) prevede v to vmesno kodo?

Vprasanje, ki se mi postavi pri tem je: zakaj naj bi to
(prevajanje v bytecode in izvajanje tega na nekem navideznem
stroju) bilo hitrejse kot pa samo izvajanje PHP skripte korak-po-koraku
(pri obeh je potreben nek "interpreter")?
Ocitno ta prevajalnik, ki "vidi" vecji chunk kode na enkrat zelo
pooptimizira zgeneriran bytecode?

Ce je vedno potrebno to prevajanje, zakaj ne bi potem
tega naredil samo enkrat, pustil na disku prevedene zadeve in jih
takrat ko je treba pognal v Zend enginu?
Edini problem vidim samo v vecji velikosti teh datotek.

Na strani od Zenda sem zasledil Zend Optimizer in Zend Guard.
Kaj tocno ti dve zadevi delata?
Zend Optimizer mi zgleda kot neko okolje, ki omogoca
izvajanje .phb datotek (tako da jih direktno poda Zend enginu).

Zend Guard pa je ocitno namenjen prevajanju PHP datotek
v .phb (poleg tega da je omenjeno se "obfuscatanje" - kar
pa ne vem ce je nek dodaten feature ali pa je misljeno ze samo
prevajanje v ta manj razumljiv vmesni jezik).

Ne razumem zakaj je Zend Guard tako drag, ce pa se
prevajanje zgodi itak implicitno vsakic, ko se poklice neka PHP skripta
oz. obstaja tudi bcompiler.
Je mozno s pomocjo bcompilerja generirati .phb datoteko, ki jo lahko potem direktno
podas Zend Optimizerju (tako da odpade tisto vsakokratno prevajanje .php datoteke
in bi clovek lahko kar direktno v browser napisal URL od .phb datoteke)?

zaj_tam ::

Če prevedeš skripte deluje vse skupaj zelo hitreje. Prevedeš jih pa lahko s softwerom, ki ti ga Zend mastno zaračuna. In zato običajno ne prevajaš :>

Zend optimizer mislim, da je koristen tudi za neprevedeno kodo in obvezen za prevedeno. Natančen postopek mi ni znan, ampak menda se običajna koda delno prevede in začasno pomni znotraj zend engina.

No nisem čisto sure. Bo kaki ekspert več povedal.

BTW: A ni z vsemi intepreterji tako, da se koda najprej prevede in nato požene?

Zgodovina sprememb…

  • spremenil: zaj_tam ()

Gandalfar ::

ne nujno, lahko jo v realnem casu interpretiras. Zacnes na vrhu in gres navzdol ane

arjan_t ::

kolko vem npr. eAccelerator "shranjuje" kompajlane php datoteke za hitrejše izvajanje

fiction ::

> Če prevedeš skripte deluje vse skupaj zelo hitreje. Prevedeš jih pa lahko s softwerom, ki ti ga Zend mastno zaračuna.
> In zato običajno ne prevajaš :>

Ja, samo ravno to mi ni cisto jasno. Ti bi teoreticno lahko tudi brez Zend Guarda prevedel skripte.
Zakaj tega nihce ne pocne oz. kaj tocno je tista dodana vrednost, ki jo pridobis s placilom.. ti zgenerira potem
boljso vmesno kodo (tako ki se hitreje izvaja oz. je tezje berljiva) ali kaj?

> BTW: A ni z vsemi intepreterji tako, da se koda najprej prevede in nato požene?

A ni interpreter po definiciji nekaj kar po vrsti interpretira - torej izvaja korak za korakom dolocene ukaze?
Navidezni stroj je interpreter ker se ta program obnasa kot da bi bil procesor in izvaja
"strojne ukaze", ki pa so tukaj v resnici ta vmesna koda.
Problem tega je da vse skupaj bolj pocasi deluje.

Zato se kolikor vem uporablja za izvajanje vmesne kode na nekem realnem procesorju JIT (Just-In-Time) prevajanje
kar ubistvu pomeni, da se vzame nek del vmesne kode, se jo prevede v realne strojne ukaze in jih
poda procesorju ter zato ni vec treba imeti neke programske emulacije procesorja.

Samo kot sem ze rekel pri PHP-ju ne stekam tocno prednosti (morebitnega) JIT prevajanja.
Na koncu je itak treba interpretirati ali PHP skripto ali pa to (JIT prevedeno) vmesno kodo, saj ne dobis
v nobenem primeru strojnih ukazev.

Zgodovina sprememb…

  • spremenil: fiction ()

Gandalfar ::

Sej mas npr.: eAccelerator: PHP Accelerator, optimizer, dynamic content cache - Trac

Sam tu nimas tako podrobne dokumentacije kot pri Zendu, verjetno se ne integrira tako lepo v Zend Studio, ni phone supporta pa taksnih for. Te Zend Engine stvari so bolj zanimive za enterprise kupce kot vikend programerje

arjan_t ::

ni zend guard namenjen samo kodiranju php fajlov in ne dejanskemu kompajlanju?

fiction ::

Hm na strani pise "encode & obfuscate" potem je pa se ena kocka kjer pise "licence". :)
Ne vem kaj tocno si lahko pod tem predstavljam. Mozno tudi da gre samo za obfuscatanje PHP sourca (samo
zakaj bi rekli potem encode).

"The Zend Optimizer is a free application that runs the files encoded by the Zend Guard, while enhancing the performance of PHP applications."
To je spet neka taka bullshit definicija. Manjka samo se da bi pisalo kako izboljsa uporabnisko izkusnjo. :)

Aja pa zakaj bi rabil Zend Optimizer za izvajanje z Zend Guard encodanih datotek (ce
pa bi to bile se vedno veljavne, le tezje berljive, PHP datoteke).
Vse skupaj si jaz razlagam tako, da je Zend Optimizer nek nacin kako pozenes PHP vmesno kodo (torej da se .phb prebere
z diska in poda Zend enginu). Pri cemer zna zadeva ocitno se prej narediti nad to kodo dolocene transformacije (in jo optimizirati),
ampak to pri kodi, ki jo sproducira Zend Guard naceloma ni vec potrebno (ker se je ta korak ze prej naredil).
Mogoce je ravno to (poleg phone supporta in ostalih enterprise bonbonckov) tisto kar je vredno skoraj 1000 dolarjev na leto? :)

Gandalfar ::

predpostavka je, da firma ki stoji za PHP-jem lahko naredi kaksen bonboncek, ki ga open-source nima


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Pri Facebooku napisali svoj PHP prevajalnik (strani: 1 2 )

Oddelek: Novice / Zasebnost
5315888 (13391) nodrim
»

tehnologije za web aplikacije

Oddelek: Programiranje
101858 (1583) upirna
»

Skrivanje php kode na strežnikih

Oddelek: Izdelava spletišč
181456 (1125) attackiko
»

Apache in obremenjenost CPUja

Oddelek: Programska oprema
91041 (939) uros678
»

o kešu in izdelavi spletišč

Oddelek: Izdelava spletišč
341743 (1230) darh

Več podobnih tem