Узнайте, как повысить производительность рендеринга на холсте с помощью OffscreenCanvas

Интерфейс OffscreenCanvas позволяет использовать контексты рендеринга холста (2D и WebGL) в Workers. Это увеличивает параллелизм в Интернете, что приводит к повышению производительности в многоядерных системах.

Используя OffscreenCanvas, мы можем визуализировать холст в рабочем потоке, чтобы основной поток не был нарушен, чтобы наше веб-приложение работало без сбоев.

О поддержке OffscreenCanvas в браузере можно узнать здесь, CanIUse.

Есть два способа использовать OffscreenCanvas

  1. Создание OffscreenCanvas из существующего холста
  2. Создание OffscreenCanvas вручную и рендеринг его на существующий холст

1. Создание OffscreenCanvas из существующего холста

Мы можем вызвать метод transferControlToOffscreen для элемента холста, чтобы получить элемент OffscreenCanvas, который можно передать работнику. Операции, примененные к OffscreenCanvas, будут автоматически отображаться на исходном холсте.

Пример

В приведенном выше коде мы создали offscreenCanvas из элемента canvas, который передается рабочему, и рендеринг будет происходить в рабочем потоке.

В файле offscreen_worker.js

Примечание. Если вы уже использовали getContext на этом холсте, вы не сможете передать его рабочему.

2. Создание OffscreenCanvas вручную и рендеринг его на существующий холст

Второй способ - создать объект OffscreenCanvas и выполнить рендеринг на этом холсте, а затем извлечь данные изображения из offscreenCanvas и отобразить их обратно на исходный холст. Используя этот способ, мы можем визуализировать сразу несколько холстов.

Чтобы отобразить изображение (ImageBitmap) из offscreenCanvas, вы можете использовать ImageBitmapRenderingContext контекст, который можно создать, вызвав canvas.getContext("bitmaprenderer") в исходном элементе холста. Этот контекст предоставляет только функциональные возможности для замены содержимого холста заданным ImageBitmap.

В worker мы воспользуемся холстом и сделаем некоторую анимацию:

Вы можете использовать offscreenCanvas в своем веб-приложении, если ваше приложение включает в себя некоторые сложные операции отрисовки на холсте.

Спасибо за прочтение. Следуйте Javascript Jeep🚙💨.