Book Image

Offline First Web Development

By : Daniel Sauble
Book Image

Offline First Web Development

By: Daniel Sauble

Overview of this book

When building mobile apps, it’s easy to forget about the moments when your users lack a good Internet connection. Put your phone in airplane mode, open a few popular apps, and you’ll quickly see how they handle being offline. From Twitter to Pinterest to Apple Maps, some apps might handle being offline better—but very few do it well. A poor offline experience will result in frustrated users who will abandon your app, or worse, turn to your competitor’s apps Expert or novice, this book will teach you everything you need to know about designing and building a rigorous offline app experience. By putting the offline experience first, you’ll have a solid foundation to build upon, avoiding the unnecessary stress and frustration of trying to retrofit offline capabilities into your finished app. This basic principle, designing for the worst-case scenario, could save you countless hours of wasted effort.
Table of Contents (17 chapters)
Offline First Web Development
Credits
About the Author
About the Reviewers
www.PacktPub.com
Preface
Index

Cache limits


File space is limited. Databases have a tendency to grow out of bounds, so if you're not careful, you'll end up with more database than you can store. PouchDB is particularly bad in this regard as it stores the revision history of every document. Whenever you make a change, you store both the old document and the new document.

Now, we know that the revision history exists to help us resolve conflicts gracefully in offline scenarios. However, to do this, we only need to save the leaves, the last revision of a document. Is there a graceful way to get rid of older revisions and save space?

Fortunately, the answer is yes. When you create a local PouchDB database, you can set the auto_compaction option to make this behavior default whenever a document is written. Edit the Sync controller and add the following variable definition to the init method:

options = { auto_compaction: true },

Now, add this variable to each new PouchDB statement in the method:

listStore.localDB = new PouchDB(...