Node.js vagy PHP

A napjainkat leginkább meghatározó két szerveroldali szkript nyelv között a sync és async folyamatok támogatottságában van a legnagyobb különbség. A PHP alapértelmezetten a sync feldolgozást, a Node.js az async-et támogatja.

Az eltérés legésszerűbb oka az, hogy mindkét technológiát más-más időben és technológiai klímában vezették be (PHP – 1995, Node.js – 2009), mindkettő erős alternatívának számít a webalkalmazások hátterében, nyílt forráskódúak, és jelentős támogató közösséggel rendelkeznek.

sync-vs-async-schema.svg

Az aszinkron programozás előnyei

Nincs egymásra várakozás a processeknél. Mindegyik egymástól függetlenül, azonos sebességgel futhat. Egyik process hibája nincs hatással a többi processre. A holtidők megszüntetése sokkal gyorsabb futási sebességet ígér.

Az egyes folyamatokat jobban ki tudjuk dolgozni, a felhasználó igényeihez jobban tudjuk igazítani.

Az aszinkron programozás hátrányai

Az előnyöket csak akkor tudjuk kihasználni, ha a processek között valóban nincs kapcsolat! Ha a processek azonos erőforrásokat használnak, akkor előforduldulhat a szakirodalomban Race Condition-nek nezevett jelenség.

A sok alfolyamat közötti összefüggés nem csak a programozók, de a keresőmotorok számára is nehezebben átlátható.

Melyiket válasszam?

Itt meghatározó, hogy milyen feladatot kell megoldani. Amennyiben nincsenek nyelvi problémák és mindkét nyelvet megfelelően ismerem:

Ha a projekt nagyobb részt statikus, amely kevés ügyfélkérést igényel, és a célközönsége kisebb teljesítményű eszközöket használ, a PHP a megfelelő választás.

Ha a használati eset olyan dinamikus webhelyeket tartalmaz, amelyek gyakran küldenek szerverkéréseket, és dinamikus felhasználói felülettel rendelkezik, akkor érdemes a Node.js-t használni.

Ha olyan felhasználói felületet igénylő alkalmazást hoz létre, amelyben a felhasználói élmény az elsődleges szempont. Ebben az esetben az aszinkron hívások lehetővé teszik, hogy a felhasználói felület gyorsan épüljön fel.

Fogalmak

Az általunk elkészített program egy fájl mindaddig, amíg nem kezdjük el futtatni. A végrehajtása az operációs rendszer feladata. Neki kell a memóriába tölteni és biztosítani a végrehajtáshoz szükséges egyéb erőforrásokat (további memóriát, regisztereket, CU, ALU, bemeneti/kimeneti erőforrásokat). ben process-ként jelenik meg. A programunk azonban több részre, több folyamatra is szétbontható, amelyek egyenként több szálat is tartalmazhatnak. Az alkalmazott operációs rendszertől és a hardvertől is függ, ezeket a lehetőségeket mennyire hatékonyan tudjuk kihasználni.

Threads.svg

PHP Threads

A szálak egymástól független feladatok egy folyamaton belül. Midegyik szálnak saját memória, regiszter és verem igénye van, ezért a számítógép-architektúra meghatározza, mennyi szálat índíthatunk a folyamaton belül.

PHP Asynchronous functions

A PHP-hoz készült egy Spatie csomag, amelynek használatával Async műveleteket tudunk indítani. Telepítése a composer require spatie paranccsal megoldható. Használatba vétele a use Spatie\Async utasítás kiadása

Laravel Async

Symphony Async

Zend Async