On 30.3.2012 0:19, Glenn Maynard wrote:
On Thu, Mar 29, 2012 at 2:29 AM, Darin Fisher <[email protected] <mailto:[email protected]>> wrote:

    I've never been terribly happy with createObjectURL and the
    requirement for
    folks to remember to call revokeObjectURL.  I really like that
    we're talking
    about ways to minimize this pain :-)

    I noticed the WeakRefs proposal:
    http://wiki.ecmascript.org/doku.php?id=strawman:weak_refs


This exposes GC behavior, though. They try to reduce that by making it only collectable during the event loop, but it's still observable. For example,

blob = createObjectURL();
blob = null;
setTimeout(function() { img.src = blob; }, 0);
return;

might or might not succeed.

(IIRC, WeakMaps avoid GC exposure by being non-enumerable. That seems to make them not very useful, since it's hardly different from simply assigning properties to the object.)

On Thu, Mar 29, 2012 at 6:08 AM, Robert O'Callahan <[email protected] <mailto:[email protected]>> wrote:

    It might be a bit better to revoke the URL at the next stable
    state. Microtask checkpoints can happen during synchronous script
    execution.


I'm confused. I'd never seen microtasks actually defined (only suggested), but I see it's just not defined in the page I was viewing. It looks like Google's returning out of date spec links (http://www.whatwg.org/specs/web-apps/current-work/.w3c-html-core/webappapis.html#processing-model-2). This is the second time I've been bit recently by landing on a weird, out-of-date spec URL (ignoring the /TR/ trap, which I know to watch out for)...

So, "microtask" isn't what we need here (and not what IndexedDB needs, either). Stable state might be correct. I think that has another effect, which you don't get by waiting for the event loop: blob URLs would also be freed between <script> execution. That is, in

<script>url = URL.createObjectURL(blob); ...</script><script>...</script>

the blob is released before the second <script> is run. That seems like a plus.

getObjectURL(blob, {auto: true}) would simply do:

N+1. Return the generated url, and then continue running this algorithm asynchronously.
N+2. Await a stable state.
N+3. Revoke url.

which doesn't require any new concepts.

I'd suggest "auto" as the option name; it's short, since it'd probably be used a lot.

On Thu, Mar 29, 2012 at 3:03 AM, Charles Pritchard <[email protected] <mailto:[email protected]>> wrote:

    Any feedback on what exists in modern implementations? MS seems to
    have the most hard-line stance when talking about this API.


As far as I could tell, MS implemented something behind closed doors, presented it whole, and then more or less refused to change anything, despite the serious issues pointed out in it. Web API development can't work that way in 2012.

--
Glenn Maynard


Sure, weak referencing is probably not well explored approach, but the underlying idea applied to blob is interesting: URL creates no reference to Blob (from GC perspective), meaning Blob is subjected to GC regardless of BlobUrl existence. This would remove the need for revoking URL, programmers would only need to maintain blobs they want to be persistent (e.g. in some global array). This seem to solve nothing, because there is still some revoking/releasing variable, but the approach is reverse (explicit keeping of reference, instead of explicit releasing), which could seriously limit the "I forgot to release this" cases. And what you are working with is the actual Blob, not some String thing.

Brona

Reply via email to