If you need to perform a synchronous, expensive operation, it might be worth splitting it up into smaller chunks and wrap each chunk in a window.setTimeout. That way, as each chunk is completed, the browser will have time to redraw the screen and respond to queued up user interactions before performing the next chunk.
Making the conscious decision to support IE8 and beyond in our redesign was an enormous, but rewarding challenge. Now we have an interactive interface that relies much less on page refreshes and much more on quick AJAX calls and client-side state. On the CSS side, we were also able to delete over 100 images of things like buttons, arrows, pre-made gradients, and fake shadows because they were all re-written with CSS3. Obviously, you can test all we’ve done by signing up to see all the awesomeness we’ve built.
We learned a lot over the last few months, and I hope after reading this you have, too. We’re always happy to help the community in developing great sites. Happy coding!