Confronto tra HTML5 e nativo

Il dibattito sulle app mobile

Michael Mahemoff
Michael Mahemoff

introduzione

Le app mobile e HTML5 sono due delle tecnologie più in voga al momento e le sovrapposizioni sono numerose. Le app web vengono eseguite nei browser mobile e possono anche essere riassunte come app native sulle varie piattaforme mobile. Con l'ampia gamma di piattaforme da supportare, combinata con l'incredibile potenza dei browser per dispositivi mobili, gli sviluppatori si affidano a HTML5 come soluzione per la scrittura e l'esecuzione di più applicazioni. Ma è davvero fattibile? Ci sono ancora validi motivi per passare agli annunci nativi e, chiaramente, molti sviluppatori stanno davvero seguendo questa strada. Questo articolo parla di un dibattito tra gli annunci nativi e quelli del Web.

Ricchezza delle funzionalità

Point: le funzionalità native possono fare di più

Possiamo dividere le funzionalità per dispositivi mobili in due dimensioni: l'esperienza con l'app stessa e il modo in cui si collega all'ecosistema del dispositivo. Ad esempio, per Android si tratta di funzionalità come widget e notifiche. Il formato nativo eccelle in entrambe le dimensioni.

In termini di esperienza con le app, le app native possono fare di più. Possono facilmente accedere agli eventi di scorrimento, anche multi-touch, per le piattaforme che lo supportano. In genere possono agire sulla pressione dei tasti, ad esempio il pulsante Ricerca di Android e i controlli del volume. Possono accedere anche ad hardware, come GPS e fotocamera. Inoltre, con l'autorizzazione dell'utente, alcune piattaforme forniscono un accesso illimitato al sistema operativo. Prova a scoprire la carica rimanente della batteria con HTML5.

Tuttavia, è molto di più dell'esperienza in-app. Un sistema operativo come Android offre diversi modi per consentire alle app di interagire con gli utenti e, in effetti, con altre app. Nella home page sono presenti widget attivi. Sono presenti notifiche, che vengono visualizzate nella barra di stato del dispositivo. Le tue intenzioni consentono alla tua app di presentarsi come un servizio generale che altre app potrebbero richiedere a volte.

Contatore: le funzionalità native possono essere incrementate, ma il Web sta comunque recuperando

È vero che per un'app HTML5 molte funzioni in-app sono irrisolvibili. Indipendentemente da quanto siano entusiasmanti le tue competenze in fatto di Web, se la tua app è bloccata in una sandbox senza API Fotocamera, non scatterà presto alcuno scatto. Per fortuna, non devi necessariamente essere in quella sandbox. Se hai davvero bisogno che la tua app web scatti una foto, puoi creare un'app nativa, una con una vista web incorporata che fornisce la maggior parte dell'interfaccia utente. Questo è il modo in cui funziona il framework open source PhoneGap: colma il divario esponendo le funzionalità native come servizi web, che la vista web chiama utilizzando un'API di networking standard. Quando crei un'app ibrida come questa, puoi anche sfruttare queste funzionalità della piattaforma, come widget, notifiche e intent.

Creare un'app ibrida, nativa e web, non è certamente la soluzione ideale. Aggiunge complessità e si applica solo alle app web incluse come app native, anziché ai siti web tradizionali accessibili da un browser mobile. Tuttavia, potrebbe non essere necessario per molto tempo. Gli standard web si evolvono rapidamente e i moderni browser per dispositivi mobili lo stanno tenendo al passo. Ad esempio, spazio di archiviazione offline, geolocalizzazione, grafica canvas e riproduzione video/audio sono supportati ampiamente anche tra gli smartphone moderni. Stiamo iniziando a essere supportata anche la fotocamera: a partire da Android 3.1, è possibile acquisire foto e video utilizzando gli standard web. La versione più recente del browser iOS supporta WebSocket per lo streaming bidirezionale, nonché il rilevamento dell'orientamento dei dispositivi.

Nel complesso, i dispositivi mobili sono in evoluzione. Ma anche il Web si sta evolvendo e si sta evolvendo rapidamente. Solo tra i browser desktop, esistono cinque principali fornitori di browser che stanno evolvendo gli standard e aggiungono funzionalità alla velocità della luce. Anche se non è una procedura banale trasferire queste funzionalità sui dispositivi mobili, molte sono già state utilizzate nei browser per dispositivi mobili.

Il formato nativo è un target in rapida evoluzione, ma il Web sta colmando il divario.

Esibizione

Point: il formato nativo viene eseguito più velocemente

Le app native non devono affrontare alcuna barriera di runtime web. Sono vicini al metallo e possono sfruttare potenziamenti delle prestazioni come l'accelerazione della GPU e il multithreading.

