私は、キャンバスを使用して画像を操作する JS アプリケーションに取り組んでいます (つまり、 .toBlob()および.toDataURL( )を使用して png/base64 に変換します。
.transferControlToProxy()を使用して、ワーカーに仕事をさせ、スムーズな GUI を取得します。
しかし、サポートされていないようです...彼らがMozilla開発者で言ったように
あなたのいくつかは、他の情報を持っていますか?多分回避策?
私は、キャンバスを使用して画像を操作する JS アプリケーションに取り組んでいます (つまり、 .toBlob()および.toDataURL( )を使用して png/base64 に変換します。
.transferControlToProxy()を使用して、ワーカーに仕事をさせ、スムーズな GUI を取得します。
しかし、サポートされていないようです...彼らがMozilla開発者で言ったように
あなたのいくつかは、他の情報を持っていますか?多分回避策?
Whatwg.org には、 https: //developers.whatwg.org/the-canvas-element.html#dom-canvas-transfercontroltoproxy で canvas.transferControlToProxy() を使用する JavaScript サンプルがありますが、どのブラウザーでも動作しないようです。最先端のバージョン (Chrome Canary または Opera Next) でさえありません。
chrome://flags で「試験的なキャンバス機能を有効にする」にしても、Chrome Canary では効果がありません。
ライブ テスト: http://jsbin.com/bocoti/5/edit?html,output
「TypeError: canvas.transferControlToProxy は関数ではありません」と表示されます。
これは非常に素晴らしい追加になります。ワーカーでキャンバスにすべてを描画し、キャンバスの blob/arraybuffer/dataurl を作成し、Transferable オブジェクトを使用してこれをメイン スレッドに転送することを考えてください。現在、キャンバス関数 (fill()、drawImage() など) を使用してキャンバスに何かを描画する場合は、メイン スレッドで行う必要があります...
<!DOCTYPE html><html><head><meta charset="utf-8" /></head><body>
<div id="log"></div>
<canvas style="border:1px solid red"></canvas>
<script id="worker1" type="javascript/worker">
self.onmessage = function(e) {
var context = new CanvasRenderingContext2D();
e.data.setContext(context); // event.data is the CanvasProxy object
setInterval(function () {
context.clearRect(0, 0, context.width, context.height);
context.fillText(new Date(), 0, 100);
context.commit();
}, 1000);
}
</script>
<script>
var blob = new Blob([document.querySelector('#worker1').textContent]);
var worker = new Worker(window.URL.createObjectURL(blob));
worker.onmessage = function(e) {
//document.querySelector("#log").innerHTML = "Received: " + e.data;
}
var canvas = document.getElementsByTagName('canvas')[0];
try { var proxy = canvas.transferControlToProxy();
worker.postMessage(proxy, [proxy]);}
catch(e) { document.querySelector("#log").innerHTML = e; }
</script>
<br>
From: <a href="https://developers.whatwg.org/the-canvas-element.html#the-canvas-element">https://developers.whatwg.org/the-canvas-element.html#the-canvas-element</a>
</body></html>