Degrading gracefully with Web Workers Degrading gracefully with Web Workers multithreading multithreading

Degrading gracefully with Web Workers


This is the age-old problem of web development: what to do about browsers that don't support what you need. Currently, I only advocate using Web Workers for complex, long-running tasks that can be broken up, and for some reason, can't be done server-side. This way, if you don't have Web Workers, you simply wait longer. Otherwise, you would have to make a mess of your code with wrappers and whatnot that you'll try to avoid later. My degradation strategy happens as soon as the page is loaded.

onload function pseudocode:

if( window.Worker /*check for support*/ )    someObject.myFunction = function() { /*algorithm that uses Web Workers*/ }else    someObject.myFunction = function() { /* sad face */ }

You still have to write the algorithm twice, but you would have to do that anyway if you want to support browsers without Web Workers. So that brings up an interesting question: is it worth the time (and money) to write something twice, just so it can go a little faster for some people?


After chewing on this for a few days, I ended up writing an article on my blog:
http://codecube.net/2009/07/cross-platform-javascript-webworker/

The idea is that in cases where WebWorker is not defined, there is a wrapper API that just uses built-in techniques. Although the sample in the article is very simple, it does work in all browsers :-)


The Bespin project has (what they call) a facade that allows them to run JavaScript code in Web Workers, Gears Workers and if those are not available in the main thread.