Node.js contro PHP: una battaglia epica per lo sviluppatore mindshare

È una classica trama di Hollywood: la battaglia tra due vecchi amici che si separarono. Spesso l'attrito inizia quando un amico suscita interesse per quello che era sempre stato il dominio non detto dell'altro amico. Nella versione in linguaggio di programmazione di questo film, è l'introduzione di Node.js che trasforma il buddy flick in una partita di rancore: PHP e JavaScript, due partner che una volta governavano Internet insieme ma ora si scontrano per la condivisione mentale degli sviluppatori.

Ai vecchi tempi, la partnership era semplice. JavaScript ha gestito piccoli dettagli sul browser, mentre PHP ha gestito tutte le attività lato server tra la porta 80 e MySQL. È stata un'unione felice che continua a supportare molte parti cruciali di Internet. Tra WordPress, Drupal e Facebook, le persone difficilmente possono passare un minuto sul web senza imbattersi in PHP.

Poi un ragazzo intelligente ha scoperto che poteva far funzionare JavaScript sul server. All'improvviso, non è stato più necessario utilizzare PHP per creare la prossima generazione di stack di server. Per creare Node.js e i framework in esecuzione sul client è bastato un linguaggio. "JavaScript ovunque" è diventato il mantra per alcuni.

Da quella scoperta, JavaScript è esploso. Gli sviluppatori di Node.js possono ora scegliere tra una raccolta in continua espansione di framework e scaffolding eccellenti: React, Vue, Express, Angular, Meteor e altri. L'elenco è lungo e il problema più grande è scegliere tra opzioni eccellenti.

Alcuni considerano il boom di Node.js come una prova che JavaScript sta decisamente vincendo, e ci sono molti dati grezzi per rafforzare questa visione. GitHub segnala che JavaScript è il linguaggio più popolare nella sua raccolta di repository e anche il cugino baciante di JavaScript, TypeScript, è in rapida crescita. Molti dei progetti più interessanti sono scritti in JavaScript e molti degli hashtag più popolari fanno riferimento ad esso. PHP, nel frattempo, è scivolato dal terzo al quarto posto in questa classifica ed è probabilmente scivolato ancora di più nel conteggio dei comunicati stampa, dei rollout dei prodotti e di altri momenti fortemente commercializzati.

Ma l'hype svanisce e il software può sopravvivere per decenni. La maggior parte della base di codice PHP non verrà migrata e continuerà a servire grandi porzioni del testo che leggiamo ogni giorno. Secondo alcune stime, il 40 percento delle pagine che visualizziamo iniziano, in qualche modo, con PHP. Parte di questo è dovuto al fatto che PHP continua a rinascere. Negli ultimi anni, le viscere dei sistemi che eseguono PHP sono state completamente riscritte. Non è lo stesso codice PHP che gestiva il sito web di tuo nonno.

Il compilatore rapido e just-in-time di PHP fornisce risposte più velocemente che mai grazie alle stesse tecniche intelligenti che hanno alimentato la rivoluzione Node.js. Ora PHP 7.2 e HHVM offrono molte delle stesse ottimizzazioni al volo intelligenti che V8 ha portato a Chrome e Node.js. Non solo, HHVM ha Hack, un dialetto PHP intelligente che offre pieno supporto per sofisticate funzionalità di programmazione come lambda, generici e raccolte. Quindi, se hai bisogno di queste funzionalità, non è necessario cercare uno stack più completo.

Ovviamente il finale non è ancora stato scritto. Per ogni programmatore che esalta la purezza e la giovinezza di Node.js e la semplicità di JavaScript ovunque, ce n'è un altro che è soddisfatto della base di codice profonda e della stabilità a lungo conosciuta di PHP. Riuscirà il vecchio codger a respingere il nuovo inizio lato server? JavaScript rovescerà il suo vecchio amico per ottenere il dominio del mondo? Metti un altro lotto di popcorn nel microonde e siediti.

Dove vince PHP: mescolare il codice con il contenuto

