Il Web del futuro sarà sempre meno fatto da pagine e sempre più da dati e interazioni. Cioè, se ora la gran parte richieste HTTP consiste in un continuo invio di pagine HTML totali o parziali (via AJAX/XHR), la tendenza è quella di separare nettamente i dati dalla loro rappresentazione.

Questa nuova organizzazione "ad eventi" si può riassumere in 3 passi:
A questo punto c'é la ridondanza che i punti 1 e 3 entrambi hanno il compito di far visualizzare/renderizzare in HTML dei dati solo che nel primo caso la renderizzazione avviene sul server attraverso file .php, .erb, .jsp e nel terzo avviene nel client, che ovviamente supporta l'HTML ma non conosce nulla di php, ruby o java.
Che fare? Bisogna trovare un linguaggio di template HTML franco, logicless, che funzioni sia sul client che sul server che permetta di iniettare nell'HTML i dati che verranno presi da elaborazioni di server esterni.
Le alternative in campo sono liquid, haml js, tempo, mustache (usato da Twitter), ma io ho scelto handlebars perché secondo benchmark indipendenti è quello con le performance migliori ed è anche compilabile con il compilatore di Google V8.

In questo demo handlebars-rails-demo è possibile farsi un'idea di come funzioni questo sistema di gestione dell'interazione e dei dati che effettivamente transiteranno in rete.
Qualche punto saliente:
# application.html.erb<script id="note-template" type="text/x-handlebars-template"><%=raw File.read(RAILS_ROOT+"/app/views/notes/show.html.hbs") -%></script>
In application.html.erb si carica il layout della pagina e la struttura principale, il codice sopra verrà renderizzato con lo stesso template che si usa lato server per mostrare il contenuto:
<script id="note-template" type="text/x-handlebars-template">
<article>
<header>
<h1>{{{ note/title }}}</h1>
</header>
{{{ note/content }}}
<footer>
</article>
<button id="load-json">Load JSON and render</button>
</script> Il contenuto delle graffe {{{ note/title }}} verrà rimpiazzato da @note.title lato server e dal rispettivo json {} lato client, ma il template HTML è esattamente lo stesso!
# http://localhost:3000/notes/<id>.json
{
note: {
title: "Nota di prova"
content: "..." } }
Una volta che si ha il template HTML e i dati JSON si può procedere con la renderizzazione lato client in questo modo
# application.html.erb
<div id="container"> ... </div>
<script id="main">
var source = $('#note-template').html(); <== carica il template
var template = Handlebars.compile(source);
$('#load-json').click(function() {
$.getJSON("http://localhost:3000/notes/2.json", function(json) {
$('#container').append(template(json) ); <== lo riempe con i dati json ottenuti con la richiesta successiva
});
});
</script> Questa tecnica sarà presto una Best Practice per tutte le Web Application, in quando davvero permette di ridurre drasticamente il traffico dati nei siti in particolare quelli con forte interazione, inoltre separa nettamente il lavoro del Web Designer dal Web Developer.
Commenti recenti
1 settimana 5 days fa
1 settimana 5 days fa
1 settimana 5 days fa
2 weeks 1 giorno fa
2 weeks 1 giorno fa
7 weeks 1 giorno fa
7 weeks 1 giorno fa
7 weeks 2 days fa
8 weeks 2 days fa
8 weeks 2 days fa