Awwwards
 

Sviluppo Nativo vs Sviluppo “React Native”

Da quando le applicazioni mobile hanno fatto la loro comparsa, sono nate diverse soluzioni “non native” come Apache Cordova, Steroids, Ionic, Xamarin solo per citarne alcune. Ma qual’è l’approccio migliore?

Un’app nativa è un’applicazione mobile sviluppata interamente nel linguaggio del dispositivo sul quale vengono eseguite. Vengono anche chiamate in gergo client-side applications e il loro utilizzo presenta diversi vantaggi:

  • Interazione con tutte le features del dispositivo consentendo l’utilizzo al 100% delle sue capacità;
  • Possibile funzionamento anche in assenza di connettività;
  • Maggiore velocità offrendo quindi una User Experience di più alto livello;
  • Facilità di integrazione di terze parti tramite utilizzo di SDK ufficiali;

Un’app “non nativa” è un’applicazione mobile sviluppata con un linguaggio principalmente orientato al web che a seconda del framework utilizzato consente o meno di tradurre il codice nel linguaggio del dispositivo sul quale vengono eseguite attraverso una serie di passaggi intermedi.
Negli ultimi tempi si è sentito parlare spesso di una soluzione che si chiama “React Native” ma per meglio comprendere le differenze andiamo nel dettaglio (non troppo non vi preoccupate) analizzandone vantaggi e svantaggi.

I vantaggi di sviluppare in “React Native” sono:

  • Scrivere un’applicazione unica e compilarla per due piattaforme (Android e iOS)
  • Bassa curva di apprendimento per chi proviene dal mondo web poichè utilizzando javascript è facilmente assimilabile rispetto a linguaggi più strutturati come Java, Objective-C o Swift.
  • Maggiori performance rispetto alle altre soluzioni “ibride” grazie all’interfaccia nativa: React Native guadagna molto in termini di prestazioni rispetto alle comuni WebApp, perché fa uso di un’interfaccia nativa e non delega alla WebView il rendering della UI.
  • Un ciclo di sviluppo molto rapido: React native è a tutti gli effetti un’applicazione nativa che interpreta la business logic scritta in javascript, questo permette di velocizzare notevolmente il ciclo di sviluppo: ad ogni modifica del codice non è necessario ricompilare l’intera applicazione.

Ovviamente non è tutto oro quello che luccica ed a tal motivo ci sono una serie di svantaggi da tener presente soprattutto se si vuole dare una continuità al progetto:

  • Si tratta comunque di una astrazione: Nonostante la UI sia nativa, la business logic viene comunque interpretata, quindi risulta meno performante delle applicazioni native.
  • Permette minor controllo rispetto alle applicazioni native: Nelle applicazioni native si ha un maggior controllo soprattutto sulla gestione delle performance.
  • Approccio principalmente orientato al web: Nelle applicazioni native si tendono ad utilizzare i componenti propri della piattaforma che ne contraddistinguono anche la user experience mentre con le applicazioni sviluppate in React Native si tende ad utilizzare un approccio più orientato al web, non garantendo quindi le linee guida di sviluppo dei dispositivi, creando un senso di “perdizione” per l’utente utilizzatore.
  • Linguaggio debolmente tipato: Per sua stessa strutturazione javascript non è un linguaggio fortemente tipato, cioè ne consegue che è più facile il verificarsi di errori e più difficile la sua correzione. Al contrario i linguaggi utilizzati per lo sviluppo nativo sono maggiormente robusti in quanto essendo fortemente tipati garantiscono l’eliminazione di molti potenziali errori.
  • Non ufficialmente supportato da Apple e Google: Le nuove funzionalità messe a disposizione dai sistemi operativi per smartphone (Android e iOS) non girano perfettamente con React Native e c’è necessità di attendere che qualcuno del team effettui la sua integrazione.
  • Impossibilità di sviluppare per device che non siano smartphone: Ad oggi non è possibile utilizzare React Native per sviluppare applicazioni per device che non siano smartphone, come ad esempio Apple Watch.
  • Longevità del progetto: E’ fondamentale tenere a mente la longevità del progetto. Anche se ad oggi React Native appare un progetto in salute ed alcune grosse aziende lo hanno adottato non c’è motivo per il quale questo progetto debba ricevere supporto per sempre, come nel caso di Parse di Facebook. Apple e Google non supportano React Native ma supporteranno iOS e Android per tempi che non sono predicibili (anche se si prospettano non siano di breve durata).
  • Impossibilità di inserire alcuni componenti specifici: C’è un addizionale livello di contesa per la risoluzione di bug e problemi legati alle dipendenze. Soprattutto non è possibile inglobare all’interno iMessage (per iOS), codice C/C++ o sofisticate animazioni, etc.
  • Prodotto alla vista quasi come quello sviluppato nativo: Una applicazione scritta in React Native esteticamente assomiglia molto a una scritta in modo nativo ma presenta dei problemi di performance che vanno ad inficiare sulla fluidità dell’applicazione stessa facendo maggiormente carico su CPU, GPU e memoria (con degrado delle prestazioni a seconda della complessità della feature).

Ed ora la scelta tocca a te…come svilupperai la tua prossima applicazione mobile?