Stai scrivendo, riversando pensieri nel testo per il tuo sito web e vuoi aggiungere un ramo al processo, una piccola istruzione if-then per farlo sembrare carino, diciamo, a seconda di qualche parametro nell'URL. O forse vuoi mescolare testo o dati da un database. Con PHP, apri i magici tag PHP e inizi a scrivere codice in pochi secondi. Non c'è bisogno di modelli: tutto è un modello! Non sono necessari file aggiuntivi o architetture elaborate, solo potenza logistica programmabile a portata di mano.

Dove vince Node: Separare le preoccupazioni

Mescolare il codice con il contenuto è una stampella che può finire per paralizzarti. Certo, è divertente mescolare il codice con l'HTML le prime due o tre volte che lo fai. Ma presto la tua base di codice diventa un groviglio di logica. I veri programmatori aggiungono struttura e separano il livello cosmetico dal livello logico. È più pulito da comprendere per i nuovi programmatori e più facile da mantenere. I framework in esecuzione su Node.js sono costruiti da programmatori che sanno che la vita è migliore quando il modello, la vista e il controller sono separati.

Dove vince PHP: base di codice profonda

Il web è pieno di codice PHP. Le piattaforme più popolari per la creazione di siti Web (WordPress, Drupal, Joomla) sono scritte in PHP. Non solo le piattaforme sono open source, ma lo sono anche la maggior parte dei loro plugin. C'è codice PHP ovunque e ti aspetta per il download, la modifica e l'utilizzo per le tue esigenze.

Dove vince Node: funzionalità più moderne

Certo, ci sono migliaia di fantastici file PHP open source, ma alcuni sono plug-in WordPress di 12 anni che sperano e pregano che qualcuno li scarichi. Per ogni versione moderna di Symfony, c'è una libreria polverosa e dimenticata da tempo che nessuno aggiorna.

Chi vuole passare ore, giorni o settimane a cercare codice che non viene aggiornato da anni? I plug-in di Node.js non sono solo più recenti, sono stati creati con la piena conoscenza degli ultimi approcci architettonici. Sono stati creati da programmatori che capiscono che le moderne app Web dovrebbero spingere la maggior parte dell'intelligenza al client.

E mentre JavaScript ha molte piccole idiosincrasie che fanno impazzire alcuni, per la maggior parte è un linguaggio moderno che sfoggia una sintassi moderna e alcune funzionalità utili come le chiusure. Puoi riconfigurarlo ed estenderlo facilmente, rendendo possibili potenti librerie come jQuery. Puoi passare funzioni come oggetti. Perché limitarti?

Dove vince PHP: semplicità (più o meno)

Non c'è molto in PHP: poche variabili e funzioni di base per destreggiarsi tra stringhe e numeri. È uno strato sottile che non fa molto se non spostare i dati dalla porta 80 al database e viceversa. Questo è quello che dovrebbe fare. Un database moderno è uno strumento magico e ha senso lasciare il lavoro pesante a esso. PHP è la giusta quantità di complessità per un lavoro che non dovrebbe essere complesso.

Inoltre, se sei un programmatore che vuole fare di più che interagire con un database e formattare i risultati, ora puoi fare di più con PHP senza tapparti il ​​naso. L'HHVM di Facebook aggiunge il supporto per Hack, un linguaggio completo ricco di funzionalità moderne come annotazioni di tipo, generici ed espressioni lambda. L'utilizzo di questo limita il codice all'esecuzione solo su HHVM, ma non è la cosa peggiore al mondo. È molto veloce.

Dove vince Node: dozzine di opzioni linguistiche

Se gli utenti PHP sono felici di avere accesso a Hack, dovrebbero prendere in considerazione l'idea di passare al mondo di Node.js perché molti dei principali linguaggi possono essere compilati in modo incrociato per essere eseguiti in JavaScript. Esistono opzioni ben note come Java, C # o Lisp e dozzine di altre come Scala, OCaml e Haskell. Ci sono anche regali per gli amanti nostalgici di BASIC o Pascal. Questo elenco di linguaggi che si compilano in JavaScript da Jeremy Ashkenas è abbastanza completo. Inoltre, i cugini JavaScript come TypeScript e CoffeeScript offrono approcci leggermente diversi e migliorati allo stesso gioco.