Contatore: oggi i runtime web sono molto più veloci e la maggior parte delle app non ha comunque bisogno della velocità

Sarebbe un eufemismo affermare che il Web è diventato più veloce negli anni recenti. La versione V8, il motore JavaScript fornito in dotazione con Chrome, ha rappresentato uno sviluppo significativo delle prestazioni web al momento del lancio e da allora è diventata solo più veloce:

Grafico rendimento V8

Anche i motori di rendering grafico hanno accelerato il Web e ora inizia a verificarsi l'accelerazione hardware. Dai un'occhiata al picco di velocità fornito dall'architettura con accelerazione hardware:

Grafico Canvas con accelerazione hardware

Inoltre, la nuova API Web Workers rende possibile il multithreading e gli sviluppatori web moderni possono anche ricorrere a una serie di librerie ottimizzate per le prestazioni e tecniche ben studiate di ottimizzazione delle prestazioni. La maggior parte di questi ha iniziato a lavorare sul Web desktop, ma è ancora pertinente per i dispositivi mobili e sta aumentando l'attenzione rivolta ai dispositivi mobili. Ad esempio, il guru del rendimento Steve Souders ha una pagina dedicata agli strumenti per il rendimento sui dispositivi mobili.

Non tutti i progressi nel campo dei computer desktop si sono ancora avvicinati a tutte le piattaforme mobile, ma le tendenze indicano che sono in procinto di farlo. È importante anche notare che la maggior parte delle app mobile non sono giochi 3D all'avanguardia, ma fondamentalmente sono basati sulle informazioni: notizie, posta, orari, social network e così via. Visita alcuni siti dal tuo dispositivo mobile, ad esempio Gmail, Amazon, Twitter, per confermare che le prestazioni del Web mobile sono più che adeguate. Per quanto riguarda i giochi, quelli di base sono già disponibili con canvas 2D, e WebGL sta iniziando ad apparire sui dispositivi mobili; vedi Firefox 4. Fino a quel momento, esiste una famiglia di framework in continua espansione che compilano le app WebGL in app native che possono sfruttare OpenGL, ad esempio ImpactJS.

Esperienza di sviluppo

Punto: il formato nativo è più facile da sviluppare

Le app native utilizzano linguaggi di programmazione affidabili (ad esempio Java, Objective C, C++), progettati per lo sviluppo di applicazioni complesse e che hanno una comprovata esperienza. Le API sono state progettate da zero per supportare la piattaforma in questione. Puoi facilmente eseguire il debug delle app tramite emulatori desktop che forniscono una rappresentazione realistica del dispositivo di destinazione.

Ciò che rende particolarmente problematico lo sviluppo web è l'enorme diversità di browser e runtime. Quando l'app è in esecuzione, la funzionalità X non sarà disponibile. E anche se lo fosse, come verrà implementato il browser? Gli standard sono aperti all'interpretazione.

Contropunto: il Web è spesso più facile da sviluppare, soprattutto se si rivolgono a più dispositivi

Affrontiamo prima la tecnologia di base. È vero che gli standard web sono stati originariamente concepiti in un'epoca in cui il Web riguardava fondamentalmente i documenti, non le app, con JavaScript creato e implementato in soli 10 giorni. Ma si è rivelata molto più efficace di quanto immaginato: gli sviluppatori web hanno imparato a sfruttare le parti positive e domare quelle negative, con modelli ora compresi per una progettazione scalabile. Inoltre, gli standard non sono fermi e sforzi come HTML5, CSS3 ed EcmaScript Harmony stanno migliorando tutti l'esperienza degli sviluppatori. La tua preferenza per C++, Java o JavaScript è una questione di dibattito religioso e dipende anche dal tuo codebase precedente. Ma possiamo certamente includere JavaScript come contendente serio in questi giorni.

L'altra differenza della frammentazione browser/runtime è il fatto che tutti questi ambienti esistono in primo luogo. Se svilupperai un'app Android in Java, dovrai disporre di un numero completo di porte per l'obiettivo C per supportare iOS. Sviluppa un'app web una volta che verrà eseguita su Android e iOS, per non parlare di WebOS, BlackBerry, Windows Mobile e... beh, è comunque la teoria. In pratica, se vuoi che l'esperienza sia ottimale, dovrai perfezionare le cose per ogni piattaforma. Tuttavia, dovresti farlo anche in modalità nativa, per la maggior parte dei sistemi operativi per dispositivi mobili, poiché esistono diverse versioni e dispositivi.

