Innova Manet

E-commerce con Node.js

Il modello tradizionale di e-commerce basato su PHP sta mostrando in modo sempre più evidente i suoi limiti in termini di performance e scalabilità.

Allo stato attuale, questo tipo di modello richiede dei considerevoli interventi a livello macchina per l'ottimizzazione delle prestazioni, senza la quale non è possibile affrontare l'aumento del traffico e delle transazioni sul sito.

Node.js, grazie ad un consumo minimo di risorse e a performance superiori dovute al suo design asincrono e non bloccante, si sta imponendo sempre di più come soluzione alternativa allo stack LAMP o LEMP.

Il problema

Ci siamo passati tutti: il nostro sito finalmente comincia a produrre risultati in termini di visite e ordini ma ci accorgiamo che comincia ad essere lento. Le pagine si caricano alla moviola, spesso restano parzialmente bianche e il browser continua a girare all’infinito. Ogni volta che proviamo a caricare nuovi contenuti è un’odissea in termini di velocità: lentezza esasperante ed errori in continuazione.

Ma il peggio è che i nostri visitatori cominciano a stancarsi della situazione, quindi invece che usare il nostro sito per acquistare prodotti o servizi preferiscono rivolgersi ai siti concorrenti che non offrono spesso servizi migliori ma che in compenso non ci impiegano un minuto solo per aprire la home page.

Disperati cerchiamo lumi. Siete su un hosting condiviso? Vi diranno di passare ad un server dedicato. Ma noi non siamo sistemisti, quindi dobbiamo spendere una cifra non indifferente per il trasferimento e la configurazione ottimizzata del sito. Stiamo perdendo clienti, quindi non possiamo aspettare oltre.

La pezza

Con soddisfazione notiamo che il sito è tornato ad essere veloce, i visitatori cominciano a tornare e presto se ne aggiungono altri e poi altri. Ad un certo punto notiamo di nuovo dei rallentamenti, che presto cominciano a diventare rilevanti e dopo qualche tempo ci troviamo di nuovo al punto in cui eravamo partiti, nonostante abbiamo investito nel dare risorse (CPU, RAM, spazio su disco, cache ecc.) al nostro sito.

Quindi il punto non sono le risorse a disposizione, ma come la tecnologia con cui è sviluppato un sito usa queste risorse.

La soluzione

Dettagli

  1. Basato su JavaScript.
  2. Il codice viene eseguito da V8, lo stesso motore scelto da Google per il browser Chrome.
  3. Design basato sull’ asincronicità delle operazioni.
  4. Modello di input/output non bloccante.

Cosa vuol dire?

A differenza di quanto avviene con PHP nella gestione delle query ad un database, questo tipo di operazioni non pone Node in uno stato di blocco nell’attesa dei risultati. All’atto pratico questa scelta di design si concretizza in un risparmio delle ore di lavoro necessarie per implementare un sistema di caching delle query. Si è online prima e con prestazioni enormemente aumentate.

Un altro punto di forza è l’estendibilità. A differenza di quanto avviene in PHP, dove le estensioni sono compilate e non più modificabili una volta aggiunte al core, in Node tali estensioni prendono il nome di moduli e sono liberamente modificabili dagli sviluppatori che possono decidere sia di renderle pubbliche tramite NPM ( Node Package Manager ) che di mantenerle private limitandole al singolo progetto.

Più sicurezza

La sicurezza poi è un altra caratteristica di Node. In PHP, a meno che lo sviluppatore non abbia provveduto diversamente, i file eseguibili del linguaggio sono liberamente accessibili da remoto. Tecnicamente questo avviene perché il web server (solitamente Apache o nginx) per impostazione predefinita rende accessibili tutti i file caricati o creati nello spazio web.

In Node è lo sviluppatore che crea il web server tramite l’apposito modulo di Node e a meno di non rendere espliciti i percorsi dei file lato codice, tali file risultano irraggiungibili da remoto. Un controllo totale sui protocolli HTTP ed HTTPS interamente nelle mani di chi realizza il progetto.

MongoDB: l'alternativa a MySQL

Cos'è MongoDB

MongoDB rappresenta la punta di diamante dei database non relazionali. Rispetto a MySQL, offre una velocità nel reperimento dati notevolmente superiore e una maggiore adattabilità.

Dettagli

Infatti mentre con MySQL lo schema iniziale dei dati è definito in modo rigido e difficilmente modificabile se non aggiungendo nuove tabelle e appesantendo il database, con MongoDB il database, basato sulle collezioni di documenti, si adatta facilmente alle nuove esigenze senza per questo aggiungere strutture a quelle già esistenti.

Il linguaggio di interrogazione di Mongo è JavaScript, lo stesso di Node. Inoltre i dati vengono salvati in formato JSON binario, e JSON è un formato di scambio dei dati nato da JavaScript.

Il tallone di Achille di molti siti di e-commerce è rappresentato dal motore di ricerca e dalla sua velocità nel reperire i dati. Con Mongo la velocità delle ricerche testuali aumenta notevolmente e, dato che Mongo supporta i tipi di dati relativi alla geolocalizzazione, è ora possibile supportare e-commerce con magazzini e sedi situati in tutto il mondo, generando ad esempio mappe dinamiche che mostrano la reperibilità dei prodotti nelle varie sedi.

nginx: l'alternativa ad Apache

Cos'è nginx

Il web server nginx è la soluzione preferita da abbinare con Node per ottenere ancora maggiori prestazioni.

nginx è una soluzione nuova rispetto ad Apache ed è in grado di gestire traffici molto elevati con un consumo minimo di risorse.

Con Node nginx può servire le risorse statiche come file CSS, JS, immagini, documenti e video riducendo a zero il carico su Node e abilitando al contempo non solo il caching e la compressione delle risorse ma anche una serie di caratteristiche avanzate che sfruttano appieno il tipo di storage in uso sul sistema operativo.

Separando la gestione dei contenuti (affidata a Node) da quella delle risorse statiche (affidata ad nginx), si ottengono prestazioni scalabili nel tempo e si evitano rallentamenti nel caricamento delle pagine essendo ora il carico meglio distribuito.

Conclusione

Se vuoi uscire dalla gabbia di PHP e dei CMS open-source e vuoi schiacciare il pedale dell'acceleratore, allora Node.js è l'alternativa che fa per te.