Dove vince PHP: non è necessaria alcuna app client

Tutto il discorso sull'utilizzo della stessa lingua nel browser e sul server è carino, ma cosa succede se non è necessario utilizzare alcuna lingua sul browser? Cosa succede se spedisci i dati in formato HTML? E se stai costruendo un sito web statico e spartano per fornire esattamente ciò che è necessario senza il bling interattivo? Il browser lo apre e non ci sono mal di testa o problemi tecnici causati da thread JavaScript che tentano di creare una pagina sul browser da due dozzine di chiamate al servizio web. L'HTML puro funziona più spesso di qualsiasi altra cosa e PHP è ottimizzato per crearlo. Perché perdere tempo con JavaScript sul browser? Crea tutto sul server ed evita di sovraccaricare quel piccolo browser sul piccolo telefono.

Dove vince il nodo: le chiamate di servizio sono più sottili delle chiamate PHP HTML-fat

Sebbene le app web HTML5 pazze di AJAX possano avere troppe parti mobili, sono interessanti e molto efficienti. Una volta che il codice JavaScript è nella cache del browser, l'unica cosa che si muove lungo i fili sono i nuovi dati. Non c'è un sacco di markup HTML e non ci sono viaggi ripetuti per scaricare l'intera pagina. Sono cambiati solo i dati. Se sei disposto a dedicare del tempo alla creazione di un'app Web lato browser intelligente, c'è un grande vantaggio. Node.js è ottimizzato per fornire i dati e solo i dati tramite i servizi web. Se la tua app è complessa e ricca di dati, è una buona base per una distribuzione efficiente.

Dove vince PHP: SQL

PHP è stato creato per coesistere con MySQL e le sue numerose varianti, come MariaDB. Se MySQL non è esattamente corretto, esistono altri fantastici database SQL di Oracle e Microsoft. Il tuo codice può cambiare con alcune modifiche alle tue query. Il vasto mondo SQL non finisce ai suoi confini. Alcuni dei codici più stabili e ben sviluppati si interfacciano con un database SQL, il che significa che tutta quella potenza può anche essere facilmente integrata in un progetto PHP. Potrebbe non essere una famiglia perfetta e felice, ma è grande. Non solo, ma il mondo del database sta lentamente migliorando poiché gli sviluppatori trovano modi per aggiungere più intelligenza al database in modo da non dover lavorare così duramente.

Dove vince Node.js: JSON

Se devi avere accesso a SQL, Node.js dispone di librerie per farlo. Ma Node.js parla anche JSON, la lingua franca per interagire con molti dei più recenti database NoSQL. Questo non vuol dire che non puoi ottenere le librerie JSON per il tuo stack PHP, ma c'è qualcosa di fluido nella semplicità di lavorare con JSON quando si utilizza JavaScript. È una sintassi dal browser al server web al database. I due punti e le parentesi graffe funzionano allo stesso modo ovunque. Questo da solo ti salverà da ore di frustrazione.

Dove vince PHP: velocità di codifica

Per la maggior parte degli sviluppatori, scrivere PHP per le app web risulta più veloce: nessun compilatore, nessuna distribuzione, nessun file JAR o preprocessore - semplicemente il tuo editor preferito e alcuni file PHP in una directory. Il tuo chilometraggio varierà, ma quando si tratta di mettere insieme un progetto rapidamente, PHP è un buon strumento da usare.

Dove vince Node.js: velocità dell'applicazione

Scrivere codice JavaScript è un po 'più difficile quando si contano parentesi graffe e parentesi, ma una volta terminato, il codice Node.js può volare. Il meccanismo di callback è brillante perché ti evita di destreggiarti tra i thread. Il nucleo è ben costruito e progettato per fare tutto questo per te. Non è quello che vogliono tutti?

Dove vince PHP: concorrenza

La battaglia per i cuori e le menti degli sviluppatori PHP è ancora in corso. Il team HHVM e il team Zend stanno lavorando duramente per fornire codice veloce a tutti. Stanno apparendo benchmark indipendenti e tutti stanno spingendo le basi del codice al limite. Questo significa solo prestazioni migliori.

