That would definitely help a bit! There's another limitation though: we have to update *every pixel* every frame, or the coherence in the noise gets lost. So it would still be quite choppy. I'll give it a go nevertheless, maybe it's not so bad in practice
You can create (and store) a new canvas from each tree in the main thread and apply it via drawImage(). Once a selection of frames has been rerendered this should then be even faster than Mike's white noise version. Prerendering should also be fairly fast if you use multiple workers.