
LocalForage – A fast and simple storage library for JavaScript - vmorgulis
https://github.com/localForage/localForage
======
AshleysBrain
This is a great library. It's simple but flexible. You can treat it like async
key-value storage but it has extra features like using different databases,
all while handling the details of IndexedDB, WebSQL or localStorage support.

------
tqkxzugoaupvwqr
General question: How do you handle cases where people surf in private mode in
Safari? Safari doesn’t allow localStorage in private mode.

~~~
AshleysBrain
Ideally these libraries will fall back to in-memory storage, which is lost
when you navigate away, but keeps pages working when they expect to be able to
write then read back a value in the same page.

Some browsers like Firefox throw exceptions when you try to touch storage in
private browsing mode. This can be super annoying since it tends to break
pages that use storage and haven't been specially tested in that mode in that
browser. A library-based memory fallback helps avoid that. AFAIK it's what
Chrome does with storage in incognito mode: just save calls in RAM, return
them if asked for, then throw it away when navigating.

There's a PR to add this for localforage but it's been stuck in purgatory for
a while and seems to have some resistance despite the utility:
[https://github.com/localForage/localForage/pull/555](https://github.com/localForage/localForage/pull/555)

~~~
lucideer
I think the reasons stated for not including this PR are pretty well thought
out, and while your arguments on utility seem consistent and definitely make
logical sense, they don't really reflect my own development experience.

This could be just personal preference, but it seems far more likely to me
that my expectation when storing values in localStorage would not match
Chrome's apparent silent fallback of not storing that value. I'd much prefer
to handle the error case.

~~~
paulddraper
localStorage can be cleared at any time anyway. This simply makes it happen on
each page navigation.

IDK what you'd rather do in Chrome Incognito, Safari Private, Edge InPrivate,
etc.

\---

PS. If the OS registry entry for localStorage location is invalid or missing,
IE will also throw an error.

~~~
lucideer
What I would do in Incognito, etc. would depend on the website/app and use-
case. The point was that handling that on a case by case basis makes more
sense than the suggested silent (and I would say unexpected) behavioural
change.

~~~
AshleysBrain
I'd say that if the user is using a private browsing mode, they are explicitly
indicating to the browser not to store anything, and they will know that will
happen. It's the whole purpose of the feature, so I don't think it counts as
"silently" doing anything. I don't think there's any reason to then
potentially break web pages that (quite reasonably) expect storage APIs to
work.

~~~
paulddraper
Right. It's like "silently" removing session and non-session cookies when the
windows closes. That's the whole point.

------
languagewars
Interesting, I've been very happy with pouchdb finagling all these browser DBs
into one that matches couchdb on the server side.. I would really have to
think about the auth logistics for memcache to switch to a kV store. But that
would be even more insane minimalism atop the absurd complexity of the web
stack.

------
skrowl
This is at least the 8th time this has been posted
([https://hn.algolia.com/?q=localForage](https://hn.algolia.com/?q=localForage)).
Is there something new or significant that we need to know about?

~~~
Cozumel
There's a post on the front page about it, it's just brought it to peoples
attention again.
[https://news.ycombinator.com/item?id=13419823](https://news.ycombinator.com/item?id=13419823)

------
cplantijn
While I am fascinated by this, what are some good use cases for using offline
storage? How can a web-enabled browser app benefit from offline storage? I've
come to appreciate the power that client-side stores like what Redux and MobX
provide, but what's the benefit and use case of using this?

~~~
Klathmon
We actually use localforage as a backing store to "persist" parts of the redux
store automatically.

The app itself is a freight logistics tracking and scanning app which is meant
to download and store a few hundred MB of carton data and be able to scan and
process it offline and sync back to a server when online again.

With redux-persist and localforage it's been effortless to enable this. Parts
of our store are whitelisted and are persisted to localforage every 300ms or
so. When the app is loaded the next time it pulls the data from localforage
and "rehydrates" the store with it so it's like we never left the page in
question.

------
dvh
It's asynchronous, localStorage is synchronous

------
jazoom
I tried this but ended up going with SimpleStorage. I can't remember why but
there was something better about it.

