On Wed, Jun 9, 2010 at 3:36 PM, Tab Atkins Jr. <jackalm...@gmail.com> wrote:
> On Wed, Jun 9, 2010 at 3:27 PM, Jonas Sicking <jo...@sicking.cc> wrote:
>> I'm well aware of this. My argument is that I think we'll see people
>> write code like this:
>>
>> results = [];
>> db.objectStore("foo").openCursor(range).onsuccess = function(e) {
>>  var cursor = e.result;
>>  if (!cursor) {
>>    weAreDone(results);
>>  }
>>  results.push(cursor.value);
>>  cursor.continue();
>> }
>>
>> While the indexedDB implementation doesn't hold much data in memory at
>> a time, the webpage will hold just as much as if we had had a getAll
>> function. Thus we havn't actually improved anything, only forced the
>> author to write more code.
>>
>>
>> Put it another way: The raised concern is that people won't think
>> about the fact that getAll can load a lot of data into memory. And the
>> proposed solution is to remove the getAll function and tell people to
>> use openCursor. However if they weren't thinking about that a lot of
>> data will be in memory at one time, then why wouldn't they write code
>> like the above? Which results as just as much data being in memory?
>
> At the very least, explicitly loading things into an honest-to-god
> array can make it more obvious that you're eating memory in the form
> of a big array, as opposed to just a "magically transform my blob of
> data into something more convenient".

I don't fully understand this. getAll also returns an honest-to-god array.

> (That said, I dislike cursors and explicitly avoid them in my own
> code.  In the PHP db abstraction layer I wrote for myself, every query
> slurps the results into an array and just returns that - I don't give
> myself any access to the cursor at all.  I probably like this better
> simply because I can easily foreach through an array, while I can't do
> the same with a cursor unless I write some moderately more complex
> code.  I hate using while loops when foreach is beckoning to me.)

This is what I'd expect many/most people to do.

/ Jonas

Reply via email to