Dove vince Node.js: Solidarity

Vuoi davvero due diverse basi di codice? Certo, la concorrenza aiuta, ma presto segue la frammentazione. Cosa succede quando il tuo codice viene eseguito solo su uno dei due? La concorrenza non serve a niente se devi passare settimane o mesi a riscrivere il tuo codice. Mentre Node.js ha sperimentato la sua stessa frammentazione alcuni anni fa, con il lancio di io.js, l'universo di Node.js si è da allora riunito, dandogli il tipo di solidarietà linguistica che gli sviluppatori PHP potrebbero presto desiderare.

Dove vince PHP: app di base

Negli ultimi anni, alcuni sviluppatori hanno avviato app Web e si sono trovati frustrati dal comportamento lento. Il JavaScript che guida tutti quei pezzi in movimento può essere decine di migliaia di byte, a volte centinaia di migliaia. Quando tutti i pacchetti arrivano, devono essere analizzati, compilati e infine eseguiti, il tutto per fornire pochi byte come la temperatura e la previsione.

Il contraccolpo contro questa follia rococco può essere trovato nei team che costruiscono generatori di siti statici (463 al momento in cui scrivo) e pagine web ridotte in formato AMP. PHP è una scelta naturale per qualsiasi team che desideri concentrare l'intelligenza sul server in modo che il client non sia sovraccarico.

Dove vince Node.js: ricchezza

Ludwig Mies van der Rohe, l'architetto degli edifici, una volta disse: "Less is more". Robert Venturi, un altro architetto, è arrivato e ha ribattuto: "Less is a bore." Gli smartphone hanno più potenza di una stanza piena di computer Cray. I desktop dispongono di schede video con più ventole per mantenerli freschi durante tutta l'elaborazione. Perché dovremmo eliminare il nostro codice e vivere come una vittima dell'era della depressione in un romanzo di Steinbeck? Vivilo. I siti Web grandi e chiari pieni di codice JavaScript attirano l'attenzione, sono drammatici e soprattutto divertenti. Certo è un po 'osceno sprecare così tanta larghezza di banda su pochi bit di dati, ma la larghezza di banda non è mai stata più economica. Vivi un po!

Dove vincono entrambi: senza testa

La parola "headless" si riferisce al codice PHP in esecuzione sul server. Recentemente alcune delle migliori applicazioni PHP come Drupal hanno sbirciato attraverso il corridoio e sono rimaste stupite dalle sofisticate interfacce utente costruite dai framework JavaScript come React, Angular o Vue. Invece di cercare di competere con loro, stanno cedendo il controllo del client e si concentrano sul fare un buon lavoro con il back-end sul server.

Se hai investito parecchio nel codice PHP in esecuzione sul server, questo potrebbe essere un modo per goderti il ​​meglio di entrambi gli approcci. Il codice PHP vecchio e consolidato funge da porta d'ingresso al database, ricontrolla le richieste, ripulisce i dati e generalmente fornisce tutta la logica aziendale. Il lato client è un'app Web progressiva scritta con il framework JavaScript più recente. Quando ha bisogno di informazioni, invia una richiesta AJAX al codice PHP.

Questo potrebbe non avere senso per qualcuno che inizia da zero, ma se ti sei affidato a PHP per anni e vuoi andare avanti gradualmente, questo può essere un felice compromesso.

Dove vincono entrambi: microservizi e serverless

I nuovi paradigmi di microservizi o serverless offrono un modo per il codice JavaScript e PHP di convivere con il server e andare d'accordo. Entrambe le soluzioni suddividono il lavoro in dozzine di servizi o funzioni più piccoli e questi possono essere eseguiti in modo indipendente e rimanere nelle loro corsie. Alcune parti, di solito le sezioni più vecchie e stabili dell'app, possono eseguire PHP. Le altre parti, spesso quelle più nuove, saranno scritte in Node.js. La lingua POSTo GETpuò essere la lingua franca che li unisce tutti.