[Редактировать ~ 5 лет спустя: кое-что из этого начинает меняться, и появились новые функции веб-платформы, которые фактически позволяют выполнять рендеринг на холст от Worker!См. Этот блог для получения дополнительной информации: https://hacks.mozilla.org/2016/01/webgl-off-the-main-thread/ - остальная часть ответа предоставлена для информации эры 2011 года;)]
Веб-работники могут только вычислять, не изменять DOM или делать какие-либо вызовырисовать на холсте.Однако, как вы говорите, вы можете отправить массив пикселей веб-работнику, чтобы обработать его и опубликовать обратно.Поскольку это асинхронно, я не понимаю, почему это может привести к какому-либо замедлению потока пользовательского интерфейса, если только вы намеренно не заблокируете его, пока веб-работник не ответит (а вы не должны).* звонки занимают так много времени, что это влияет на пользовательский интерфейс.В наши дни большинство холстов работают с аппаратным ускорением, поэтому их следует пропустить.Я предполагаю, что вы рисуете через веб-работника в массив пикселей холста каждый кадр , что фактически означает, что вы программно визуализируете холст в javascript .Javascript все еще слишком медленный, чтобы делать это - даже рендеры программного обеспечения на C ++ работают довольно медленно, поэтому аппаратное ускорение важно.Таким образом, вы можете визуализировать что-то в массив пикселей холста в веб-работнике один раз , а затем, когда вы получите результат, кэшировать его в Image
один раз , а затем нарисовать это1017 * на холст сколько угодно.Это все еще должно быть очень быстро.
Редактировать: вы можете захотеть заглянуть в WebGL, где вы можете написать фрагментные шейдеры, которые фактически являются небольшими программами для обработки пиксельных эффектов.Они работают исключительно на видеокарте, поэтому они тупо быстрые.