The Offline Cookbook: caching and serving offline-first
jakearchibald.com
jakearchibald.com
That's because there's really only one way to do it: you split your app into a client/server model, where the client (the ui resources) are updated transactionally in the background and swapped into place when they are ready, and there's a local datastore that serves as a cache of the truth and a queue of pending changes.
ServiceWorker is more flexible and powerful than appcache, and you can do other (non-offline related) things with it. That's great. But the fundamental model for building an offline-capable applications is well-understood and unlikely to change. It's the model that all mobile applications frameworks use, what desktop apps used before, and what appcache implemented.
AppCache can just about handle static assets. Just about. That's not enough for most apps. Look at the patterns in the article and their use-cases.