{"id":12160,"date":"2016-12-06T18:30:40","date_gmt":"2016-12-06T17:30:40","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=12160"},"modified":"2016-12-06T18:30:40","modified_gmt":"2016-12-06T17:30:40","slug":"single-page-application-cosa-sono-come-funzionano-e-quali-framework-utilizzare","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/single-page-application-cosa-sono-come-funzionano-e-quali-framework-utilizzare\/","title":{"rendered":"Single Page Application: cosa sono, come funzionano e quali framework utilizzare"},"content":{"rendered":"<p>Chi programma il web lato server dalle origini, sa che \u00e8\u00a0necessario scaricare ogni pagina web (dal server al browser) per poterla utilizzare. Ogni eventuale aggiornamento ai contenuti mostrati sarebbe possibile solo al prezzo di ricaricare la pagina, il tutto con grande fastidio per l&#8217;utente e accurato lavoro di coordinamento dello sviluppatore. La tecnologia <strong>Ajax<\/strong> ha cambiato lo scenario\u00a0permettendo al codice Javascript di aggiornare porzioni della\u00a0pagina web \u00a0in <em>background<\/em> senza richiederne un\u00a0ricaricamento integrale da server. L&#8217;estremizzazione di questa pratica, con il favore delle librerie che l&#8217;hanno reso sempre pi\u00f9 agevole (pensiamo a jQuery e tutti i suoi simili e derivati), ha portato a delle applicazioni web che non hanno bisogno di ricaricarsi mai: le <strong>Single Page Application<\/strong>, spesso dette SPA. In pratica, la pagina viene scaricata nel browser non appena invocata e l\u00ec continua a dialogare con servizi Web o a funzionare autonomamente, godendo\u00a0dei benefici del web con la comodit\u00e0 di un&#8217;applicazione desktop.<\/p>\n<p>Le\u00a0SPA sono ormai la struttura\u00a0pi\u00f9 comune per le\u00a0web app e la loro natura richiede un&#8217;architettura interna articolata, propria pi\u00f9 di un&#8217;applicazione completa che di una semplice interfaccia per interagire con qualche altro servizio. Esistono diversi framework in grado di offrire tutto il necessario a queste applicazioni: pensiamo ad <a href=\"https:\/\/angularjs.org\/\" target=\"_blank\">AngularJS<\/a>, il pi\u00f9 completo \u00a0in assoluto, che ha ufficializzato il termine Single Page Application nel mondo ma anche ad altri pi\u00f9 piccoli per\u00f2\u00a0sempre ricchi di funzionalit\u00e0 come <a href=\"http:\/\/emberjs.com\/\" target=\"_blank\">Ember.js<\/a> e <a href=\"http:\/\/knockoutjs.com\/\" target=\"_blank\">Knockout.js<\/a> fino ad uno dei pi\u00f9 giovani sebbene dotato di mentalit\u00e0 nuova come <a href=\"https:\/\/www.meteor.com\/\" target=\"_blank\">Meteor.js<\/a>. La nascita di questi framework ha soddisfatto le necessit\u00e0 dei progettisti consci del fatto che\u00a0 non basta Ajax per\u00a0creare delle pagine web fluide in locale come applicazioni desktop: servono moltissimi strumenti di elaborazione, architettura interna completa con lo storico pattern MVC o la sua derivazione pi\u00f9 nuova MVVM (Model View ViewModel) nonch\u00e8 altri aspetti &#8211; anch&#8217;essi molto importanti &#8211; come il data-binding (bidirezionale possibilmente) per permettere il vicendevole aggiornamento tra interfaccia e dati ed il monitoraggio continuo delle evoluzioni del Model.<\/p>\n<p>Le SPA stanno sostituendo velocemente persino le applicazioni desktop offrendo molti vantaggi sia in termini di usabilit\u00e0 che di manutenibilit\u00e0 sebbene conservino le tipiche problematiche del web come l&#8217;interazione da svolgere comunque attraverso la Rete e la divisione del codice tra server e client che spesso &#8211; ma non sempre &#8211; \u00e8 scritto in linguaggi differenti: Javascript per lavorare nel browser e uno tra PHP, Java, C# e altri per il backend web.<\/p>\n<p>Su questo sito, seguiamo da tempo la tematica con interesse svolgendo approfondimenti sui framework esistenti pi\u00f9 in voga. Sicuramente\u00a0continueremo a farlo ma voi, dal canto vostro, non esitate a suggerirci idee o\u00a0&#8211; perch\u00e8 no? &#8211; muoverci qualche obiezione lasciando un commento.<\/p>\n<p>Alla prossima!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Chi programma il web lato server dalle origini, sa che \u00e8\u00a0necessario scaricare ogni pagina web (dal server&#8230;<\/p>\n","protected":false},"author":561,"featured_media":12621,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[8],"tags":[1806,1684,1804,1699,1805,1700,1598],"class_list":["post-12160","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guide-varie","tag-ajax","tag-angularjs","tag-ember-js","tag-knockout-js","tag-meteor-js","tag-single-page-application","tag-web-developers"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12160","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/561"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=12160"}],"version-history":[{"count":6,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12160\/revisions"}],"predecessor-version":[{"id":12622,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12160\/revisions\/12622"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/12621"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=12160"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=12160"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=12160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}