Lo sviluppatore Gleb Bahmutov ha recentemente proposto un efficace esempio di applicazione self-rewriting tramite l'utilizzo di ServiceWorker, si tratta di un approccio che sembrerebbe in grado di garantire tempi di caricamento delle componenti praticamente immediati creando un contesto simile a quello che, chiaramente in via ipotetica, si potrebbe ottenere sfruttando il rendering lato server direttamente via Web browser.
Partendo dal funzionamento di una semplice soluzione basata su AngularJS 2, il coder ha valutato i vantaggi dello sviluppo di una Instant Web Application basandosi su quella che è la dinamica consueta di un progetto destinato all'interazione continua con l'utilizzatore, nel caso specifico la classica "lista delle cose da fare" (ToDo), dove, successivamente al primo caricamento, ogni modifica effettuata causerà un evento destinato a determinare il reloading.
L'inserimento di un nuovo elemento il lista porterà plausibilmente alla visualizzazione di un'area priva di contenuti che in un tempo più o meno lungo sarà sostituita dal markup e dai contenuti, dall'esecuzione degli script e, infine, da una riscrittura delle struttura di pagina; l'utilizzo di soluzioni come React non sembrerebbe essere stato in grado di ovviare alle problematiche inerenti le seppur brevi latenze registrate.
Migliori risultati sarebbero stati ottenuti invece grazie al ricorso a Vanilla JavaScript, in sostanza il linguaggio di scripting nella sua forma pura, ma alla fine le conclusioni sarebbero state le medesime:
Every application in the list suffers from the same problem - during the page reload there is a time gap between the initial page load and the application rendering the "right" HTML
In sostanza vi sarebbero dei limiti che impedirebbero di ottenere un risultato paragonabile a quello derivante dall'utilizzo di tecnologie server side:
In server-side rendering, the page is rendered in the complete form on the server, thus when it arrives the user sees the right layout instantly.
Ecco quindi la possibile soluzione nel ricorso a ServiceWorker, deputato a memorizzare l'ultimo rendering HTML del testo, con il vantaggio di poter allocare gli elementi tramite localStorage; ad ogni cambiamento di stato il ServiceWorker si occuperà della serializzazione dell'HTML e si occuperà dell'estrazione del testo, con relativo aggiornamento di pagina, nel momento del caricamento.
Tale approccio, incentrato su bottle-service, come quest'ultimo avrebbe il vantaggio di essere agnostico rispetto al framework di riferimento e permetterebbe di evitare, oltre le latenze, qualsiasi effetto flickering (tremolio) in fase di restituzione del frontend.
Via Gleb Bahmutov