Synchronous XHR will tie up every other browser too--because it's a blocking call, hence the "synchronous"...
A rare example of appropriate use is an onbeforeunload handler that saves your work on a webpage when you close the window, because in this case, asynchronous calls will never complete between the click and the window unloading so you have to synchronously block the unload event handler. Now, go post that on this SO thread [1] and make some points ;-)
[1] http://stackoverflow.com/questions/2088318/is-there-any-reas...
In a browser that isolates tabs into their own processes, like Chrome, try opening a tab for www.google.com and then enter this in your address bar:
javascript:document.getElementById('lst-ib').onclick=function(){while(1);}
When you click on the search box the entire tab will freeze, because the tab process is stuck inside the JS engine running the infinite loop function we bound to the click handler. It's not a matter of bad browser design, that's how the JS execution model is intended to work."Web workers" is the HTML5 proposal for running JS code that does not block the event loop. They do not have direct access to the DOM and can only communicate with JS code in the main event loop via a message passing API.
Although browser chrome could run in a separate thread, that wouldn't prevent page itself (and any interaction with it) from "freezing".
This is because any interaction with the page is fired as JS events, and if JS is busy, it can't pick those events.
Browser can't react to any clicks (even links and buttons can't be activated, because JS is given chance to intercept and cancel those clicks). Even if you want to leave the page, beforeunload/unload events will get queued.
Also pages need to be refreshed only between JS events (that's how DOM animation works, that's how canvas buffering is specced), so even screen redraw is tricky when JS is executing.
Their own guidelines that they link to [1] says "Do not: call into any 'unknown' code from your UI thread". I don't see why a browser is special and can't keep to that rule - especially a modern browser like IE9.
[1] http://msdn.microsoft.com/en-us/library/dd744765(v=vs.85).as...
A different issue is whether the synchronous mode of XHR was a good idea in the first place. But what's done is done.