CanvasPixelArray取得した viaをワーカー スクリプトに送信getImageDataし、ワーカー スクリプトがバックグラウンド スレッドでピクセルを操作できるようにし、最終的に操作されたピクセル配列を送り返すことができます。
ただし、ネイティブのキャンバス描画関数を使用していますdrawImage。drawImage呼び出しは現在 UI スレッドをブロックしています。これにより、ボタンの再描画が遅くなり、ボタンをクリックしたときに顕著な遅延が発生します。いくつかの欠点を挙げると. ctx.imageSmoothingEnabled = false(編集:少なくともwebkitプレフィックス付きの WebKit では、小さな改善が実現できるようになりました。)
Web ワーカーを使用して、描画をメイン スレッドからバックグラウンド スレッドに移動したいと考えています。ただし、キャンバスもコンテキストもワーカーに送信できないようです。
私はMDN でこの通知を見つけました:
注: いつものように、ワーカーを含むバックグラウンド スレッドは DOM を操作できません。バックグラウンド スレッドによって実行されるアクションによって DOM が変更される必要がある場合は、作成者にメッセージをポストしてその作業を行う必要があります。
しかし、DOM はそのままにしておきたいと思います。キャンバス要素に物を描きたいだけです。これは可能ですか、それとも Web ワーカーは実際に計算のみが許可され、描画は許可されていませんか?
(または、キャンバスに描画drawImageする代わりに、を操作するような関数を使用することはおそらく可能ですか?)CanvasPixelArray