La buona notizia è che la "frammentazione" è sempre stata in questo modo sul Web e esistono tecniche note per affrontarla. Ma soprattutto, il principio del miglioramento progressivo incoraggia gli sviluppatori a scegliere come target un dispositivo di base e ad aggiungere livelli di prestazioni specifiche per la piattaforma, ove disponibile. Anche il mantra del rilevamento delle funzionalità è utile e, al giorno d'oggi, offriamo il supporto per le librerie di aziende come Modernizr per il Responsive Web Design. Se utilizzi con accortezza queste tecniche, puoi estendere la copertura alla maggior parte dei dispositivi, compresi i "feature phone" tradizionali, anche a fattori di forma come orologi e TV, indipendentemente dalla marca e dal sistema operativo. Guarda la nostra dimostrazione multi-UI in occasione di Google IO 2011, in cui abbiamo scelto come target fattori di forma diversi (feature phone, smartphone, tablet, desktop, TV) con una logica e markup comune.

Aspetto e sensazione

Punto: il formato nativo si adatta all'aspetto e al design della piattaforma

Una delle caratteristiche che contraddistinguono qualsiasi piattaforma è il suo aspetto. Gli utenti si aspettano che i controlli siano presentati in modo coerente e manipilati nello stesso modo. Esistono alcune espressioni che variano da una piattaforma all'altra. Ad esempio, cosa succede quando l'utente esegue una "pressione prolungata" (continua a toccare un elemento per diversi secondi)? Le plaforme hanno espressioni idiomatiche standard per questi argomenti e non puoi soddisfarle tutte con una singola app HTML5.

Inoltre, l'aspetto e il design della piattaforma sono orchestrati dalla libreria software nativa della piattaforma, i cui widget incapsulano il tipo di aspetto che gli utenti si aspettano. Otterrai così tantissimi aspetti dell'aspetto e del design previsti "senza costi" usando il toolkit nativo.

Contatore: il Web ha un proprio aspetto e puoi anche personalizzare l'interfaccia web per le piattaforme che ti interessano di più

Come spiegato nella sezione precedente, lo sviluppo web consiste nello scrivere una versione di base "universale", per poi migliorarla progressivamente. Sebbene in genere il miglioramento si basi sulle funzionalità, puoi anche migliorarlo scegliendo come target le piattaforme che ti interessano di più. Si tratta di un tipo di "rilevamento del browser", che a volte è disapprovato dalla community web, soprattutto perché esistono così tanti browser possibili. Tuttavia, se consideri due o tre piattaforme con una priorità molto elevata e intendi fare lo sforzo in più per confrontarti con le alternative native, questa potrebbe essere la soluzione.

Per quanto riguarda la versione di base, il Web ha un proprio aspetto e design e possiamo persino dire che ogni piattaforma mobile ha un proprio "aspetto web" stabilito dal browser e dal runtime web predefiniti. "Aspetto e design web" può andare bene per i tuoi utenti e, di fatto, ti consente di ottenere un livello maggiore di coerenza con l'esperienza di navigazione sul desktop e con quelle su altri dispositivi con cui l'utente potrebbe lavorare. Inoltre, ci sono molte app di successo che non supportano molto l'aspetto e il design nativi. Questo è sicuramente vero per i giochi (il tuo gioco mobile preferito segue l'aspetto del tuo sistema operativo per dispositivi mobili?) e lo è anche per le app più convenzionali, ad esempio se dai un'occhiata ai client Twitter nativi più popolari sulla tua piattaforma preferita e vedrai una vasta gamma di meccanismi di interfaccia utente all'opera.

Visibilità

Punto di accesso: le app native sono più facili da scoprire

I meccanismi di distribuzione delle app, come Android Market e Apple App Store, sono stati molto popolari negli ultimi anni e sono una forza trainante per l'intero settore mobile. Qualsiasi sviluppatore può inviare la propria app nativa al marketplace, dove gli utenti possono trovarla tramite una combinazione di navigazione, ricerca e ricezione di suggerimenti. Inoltre, se hai fatto il tuo lavoro bene, le valutazioni e i commenti brillanti convinceranno gli utenti a fare clic sul pulsante di installazione più importante.

Contropunto: in realtà, le app web sono più facili da trovare

Il Web è probabilmente il mezzo più rilevabile mai creato. Nell'URL semplice abbiamo (almeno in teoria) un identificatore univoco per tutto ciò che è stato pubblicato sul web, che include le app pubblicate sui siti web standard. I motori di ricerca consentono di scoprire facilmente che contenuti e altri siti web possono collegarsi ad essi, inclusi cataloghi di app web simili ai marketplace per dispositivi mobili. Infatti, chiunque può condividere app web con i propri amici semplicemente collegandosi alle app nelle email e nei messaggi dei social network. I link possono essere inviati anche in formato SMS, dove gli utenti di dispositivi mobili potranno fare clic sul link e avviare l'app nel browser del dispositivo.

Non abbiamo ancora gli stessi marketplace in cui gli utenti possono valutare e commentare le app, ma anche questo sta cambiando. Continua a leggere...

