- From: Tim Streater <tim@clothears.org.uk>
- Date: 16 Apr 2012 21:40 +0100
On 16 Apr 2012 at 19:07, Darin Fisher <darin at chromium.org> wrote: > Aren't we missing an opportunity here? By giving web developers this easy > migration path, you're also giving up the opportunity to encourage them to > use a better API. Asynchronous APIs are harder to use, and that's why we > need to encourage their adoption. If you just give people a synchronous > version that accomplishes the same thing, then they will just use that, > even if doing so causes their app to perform poorly. > > See synchronous XMLHttpRequest. I'm sure every browser vendor wishes that > didn't exist. Note how we recently withdrew support for synchronous > ArrayBuffer access on XHR? We did this precisely to discourage use of > synchronous mode XHR. Doing so actually broke some existing web pages. The > pain was deemed worth it. In my app I have about 90 async XMLHttpRequest calls. I have one synchronous one that I'd really like to keep as it facilitates a clean tidy up if the user ignores my Exit button and quits by closing the window. When the app closes I need to run a script in order to shut down a local apache instance amongst other things. I hope I'm not going to find this to be a problem if synchronous mode XMLHttpRequest is removed from Safari at some future point. My code looks like this: function quitbyClose () { // User clicked window close button. Must make a synchronous ajax call to tidy up. We have to ensure // SESE with no "return" being executed due to the odd way that onbeforeunload operates, in two cases: // 1) Where Safari re-opens myapp after user quits Safari and user has already restarted myapp // 2) Where user might try to start this file by hand var request, data; if (portnum>0) { closeWindows (); // Close any popups data = "datarootpath=" + encodeURIComponent (datarootpath) + "&debugfl=" + debugfl; request = new XMLHttpRequest (); request.open ("POST", "http://localhost:" + portnum + "/bin/myapp-terminate.php", false); request.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); request.onreadystatechange = function() { if (request.readyState!=4) return false; } request.send (data); } } -- Cheers -- Tim
Received on Monday, 16 April 2012 13:40:00 UTC