[whatwg] postMessage() issues

Jonas Sicking jonas at sicking.cc
Mon Apr 21 11:08:13 PDT 2008


Aaron Boodman wrote:
> On Wed, Apr 16, 2008 at 3:17 PM, Jonas Sicking <jonas at sicking.cc> wrote:
>> Maciej Stachowiak wrote:
>>> - Processing a reply synchronously is awkward in any case, since you need
>>> a callback.
>> I'm not sure I follow this argument, I actually come to the opposite
>> conclusion.
>>
>> Say that a page is communicating with multiple iframes using
>> postMessage, and expect replies from all of them.
>>
>> If postMessage is synchronous it is easy to associate a given "reply"
>> with a given postMessage call, it's simply the reply you get between the
>> time you make the postMessage call and when it returns. So you could install
>> a generic listener for the message event and let the listener set a global
>> variable. Then you just do a postMessage and pick up the reply from the
>> global variable.
>>
>> If postMessage is asynchronous you need to agree on using some identifier in
>> the messages, or you have to use the pipes mechanism for all communication.
>> Granted, with javascript generators you can almost get the same behavior as
>> for synchronous calling, but that is non-trivial.
> 
> This is a really good argument. FWIW, I had not considered the case of
> coordinating between multiple iframes. That does make the async
> version significantly more complex.
> 
> IMO, the tradeoff is still worth it, though. And in the future, with
> something like Hixie's messaging proposal, this problem will go away
> (because you'll have stateful objects that represent a conversation).

That's still somewhat painful when you are sending multiple messages 
back and forth since you have to stow away state and resume where you 
were which can be a big hassle.

Certainly not impossible to deal with for a developer, but more complicated.

>> So one thing I should note first of all is that the implementation that
>> is currently in the Firefox 3 betas are synchronous. It is unlikely that
>> we can get this changed by final shipping since we are more or less in
>> code freeze already.
>>
>> Of course, we implemented this knowing that it's part of HTML5 which is
>> nowhere near complete, so obviously we were aware that it might change.
>> However it might mean that developers will have to put in workarounds in
>> order to support the FF3 release :(
> 
> What about if we just left the sync/async-ness unspecified for the
> first version of postMessage. In practice this means that
> implementations might be incompatible, but I don't the workarounds are
> that big a deal. Authors have this problem already today with XHR in
> certain edge cases (sometimes onreadystatechange is not asynchronous)?
> 
> In the future, when the messaging proposal evolves, we tighten it down
> and make it async.

I think that's a really bad idea. Async vs. sync has a huge impact on 
how to use the API, it's very likely that anyone using the API will 
break if the implementation changes either way on this. So basically 
there is very little advantage over specifying nothing at all.

/ Jonas



More information about the whatwg mailing list