In addition to service workers, you can do app manifests that will provide better caching/offline and is more broadly supported, even though deprecated in favor of service workers (which can do much more). If you're only looking for caching, that may be enough of a fallback.
Personally, I feel it really depends on your use case and needs... many more interactive applications (that work closer to traditional desktop applications) are better as a PWA... where if you just need some forms around mostly static data more traditional approaches with progressive enhancement is better.