Su internet ci sono centinaia di articoli e di thread nei forum che discutono su qual è il linguaggio migliore per creare applicazioni Web. Sfortunatamente le opinioni riportate sono quasi sempre di carattere promozionale e datate, ovvero analizzano lo stato delle cose com'era parecchi anni fa e non tengono conto delle evoluzioni dei vari linguaggi di programmazione.
In questo articolo vogliamo spiegare perché secondo noi ASP.NET non è il linguaggio migliore da utilizzare per lo sviluppo di un nuovo software Web e per farlo, nel seguito, confronteremo le caratteristiche di ASP.NET con il linguaggio PHP che secondo noi è la scelta migliore. Cercheremo di analizzare i due linguaggi e i due mondi da un punto di vista oggettivo in modo che il lettore possa scegliere la tecnologia che per il suo scopo è più adatta.
Partiamo prima di tutto inquadrando i due linguaggi.
Panoramica PHP#
PHP è un linguaggio di programmazione concepito per realizzare pagine web dinamiche. PHP è utilizzato principalmente per realizzare la parte server di applicazioni web. Il linguaggio PHP è nato nel 1994 e la prima versione è stata rilasciata nel 1995, da allora il linguaggio è evoluto fino ad oggi: inizialmente era un linguaggio procedurale, ma nel tempo è diventato un linguaggio multiparadigma aggiungendo ad esempio il supporto alla programmazione ad oggetti.
Di seguito un esempio di codice PHP.
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<?php for ($i=1; $i <= 6; $i++) { ?>
<h<?php echo $i; ?>> Titolo </h<?php echo $i; ?>>
<?php }
echo "<p>Esempio</p>";
?>
</body>
</html>
Panoramica ASP.NET#
ASP.NET è un ambiente anch'esso concepito per realizzare applicazioni web. La prima versione di ASP.NET è stata rilasciata nel 2000 come rimpiazzo della tecnologia di Microsoft ASP, non più supportata a partire da quella data. ASP invece è stato un framework web rilasciato da Microsoft nel 1995 (un anno dopo PHP), secondo alcuni una copia di PHP (come è avvenuto poi per altri linguaggi come ad esempio C# copiato da Java).
Di seguito un esempio di codice ASP.NET (si nota la somiglianza?).
<%@ Page Language="C#"%>
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<% for (int i=1; i <= 6; i++) { %>
<h<%=i%>> Titolo </h<%=i%>>
<% }
Response.Write("<p>Esempio</p>");
%>
</body>
</html>
Interoperabilità#
Il linguaggio PHP è molto versatile e può integrarsi con i sistemi più disparati (sistemi operativi, web server, database server ecc.). Una bella panoramica sulle funzionalità di questo linguaggio è presente al sito Guida Funzioni .
Tra queste è anche presente un sottoinsieme di funzionalità che consentono di integrare il PHP con alcune funzionalità specifiche di Windows .
L'insieme dei principali driver di database supportati invece è presente al link PDO Driver . Da notare che tra questi oltre ai database più noti è possibile anche integrare una web application con il sistema AS400 utilizzando una connessione ODBC.
Diversamente, ASP.NET è vincolato all'ambiente Microsoft e si sposa al meglio solo con le tecnologie proprietarie Microsoft quali SQL Server, IIS, ecc.
Scalabilità#
Questo aspetto non dipende dal linguaggio o dall'ambiente di programmazione, ma è legato principalmente alle abilità dei programmatori che sviluppano l'applicazione web. Da un punto di vista tecnologico entrambi i linguaggi permettono di realizzare applicazioni web scalabili. Indubbiamente però il linguaggio PHP è utilizzato in siti internet che nel tempo sono cresciuti a dismisura come Facebook e Wikipedia per fare un esempio.
Prestazioni e Velocità di esecuzione#
Le pagine ASP possono essere realizzate con uno qualsiasi dei linguaggi del framework .NET quindi ad esempio Visual Basic o C#. Le pagine PHP invece vengono realizzate con codice PHP. Nel caso del C# viene prodotto un bytecode, ovvero una sorta di codice compilato (ma non nativo), mentre nel caso del PHP il codice è interpretato. Questo fatto farebbe pensare che un'applicazione realizzata in ASP.NET sia più veloce di una realizzata in PHP, ma in realtà ai fini della velocità di un'applicazione web il linguaggio è poco rilevante (le differenze nell'uso di un linguaggio rispetto ad un'altro per questo tipo di applicazioni sono nell'ordine di qualche millisecondo).
Lo scenario tipico di un'applicazione web è quello di interrogare una base di dati e visualizzare i risultati dell'interrogazione sotto forma di html presentato con un certo stile CSS. Un'altro scenario tipico è quello dell'inserimento o della modifica di dati nel database. Ancora, un terzo scenario può essere quello di effettuare l'upload di semplici file sul server o il relativo download.
In tutti questi scenari il ruolo del linguaggio è solo quello di interfaccia o collante tra il database server e il web server, per questo motivo la sua velocità di esecuzione è trascurabile. La velocità di una web application infatti è legata maggiormente ai principali attori del processo, ovvero: il S.O. (nella velocità di accesso ai file), il database server (nella velocità di inserimento, modifica, cancellazione dei dati), il web server (nella velocità di servire le pagine HTML e i file), il browser dell'utente (nella velocità di rendering della pagina HTML e nella velocità dell'esecuzione del codice Javascript) e la banda a disposizione.
Quindi, le prestazioni di una web application sono molto più legate al Database Server che non al linguaggio, infatti colossi come Facebook che indubbiamente hanno bisogno di prestazioni elevate, utilizzano come linguaggio il PHP.
Inoltre la versione 7 del PHP ha raddoppiato la velocità di esecuzione rispetto alla precedente versione 5 (Fonte Benchmark Definitivi di PHP 5.6, 7.0, 7.1, 7.2, 7.3 e 7.4 (2020) ).
Sicurezza#
Come per tutti i prodotti software, nel tempo sono emerse delle vulnerabilità sia per ASP.NET che per PHP. Tra le vulnerabilità passate ad esempio c'è stata la famosa ASP.NET POET Vulnerability e la vulnerabilità del PHP php: Multiple format string flaws in the phar extension .
Le vulnerabilità a livello di linguaggio o di framework sono quelle meno preoccupanti in genere, perché in breve tempo vengono corrette e tipicamente è difficile sfruttarle per sferrare un attacco reale.
Le vulnerabilità che invece vengono più spesso sfruttate sono quelle a livello applicativo. Queste evidentemente sono responsabilità dello sviluppatore dell'applicazione e non della tecnologia usata. In tal senso il progetto OWASP è un buon punto di partenza per approfondire il discorso e per verificare di seguire le best practice per lo sviluppo di applicazioni web sicure. Abbiamo trattato questo argomento nell'articolo Il tuo software è sicuro?.
Costi#
Il PHP non ha costi di licenze o costi di aggiornamento. Inoltre non ci sono costi di licenze aggiuntive per altri server di backup o per eseguire la propria applicazione su un cluster di server.
ASP.net e IIS sono gratis se si acquista il sistema operativo Windows, in altri termini il costo della licenza è spostato sul S.O.. Vi è un costo notevole di licenza per Microsoft Windows Server e Microsoft SQL Server.
Ad esempio, un server Cloud base (2 CPU, 8GB RAM) con Microsoft Windows Server 2019 e SQL Server 2016 Standard costa circa 400€/mese contro i circa 60 €/mese per un server Cloud di pari caratteristiche, ma con S.O. Linux.
I costi delle licenze Microsoft di cui sopra possono notevolmente aumentare se la web application diventa popolare e vi è la necessità di eseguirla su più server o richiede funzionalità come il bilanciamento del carico o il clustering dei server.
Supporto e Risorse#
Il PHP è il linguaggio più utilizzato per lo sviluppo di web application , pertanto c'è una comunità di programmatori molto nutrita e di conseguenza il problema che può incontrare un programmatore è probabilmente già stato risolto da qualcun'altro nel mondo. Su internet ad esempio su stackoverflow è possibile inserire delle domande o consultare i problemi comuni già risolti da altri.
Inoltre, la documentazione del PHP è multilingua, ricca di esempi e di utili commenti inseriti in modo spontaneo dai programmatori (Es. documentazione funzione var_export ).
La natura open source del PHP per di più favorisce i contributi spontanei degli utenti nel migliorare e aggiornare questo linguaggio.
Diversamente, ASP.net si basa su un numero di sviluppatori messi a disposizione da Microsoft per fare miglioramenti e aggiornamenti. Inoltre, anche sulle community on-line ci sono meno programmatori disposti ad aiutare.
Velocità nel deploy#
Per deploy si intendono le attività volte a rilasciare una nuova versione della propria applicazione web su un webserver.
Per modificare una funzionalità in un file php, basta modificare il file stesso e il gioco è fatto. Ciò è dovuto al fatto che il PHP è un linguaggio interpretato. Di contro invece l'ASP.NET è compilato e di conseguenza non basta modificare un file, ma bisogna ricompilare il codice di tutto l'applicativo per poterlo rilasciare.
Piattaforme supportate#
Il PHP è un linguaggio multipiattaforma, questo vuol dire che può essere eseguito su un server Linux così come su un server Windows, può essere utilizzato in un Web Server Open Source come ad esempio Apache oppure essere utilizzato con il web server Microsoft IIS (Internet Information Services).
Inoltre il PHP è in grado di collegarsi a molti database come ad esempio MySQL, SQL Server, PostgreSQL, Oracle, DB2, ecc.
Il framework ASP.NET invece è pensato per i sistemi operativi windows e per il mondo Microsoft in genere: Microsoft SQL Server, Microsoft IIS, ecc.
I siti più popolari che tecnologie usano?#
La tabella seguente riporta i linguaggi e le tecnologie utilizzate dai portali web più famosi.
Nota: nel leggere la tabella seguente è facile confondere il linguaggio C con il C#, ma in realtà sono linguaggi completamente diversi. Il framework ASP.NET fa uso del linguaggio C# e non del linguaggio C.
Sito | Attivo dal | Server Platform | Liguaggi |
---|---|---|---|
Google.com | Novembre 1998 | Linux | C, Java, C++, PHP & MySQL |
Facebook.com | Febbraio 2004 | Linux | PHP, MySQL and C++ |
YouTube.com | Febbraio 2005 | Linux | C, Java and MySQL |
Yahoo.com | Agosto 1995 | Linux | C++, C, Java, PHP & MySQL |
MSN.com (di Microsoft) | Agosto 1995 | Windows | ASP.net |
Live.com (di Microsoft) | Agosto 2008 | Windows | ASP.net |
Wikipedia | Gennaio 2001 | Linux | PHP & MySQL |
Amazon.com | Ottobre 1995 | Linux & Solaris | C++, Java, J2EE |
WordPress.com | Novembre 2005 | Linux | PHP & MySQL |
Conclusione#
In definitiva da un punto di vista tecnologico scegliere tra il PHP o il framework ASP.NET non fa una grande differenza, sono entrambi delle tecnologie valide. La differenza c'è invece da un punto di vista strategico e commerciale. Abbracciare il framework ASP.NET vuol dire legarsi all'ambiente Microsoft, alla sua politica e ai suoi costi.
Optare per una scelta tecnologica Open Source come PHP invece permette di interagire senza problemi con le tecnologie Microsoft così come con altre, ma in ogni caso senza mai legarsi in modo irreversibile ad una di esse.
Abbiamo trattato l'argomento di quali sono le tecnologie migliori secondo noi nell'articolo: Quali sono le migliori tecnologie con cui sviluppare software?.
La scelta di big player come Google, Facebook e Wikipedia è chiara, qual è la tua?