Monetizzazione

Punto di accesso: gli annunci nativi possono essere monetizzati

"Una bambina di 6 anni realizza app durante l'ora di pranzo e vende un'infinità di copie a 3 $l'una". Questo titolo è spesso presente in questi giorni, pertanto non c'è da meravigliarsi che gli sviluppatori, grandi e piccoli, si rivolgano ai marketplace per la monetizzazione dei dispositivi mobili. Le piattaforme per dispositivi mobili offrono agli sviluppatori diversi metodi per addebitare direttamente le proprie app. Il metodo più semplice è il pagamento una tantum, per sbloccare l'app per l'eternità. Alcune piattaforme offrono anche meccanismi di pagamento e abbonamento in-app, strettamente integrati in un meccanismo coerente e sicuro. Queste nuove forme di pagamento consentono agli sviluppatori di convertire un'app di successo in un flusso di entrate a lungo termine.

Oltre ai pagamenti delle app, puoi monetizzare con i modelli web tradizionali, come la pubblicità e la sponsorizzazione.

Contropunto: è sempre stato possibile monetizzare sul Web e le opportunità stanno crescendo

Il Web non sarebbe il motore dell'industria moderna se non ci fossero ampie opportunità di incassare. Sebbene i meccanismi di "pagamento in base al consumo" diretti non siano ancora fioriti, ci sono varie nicchie in cui le soluzioni "Software as a Service" basate su abbonamento sono diventate effettive. Alcuni esempi sono Google Apps, la gamma di prodotti 37Signals e le versioni premium di vari servizi email. Inoltre, i pagamenti diretti non sono l'unico modo per trarre profitto dalle app web. Ci sono pubblicità online, link di affiliazione, sponsorizzazioni, promozione incrociata con altri prodotti e servizi.

Detto questo, è del tutto ragionevole che uno sviluppatore web leggi i titoli e provi un pizzico di invidia nei pagamenti. Non puoi inviare un URL web ai marketplace nativi. Cosa deve fare uno sviluppatore web? Crea un'app nativa "wrapper". Per ogni piattaforma scelta come target, crea un'app nativa vuota che contenga semplicemente una visualizzazione web. Nella vista web incorpori l'app reale. Devi quindi inviare queste app ai vari marketplace e, si spera, potrai guardare il denaro. Oggi probabilmente esistono centinaia, se non migliaia, di app basate sul web nei marketplace principali. Alcune di queste sono così astutamente assimilate da non conoscere affatto le loro applicazioni web.

Lo svantaggio è l'onere del cross-compilazione per ciascuna piattaforma. Ecco in che modo un framework esistente come PhoneGap può essere d'aiuto. Inoltre, ci sono servizi web come PhoneGap Build e Apparatio in fase di sviluppo. Punta questi siti web al tuo repository di codice e aprirà un'app per Android, un'app per iOS e così via... pronta per l'invio ai rispettivi negozi. Nessuna installazione di SDK nativi sulla tua macchina; tutto ciò di cui hai bisogno per creare tutte queste app native era un editor di codice e un browser web.

I marketplace supporteranno mai le app web direttamente, senza l'overhead dovuto a un loro wrapping nativo? Non è ancora chiaro. Sappiamo che Google ha introdotto il Chrome Web Store l'anno scorso e, sebbene si applichi solo ai computer desktop, lo store ha suscitato l'interesse di altri fornitori di browser e nel complesso fa parte di una tendenza verso i cataloghi di app web, inclusi alcuni tentativi specifici per dispositivi mobili. Il concetto di web store è ancora agli inizi, ma le indicazioni sono promettenti.

Conclusioni

Sarebbe bello dichiarare un vincitore qui, ma al momento non c'è un vincitore chiaro. Alcune app sono più adatte per gli annunci nativi, mentre altre sono più adatte per il Web. Probabilmente lo stack web ha più slancio, ma in termini di funzionalità e qualità di esecuzione, anche le app native si muovono velocemente. E a meno che non ci sia un momento in cui le tecnologie web sono un cittadino di prima classe nella maggior parte dei sistemi operativi mobile, il formato nativo sarà sempre un aspetto importante.

Una tecnica menzionata in questo articolo sono le app ibride e questo potrebbe essere il compromesso migliore per alcuni sviluppatori: Web View, dove è possibile, e componenti nativi specifici della piattaforma dove non lo è.

Se scegli il percorso web, presta attenzione agli standard web e al principio del miglioramento progressivo. Il Web è una tecnologia che sa come scegliere come target una miriade di dispositivi e sistemi operativi. Che tu scelga di chiamarla "frammentazione" o "diversità", il Web li abbraccia e gli sviluppatori possono trarre vantaggio da tutta l'arte nota disponibile.