Everything in browsers is stupid and awful. IndexedDB is implemented on top of SQLite for Firefox, I think, which makes it completely insane.
And on Chrome it's on a pile of JS on top of LevelDB which is already much slower than something like LMDB, but I don't know what I'm talking about.
Apparently the biggest issue (for reads) is that for iterating you have to switch on every row between native code and JS code. That gets much better if you fetch stuff in batches.
Also storing (and reading too, apparently) JS objects is much slower than storing JSON strings, because the act of deep copying objects and then encoding/decoding them is magnitudes slower than the superfast JSON.stringify/parse of browsers.