First off, PWAs allow for “offline accessibility”. Though that’s perhaps a bit of an unfortunate term, because it’s not really about offline, is it? It’s about speed. While memory is superfast, disk is a bit slower, and network even slower. The reason you're doing offline-first is that it forces you to think about the user experience on slower networks. Because those users, too, are going to need their data (and they need it rather sooner than later).
The question is: How? Well, one important feature of PWAs is that they store data, both dynamic as well as static, client-side. For static data storage, developers can use Cache API and Service Workers. For dynamic data storage, they use Indexed DB. In short, we cache more of our application client-side, instead of server-side.
Now, there are two ways to implement progressive enhancement:
- Weak interpretation: It refers to web apps which progressively become apps (i.e. these apps start out as a website, but then slowly turn into an app).
- Strong interpretation: It refers to the fact that a website should be able to function without JS.
Currently, native apps tackle the “offline-first”-issue, as well as the multithreaded issue. These are two things web apps can’t generally handle. Web apps are, however, “progressively enhanced”, unlike native apps. But with Progressive Web Apps we can develop apps that combine these three features all at once: offline accessibility, multithreading and progressive enhancement. In short, PWAs could combine the best of both worlds.
Image: Paul Verbeek