What is a single page application and is this the technology I should use for developing my web application?
5th December 2011
My answer to What is a single page application and is this the technology I should use for developing my web application? on Quora
Single page applications are applications which are heavily dependent on JavaScript, with just one web page that you visit which then loads all other content using JavaScript. Prominent examples include Gmail and the new twitter.com
Instead of navigating to separate URLs these applications tend to update the fragment hash (the bit after the #)—which retains bookmarkability and allows the back/forward buttons to continue to function.
Personally I think they are a terrible idea for almost all sites and applications. They break one of the most important contracts on which the Web is based—the idea that I can perform an HTTP request to a server, request a specific path and get back a representation of the resource at that path. With single page apps I get the same representation for every resource—a nasty blob of JavaScript—and I’m expected to then fire up a full JavaScript+DOM implementation in order to execute and extract information from the resource.
They also break HTTP status codes—you don’t get a 404 for missing content any more, you get a 200 for everything.
Thankfully the HTML5 history API makes it possible to create sites/applications that don’t refresh the full page while still maintaining proper URLs. GitHub are a superb example of a site that does this—click around in the repository browser with JS turned on and it updates via ajax (and updates the URL bar as well)—visit the same pages with JS turned off and you still get the correct content.
Unfortunately the HTML5 history API isn’t available in IE until version 10.
My recommendation: don’t build something as a single page application unless you are sure you completely understand the implications of doing so. If you’re going to do it, you can avoid actively hurting the Web by implementing it using the HTML5 history API, ensuring everything works as it should without JavaScript and letting IE prior to v10 have the unenhanced version (the GitHub solution).
More recent articles
- Weeknotes: the Datasette Cloud API, a podcast appearance and more - 1st October 2023
- Things I've learned about building CLI tools in Python - 30th September 2023
- Talking Large Language Models with Rooftop Ruby - 29th September 2023
- Weeknotes: Embeddings, more embeddings and Datasette Cloud - 17th September 2023
- Build an image search engine with llm-clip, chat with models with llm chat - 12th September 2023
- LLM now provides tools for working with embeddings - 4th September 2023
- Datasette 1.0a4 and 1.0a5, plus weeknotes - 30th August 2023
- Making Large Language Models work for you - 27th August 2023
- Datasette Cloud, Datasette 1.0a3, llm-mlc and more - 16th August 2023
- How I make annotated presentations - 6th August 2023