Sammenligning af Node.js vs PHP-ydelse

I onlineudviklingsverdenen er Node.js og PHP nogle af de mest populære platforme, der bruges.

PHP blev første gang frigivet i 1995, efterfulgt af Node.js i 2009, og de bruges begge hovedsageligt som et script-sprog på serversiden til udvikling af webbaserede applikationer. Dog begynder Node.js også at blive brugt som en desktop-applikationsudviklingsplatform.

PHP begyndte som et dynamisk sprog til at opdatere HTML-sider med sytax svarende til Perl og startede som et ret grundlæggende programmeringssprog. Node.js brugte det allerede veletablerede JavaScript-sprog og skabte en ny udviklingsplatform oven på V8 JavaScript-motoren. Med tiden fik PHP flere og mere avancerede programmeringsfunktioner, såsom en objektorienteret programmeringsmodel, navneområder, pakkehåndtering og undtagelser.

I denne artikel skal vi kigge på præstationsforskellene mellem disse to platforme, nogle populære PHP-udvidelser for at forbedre ydelsen, såsom Zend JIT-runtime og HHVM PHP runtime-projekt, og nogle tredjeparts benchmarks for disse udvidelser.

Grundlæggende om PHP- og Node.js-ydeevne

Et område, hvor der har været en sund konkurrence mellem PHP og Node.js, er inden for præstationsområdet.

PHP – fortolket kompilering

Standard PHP Zend-runtime bruger en tolket kompilationsstrategi, der fører til mindre optimeret kodeudførelse end en god JIT- (Just-in-Time) -baseret runtime.

Node.JS – Just-in-Time-kompilering vha. V8

Node.js bruger Just-in-Time-kompilering med V8 JavaScript Engine. Denne strategi for dynamisk typede sprog har bevist sig selv, men øger ofte opstartstiden lidt.

Forøg PHP-ydelse: OPcaching, JIT-kompilering og HHVM

Flere populære udvidelser er udviklet – designet til at forbedre PHP-ydelsen.

OPcaching i PHP

Zend PHP 5.5+ har også en cachemotor kaldet OPcache, der gemmer forudkompileret script-bytecode i delt hukommelse og derved fjerner behovet for PHP til at indlæse og analysere scripts på hver anmodning. Dette er ikke så performant som JIT-kompilering, men er en stabil funktion, der fungerer nu. Du kan aktivere PHP 5.5 OPcache, hvis den af ​​en eller anden grund ikke er aktiveret som standard (som det skulle være med PHP 5.5 eller nyere).

PHP Kørselsalternativer: HHVM & Hack

HHVM er en virtuel open source-maskine designet til at køre applikationer skrevet i PHP og / eller hacksproget.

HHVM bruger en Just-in-Time (JIT) kompilationsmetode for at opnå bedre ydelse. Node.js udfører også JIT-kompilering ved hjælp af V8 JavaScript-runtime.

For at få mest muligt ud af HHVM JIT-samlingen er det vigtigt at sætte din kode i funktioner, især til de mere tidskrævende kodedele.

Hacksprog giver mulighed for ydeevne forbedringer hovedsageligt på grund af disse sprogfunktioner:

  • Async-programmering: Kør separate blokke af kode parallelt (ved hjælp af forskellige tråde)
  • Skriv annoteringer: Forbedre ydeevnen med et mere forudsigeligt type miljø

JIT-kompilering i fremtidige PHP-udgivelser

Der har været diskussion og udvikling for at bruge JIT-kompilering i en fremtidig frigivelse af PHP Zend-runtime. JIT til PHP giver mere end fem gange speedup på bench.php og så højt som en 30 gange forbedring på nogle andre specifikke benchmarks som Mandelbrot.

Multi-Tasking i Node.js og PHP

Node.js og PHP adskiller sig i deres tilgang til samtidighed, med Node.js ved hjælp af en ikke-blokerende begivenhedsløkke (kører i en enkelt proces) og standard PHP Zend-runtime ved hjælp af en blokeringsproces.

Af denne grund lanceres ofte flere PHP-processesser fra webserveren for at kunne fortsætte med at servere webanmodninger. I Apache kan du indstille det maksimale antal PHP-processesser, der er tilladt at køre, og dette fungerer fint til mange typer webapplikationer.

Nu, når det arbejde, der udføres i disse processesser har en tendens til at være langt (er) -running, kan serveren hurtigt løbe tør for den tilgængelige PHP-processesse. Dette vil få HTTP-anmodningens responstider til at stige, måske endda til det tidspunkt, hvor anmodninger udløber.

