single page applications
DESCRIPTION
HTML5 Single Page Application è il nuovo hype tecnologico: tutti ne parlano, il web ne è pervaso, da GMail a Facebook e Twitter, dal desktop al mobile, dagli Appennini alle Ande. In questa sessione ci occuperemo di tutti quegli aspetti di organizzazione di una solution in termini di codebase, unit testing e processo di build, presentando alcuni strumenti che stanno emergendo fra quelli disponibili. Demo: http://www.communitydays.it/events/2014-Roma/web02/TRANSCRIPT
![Page 1: Single Page Applications](https://reader036.vdocuments.pub/reader036/viewer/2022082623/54821608b4af9f4b418b478f/html5/thumbnails/1.jpg)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
WEB02 – Single Page Applications
Roberto Messora
[email protected] - @robymes
![Page 2: Single Page Applications](https://reader036.vdocuments.pub/reader036/viewer/2022082623/54821608b4af9f4b418b478f/html5/thumbnails/2.jpg)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Grazie a
Sponsor
![Page 3: Single Page Applications](https://reader036.vdocuments.pub/reader036/viewer/2022082623/54821608b4af9f4b418b478f/html5/thumbnails/3.jpg)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Agenda• Riassunto delle puntate precedenti
• Riprendiamo un “paio” di concetti Cosa, Perchè, Come Security Design Patterns Unit Testing
• Organizzare una solution
• Build System L’ecosistema di Node.JS (ma non il web server) Task automation con Gulp.JS Unit Testing automation con Karma UI Testing automation con Phantom.JS
![Page 4: Single Page Applications](https://reader036.vdocuments.pub/reader036/viewer/2022082623/54821608b4af9f4b418b478f/html5/thumbnails/4.jpg)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Nelle puntate precedenti• 2012 - Javascript avanzato: sfruttare al massimo il web http://bit.ly/1rooMbA
• 2013 - Usare Knockout.js http://bit.ly/1rooJwv
• 2014 – Single Page Applications: Come? Cosa? Perchè? http://bit.ly/1rooGRr
![Page 5: Single Page Applications](https://reader036.vdocuments.pub/reader036/viewer/2022082623/54821608b4af9f4b418b478f/html5/thumbnails/5.jpg)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Cosa• SPA è l’acronimo di Single Page (Web) Application
• Si riferisce in genere ad un’applicazione web in cui l’intera esperienza utente è erogata tramite una unica pagina, spesso ricca di contenuti e della user experience
• Una SPA si caratterizza per l’utilizzo di tecnologie di ultima generazione: HTML5 CSS3 Javascript
![Page 6: Single Page Applications](https://reader036.vdocuments.pub/reader036/viewer/2022082623/54821608b4af9f4b418b478f/html5/thumbnails/6.jpg)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Perché• Si sceglie di sviluppare una SPA per diversi motivi: Esperienza utente molto ricca (desktop-like tramite CSS3 e JavaScript)
Applicazioni più responsive e veloci grazie al massiccio utilizzo di chiamate AJAX
Migliore adattamento all’ambiente mobile anche per quanto riguarda il ridotto scambio di dati con il server o la possibilità di eseguire web app offline
Perchè così fan tutti…
![Page 7: Single Page Applications](https://reader036.vdocuments.pub/reader036/viewer/2022082623/54821608b4af9f4b418b478f/html5/thumbnails/7.jpg)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Come• Non esiste un modo univoco per sviluppare una SPA: Decine di framework Javascript su cui è possibile basare una SPA (fare un giro su http://todomvc.com/ per rendersene conto)
Molteplici opzioni di tecnologia lato server: Stack Microsoft ASP.NET (classico + WCF, MVC) Node.JS, quasi sempre implementati come endpoint di servizi
REST/JSON Basi dati non relazionali che forniscono nativamente un
accesso REST
![Page 8: Single Page Applications](https://reader036.vdocuments.pub/reader036/viewer/2022082623/54821608b4af9f4b418b478f/html5/thumbnails/8.jpg)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Sicurezza• JavaScript e sicurezza sono due concetti abbastanza distanti
fra di loro
• Usare sempre HTTPS
• Autenticazione & Autorizzazione: partire SEMPRE dal presupposto che i dati e le richieste che arrivano dal client al server possano essere fraudolente, quindi predisporre meccanismi di autenticazione e autorizzazione diversi dal cookie di autenticazione (Anti-Forgery tokens, OAuth, ecc.)
• Validazione: predisporre SEMPRE la validazione dei dati sia lato client che lato server
• Mitigare il reverse engineering tramite minificazione e/o compilazione delle risorse Javascript (Dart, Coffescript)
![Page 9: Single Page Applications](https://reader036.vdocuments.pub/reader036/viewer/2022082623/54821608b4af9f4b418b478f/html5/thumbnails/9.jpg)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Patterns, Patterns, Patterns• Una SPA può facilmente diventare abbastanza complessa da richiedere una certa disciplina nello sviluppo Javascript in termini di: Organizzazione della codebase Architettura e design: MV* Presentation Pattern Coding standard: JSLint non è sindacabile Design and Idiom Patterns:
Namespace Self executing functions Module pattern AMD: Asynchronous Module Definition (es. Require JS) Anchor pattern (gestire la cronologia del browser, SEO)
![Page 10: Single Page Applications](https://reader036.vdocuments.pub/reader036/viewer/2022082623/54821608b4af9f4b418b478f/html5/thumbnails/10.jpg)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
demoScheletro strutturale di una solution SPA
![Page 11: Single Page Applications](https://reader036.vdocuments.pub/reader036/viewer/2022082623/54821608b4af9f4b418b478f/html5/thumbnails/11.jpg)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Unit Testing• Esistono diversi framework di Unit Testing Javascript, i più utilizzati sono: QUnit Jasmine Mocha
• Automatizzare il processo di esecuzione delle suite di Test è possibile tramite ambienti di automazione come Karma che permettono anche di: Eseguire le suite di Test su differenti browser tramite
PhantomJS Integrare le suite di Test in ambienti di Continuous
Integration
![Page 12: Single Page Applications](https://reader036.vdocuments.pub/reader036/viewer/2022082623/54821608b4af9f4b418b478f/html5/thumbnails/12.jpg)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
demoJavascript Unit Testing con Jasmine
![Page 13: Single Page Applications](https://reader036.vdocuments.pub/reader036/viewer/2022082623/54821608b4af9f4b418b478f/html5/thumbnails/13.jpg)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Ciclo di Sviluppo e Delivery• Il ciclo di sviluppo e delivery di una SPA si può riassumere come: Scrivere codice JavaScript e markup HTML/CSS Verificare con JSLint il codice JavaScript Scrivere Unit Test Eseguire e verificare Unit Test Possibilmente rilevare e verificare la coverage degli Unit Test Combinare e minificare il codice JavaScript Eseguire e verificare Unit Test sul codice combinato e
minificato Deployare usando il codice JavaScript combinato e minificato
![Page 14: Single Page Applications](https://reader036.vdocuments.pub/reader036/viewer/2022082623/54821608b4af9f4b418b478f/html5/thumbnails/14.jpg)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Parola d’ordine: Automatizzare• Il ciclo di sviluppo e delivery può essere automatizzato
utilizzando un tool di task automation: Gulp.JS
• Gulp.JS è un modulo di Node.JS e si installa con il package manager npm
• Gulp.JS offre la possibilità di automatizzare una grande quantità e varietà di task differenti tramite l’installazione di plug-in dedicati
• Lo Unit Test runner Karma è disponibile come plug-in di Gulp.JS
• Gulp.JS si basa sul principio di funzionamento per cui: si eseguono uno o più task sequenzialmente Un task è definito da una sequenza di trasformazioni applicate ad uno
stream di file Uno stream di file è definito da una lista di file sorgente
![Page 15: Single Page Applications](https://reader036.vdocuments.pub/reader036/viewer/2022082623/54821608b4af9f4b418b478f/html5/thumbnails/15.jpg)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
demoBuild System con Gulp.JS e Karma
![Page 16: Single Page Applications](https://reader036.vdocuments.pub/reader036/viewer/2022082623/54821608b4af9f4b418b478f/html5/thumbnails/16.jpg)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
E perchè no: Page Automation • Phantom.JS oltre a svolgere la funzione di Headless Website Testing a supporto di Karma, può essere usato per eseguire Page Automation
• Page Automation è un ottimo modo di condurre User Interface Testing
![Page 17: Single Page Applications](https://reader036.vdocuments.pub/reader036/viewer/2022082623/54821608b4af9f4b418b478f/html5/thumbnails/17.jpg)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Codice sorgente Demo
• https://github.com/robymes/WebApplicationTesting
![Page 18: Single Page Applications](https://reader036.vdocuments.pub/reader036/viewer/2022082623/54821608b4af9f4b418b478f/html5/thumbnails/18.jpg)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
demoPage Automation con PhantomJS
![Page 19: Single Page Applications](https://reader036.vdocuments.pub/reader036/viewer/2022082623/54821608b4af9f4b418b478f/html5/thumbnails/19.jpg)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Q&ATutto il materiale di questa sessione su
http://www.communitydays.it/
Lascia il feedback su questa sessione dal sito,
potrai essere estratto per i nostri premi!
Seguici su
Twitter @CommunityDaysIT
Facebook http://facebook.com/cdaysit
#CDays14