[whatwg] Web Sockets

Brady Eidson beidson at apple.com
Fri Jul 11 14:08:57 PDT 2008

 From the link you provide:

"In some situations, it is more natural to make a blocking call and  
have the call return the received value, but this synchronous-style  
XHR is currently plagued with the risk of locking up the user's  
browser window forever as there is no timeout used in waiting for data  
from the server."

The flaw in this argument is that they only see locking up the browser  
window "forever" as an evil.  This is wrong.  It is not okay to lock  
up the browser window.  Ever.

They go on to explain how if only there were a way to lock up the  
browser window *for a little while*, that would be okay:

"1.  Add a timeout property to the XMLHttpRequest object that controls  
how long an XHR call will wait for the server before aborting the call  
and returning null or exception"

This is not a solution.  Look at native applications for example.  20  
years ago it might have been common - not acceptable, but common - to  
block the main thread waiting for a long running i/o operation with  
the safety net of a timeout.  This is simply not done anymore.  Native  
applications have turned to either asynchronous i/o, or running  
synchronous i/o on a background thread.

"2.  Improve handling of UI events during a sync XHR so UI gets  
repainted when needed and animated GIFs are run." ... "allows the user  
to abort the blocking operation"

This is not user-centric programming and seems pretty unacceptable to  
me.  The user already said they want to close the browser window, and  
they should not have to repeat themselves.

As a coder, I sympathize with those developers who would love the  
convenience of programming with synchronous i/o.
As a browser developer and a user of the real web, I know it's a  
downright dangerous path to rationalize repeating these past mistakes.

Per my original response, the main objection my coworkers and I have  
is with synchronous i/o on the main thread.  Now that Hixie has given  
us a glimpse at what will become a fleshed out worker thread spec, I  
think it's entirely reasonable to allow such operations on such a  
background thread.

As long as protections are in place to make sure "convenience-minded"  
developers can't lock up the main thread waiting for a background  
operation to complete, of course...  ;)


On Jul 11, 2008, at 12:04 PM, Mike Wilson wrote:

> Blocking I/O on the main thread is ok if it's possible to specify
> a timeout for the I/O operation, see:
> http://www.openajax.org/runtime/wiki/Synchronous_XHR_Enhancements
> and if the UA'a user interface is kept responsive (running animated
> GIFs, repainting UI etc) and allows the user to abort the blocking
> operation (f ex as a new use of the Stop button), see:
> http://www.openajax.org/runtime/wiki/Browser_Unresponsive_Mode_Enhancements
> Best regards
> Mike Wilson
>> -----Original Message-----
>> From: whatwg-bounces at lists.whatwg.org
>> [mailto:whatwg-bounces at lists.whatwg.org] On Behalf Of Brady Eidson
>> Sent: den 7 juli 2008 22:50
>> To: Mike Ter Louw
>> Cc: whatwg; Ian Hickson
>> Subject: Re: [whatwg] Web Sockets
>> On Jul 7, 2008, at 12:57 PM, Mike Ter Louw wrote:
>>> Joking aside, should a blocking read/recv call be made available?
>>> In some cases additional lag may be an acceptable compromise for
>>> maintaining the JavaScript call stack until a response arrives.
>> My personal take (and the take of most of the people I work with) is
>> that blocking i/o on the main thread should be out of the question.
>> No matter what assumptions, guarantees, or compromises are
>> understood
>> in a rationalization for allowing it, we've seen time and time again
>> that they backfire and lead to poor user experiences and bad
>> performance problems.
>> Notice I'm explicitly mentioning the main thread - if we get
>> a clear,
>> clean spec for worker threads and we restrict blocking i/o to such
>> worker threads, then sure - go for it!
>> ~Brady

More information about the whatwg mailing list