| I have been working through these ideas since 2007, taking it one step at a time: 2007: I "single-paged" subsections of my application, with different PHP scripts on the backend. 2008: Consolidated the backend into a single API. 2009: Switched the backend to Rails for ORM functionality, and finished upgrading the client interface to a single page application. 2009: Switched the backend to Javascript (Rhino) to enable sharing of model validations and other code (even native object extensions) with the client. 2009: Got my application working completely offline using a local SQL database and replication manager, together with ApplicationCache. At first I used LocalStorage but soon hit storage and performance limits. 2009: Switched from Rhino to NodeJS. Much faster, cleaner APIs. Huge performance gains from V8 and non-blocking IO. 2010: Results of the above up at: https://szpil.com Along the way I built up a framework for managing concatenation, client-side navigation, sessions, views, controllers, email etc. One significant advantage of building client-side only apps that replicate with the server is that they work offline by definition. Managing state on the client opens up incredible opportunities. |