A single-page application (SPA), also known as single-page interface (SPI), is a web application or web site that fits on a single web page with the goal of providing a more fluid user experience similar to a desktop application.

Single page apps are distinguished by their ability to redraw any part of the UI without requiring a server roundtrip to retrieve HTML. This is achieved by separating the data from the presentation of data by having a model layer that handles data and a view layer that reads from the models.

Single page applications are more capable of decreasing load time of pages by storing the functionality once it is loaded the first time, allowing easier data transfer between pages and a more complex user interface instead of trying to control so much from the server.

Advantages in Single Page Application Development

An SPA can deliver the best of both worlds: the immediacy of a desktop application and the portability and accessibility of a website. With a little effort, it can support desktops, tablets, and smart phones running many different operating systems. SPAs are easily updated and distributed, usually without requiring any action from the user.

  • An SPA can render like a desktop application — The SPA redraws the parts of the interface that need to change only as needed. A traditional website, in comparison, redraws the entire page on many user actions, resulting in a pause and a “flash” while the browser retrieves from the server and then redraws everything on the page. If the page is large, the server is busy, or the internet connection is slow, this flash can take several seconds or more, and the user has to guess when the page is ready to use again. This is a horrible experience when compared to the rapid rendering and immediate feedback of an SPA.
  • An SPA can respond like a desktop application — The SPA minimizes response time by moving working (transient) data and processing from the server to the browser as much as possible. The SPA has the data and business logic needed to make most decisions locally and therefore quickly. Only data validation, authentication, and permanent storage must remain on the server. A traditional website has most of the application logic on the server and the user must wait for a request/response/redraw cycle in response to much of their input. This can take several seconds, compared to the near immediate response of the SPA.
  • An SPA can notify users of its state like a desktop application — When an SPA does have to wait on a server, it can dynamically render a progress bar or busy indicator so the user isn’t befuddled by a delay. Compare this to a traditional website, where the user actually has to guess when the page is loaded and usable.
  • An SPA is nearly universally accessible like a website — Unlike most desktop applications, users can access an SPA from any web connection and a decent browser. Today, the list includes smart phones, tablets, televisions, laptops, and desktop computers.
  • An SPA can be instantly updated and distributed like a website — The user doesn’t have to do anything to realize the benefits—when they reload the browser it works. The hassle of maintaining multiple concurrent versions of software is largely eliminated.7 The authors have worked on SPAs that have been built and updated multiple times in a single day. Desktop applications often require a download and administrative access to install a new version, and the interval between versions can be many months or years.
  • An SPA is cross-platform like a website — Unlike most desktop applications, a well written SPA can work on any operating system that provides a modern HTML5 browser. Though usually this is considered a developer benefit, it’s extremely useful for many users who have a combination of devices like, Windows at work, a Mac at home, a Linux server, an Android phone, and an Amazon tablet.

ThoughtExecution expertise in Single Page Application Technologies stack

Technologies Description
Node.js Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
CoffeeScript CoffeeScript is a little language that compiles into JavaScript.
Backbone.js With Backbone, you represent your data as Models, which can be created, validated, destroyed, and saved to the server. Whenever a UI action causes an attribute of a model to change, the model triggers a "change" event; all the Views that display the model's state can be notified of the change, so that they are able to respond accordingly, re-rendering themselves with the new information. In a finished Backbone app, you don't have to write the glue code that looks into the DOM to find an element with a specific id, and update the HTML manually — when the model changes, the views simply update themselves.
WebSocket WebSocket is a web technology providing full-duplex communications channels over a single TCP connection.
Socket.IO Socket.IO aims to make realtime apps possible in every browser and mobile device, blurring the differences between the different transport mechanisms. It's care-free realtime 100% in JavaScript.
HTML5 Pushstate To enable servers to push data to Web pages over HTTP or using dedicated server-push protocols
MongoDB MongoDB is an open-source document database, and the leading NoSQL database.
Mongoose Mongoose provides a straight-forward, schema-based solution to modeling your application data and includes built-in type casting, validation, query building, business logic hooks and more, out of the box.
Express Express is a minimal and flexible node.js web application framework, providing a robust set of features for building single and multi-page, and hybrid web applications.
Connect Connect is a middleware framework for node, shipping with over 18 bundled middleware and a rich selection of 3rd-party middleware.
Async.js Async is a utility module which provides straight-forward, powerful functions for working with asynchronous JavaScript. 
Redis Redis is an open source, BSD licensed, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets.
Cluster Extensible multi-core server management for nodejs.
HARProxy HAProxy is a free, very fast and reliable solution offering high availability, load balancing, and proxying for TCP and HTTP-based applications. It is particularly suited for web sites crawling under very high loads while needing persistence or Layer7 processing. Supporting tens of thousands of connections is clearly realistic with todays hardware.