Webservere som Apache og NGINX har måder at forbedre PHPs multi-tasking-ydeevne til en vis grad, men disse er mere begrænset end sand sprogunderstøttelse til multi-tasking.

Der arbejdes på flere projekter for at få PHP asynkron behandling (multi-tasking) til at fungere bedre. Det mest populære er HHVM-projektet, der blev frigivet i 2014 af Facebook; et andet projekt, der tackle PHP-samtidighed, er pthreads.

Node.js vs PHP Performance Benchmarks

Så hvad kan disse PHP-udvidelser bringe os med hensyn til ydelse sammenlignet med standard PHP eller Node.js?

Lad os se på et par forskellige benchmarks, som folk har gjort.

Benchmark 1: Enkle HTTP-anmodninger

Klik på billedet for at gå til benchmarkwebstedet og se de fulde installationsoplysninger.

Node.js vs PHP-præstationsanmodninger pr. Sekund

Node.js vs. PHP-ydelse og anmodninger, der håndteres pr. Sekund

Bemærkninger:

  • Denne HTTP-kontrollerede “hej verden” benchmark anvendte Zend PHP 5.6.6 med OPcache aktiveret.
  • Testen blev udført ved hjælp af Apache ab benchmarking-værktøjet.
  • Ydelsen for Zend PHP er mindre end halvdelen af ​​Node.js.
  • Ydelsen for HHVM er omkring 74% bedre end Zend PHP.
  • Ydelsen på HHVM er meget tæt på Node.js, men Node.js er stadig ca. 17% hurtigere.
  • Ydelsen i ydelsen, når du bruger WordPress med HHVM, er ca. 47%.

Benchmark 2: HTTP + CPU-opgaver

Klik på billedet for at gå til benchmarkwebstedet og se de fulde installationsoplysninger.

Node.js vs PHP-ydeevne med CPU-tung opgave med at køre en boble sortering

Node.js vs. PHP-ydeevne med CPU’s tunge opgave at køre en boble sortering

Bemærkninger:

  • Dette HTTP-boble-sort-job-benchmark anvendte Zend PHP 5.5.7 med OPcache aktiveret.
  • PHP-responstiderne nedbrydes hurtigt efter udtømning af den tilgængelige PHP-procespool (ved hjælp af et standardmaksimum på 250 processer på webserveren).
  • HHVM-ydelsen svarer til Node.js op til 1.000 sorteringselementer, men med 10.000 sorteringselementer var Node.js cirka dobbelt så hurtig HHVM (ikke synlig på dette diagram).

Benchmark 3: CombSort streng CPU-test

Følgende CombSort-sorterings benchmark er en streng CPU-test.

Resultat af benchmark:

CPU-tid
Systemtid
vædder

PHP 5.6.4102.69s104.20s2497508 KB
HHVM 3.5.012.56s14.83s362488 KB
Node.js v0.10.352.64s2.64s92240 KB

HHVM er syv gange hurtigere end almindelig PHP (efter systemtid), men Node.js er mere end fem gange hurtigere end HHVM i denne antalknusende test.

Med hensyn til RAM-brug er HHVM meget mere effektiv end PHP, men Node.js er endnu bedre.

Afsluttende tanker om Node.js og PHP-ydeevne

For de fleste PHP-applikationer giver HHVM klart et betydeligt ydeevne boost takket være JIT-kompilering. Det samme vil sandsynligvis være tilfældet, når Zend runtime JIT-funktionen er stabil og frigivet. Hvor meget PHP JIT-samlingen forbedres ved ikke-JIT PHP er også et spørgsmål om kodeorganisering (især de tidskrævende kodedele).

I bedste fald er HHVM på niveau med Node.js, men i nogle tilfælde vil Node.js klart klare sig meget bedre (f.eks. Til CPU-bundne opgaver). Der er også flere async-kodemoduler til rådighed for Node.js.

Der er løbende diskussion om fremtiden for Zend- og HHVM PHP-driftstiderne. HHVM ser også ud til at blive endnu hurtigere ved at bruge LLVM senere på året.

Hvis du er interesseret i at overvåge din PHP-applikations ydeevne bedre, kan du måske se på disse leverandører af performance-dashboard-løsninger:

  • Ny relikvie: Giver dig mulighed for at spore applikationsproblemer som Apdex-score, responstider, anmodninger pr. Minut og fejl. Derefter kan du bore ned til kodedele, der forårsager visse ydelsesproblemer
  • DataDog: Tilbyder realtidsapplikationsmetrics med et interaktivt dashboard
Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me