What is a single page application and is this the technology I should use for developing my web application?
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: Parquet in Datasette Lite, various talks, more LLM hacking - 4th June 2023
- It's infuriatingly hard to understand how closed models train on their input - 4th June 2023
- ChatGPT should include inline tips - 30th May 2023
- Lawyer cites fake cases invented by ChatGPT, judge is not amused - 27th May 2023
- llm, ttok and strip-tags - CLI tools for working with ChatGPT and other LLMs - 18th May 2023
- Delimiters won't save you from prompt injection - 11th May 2023
- Weeknotes: sqlite-utils 3.31, download-esm, Python in a sandbox - 10th May 2023
- Leaked Google document: "We Have No Moat, And Neither Does OpenAI" - 4th May 2023
- Midjourney 5.1 - 4th May 2023
- Prompt injection explained, with video, slides, and a transcript - 2nd May 2023