Не должно.
Но действительно существует регрессия, вызванная этой проблемой , которая затрагивает Chrome> 82.
Я действительно открыл сообщение об ошибке , так что теперь все, что мы можем сделать, это ждать, пока они это исправят.
Вот MCVE, который я произвел:
const worker_script = `
postMessage('ready'); // main will block
const now = performance.now();
const off = new OffscreenCanvas(300, 150);
const off_ctx = off.getContext('2d');
off_ctx.fillRect(0,0,30,30)
postMessage( performance.now() - now );
`;
const worker_url = URL.createObjectURL( new Blob( [ worker_script ], { type: "text/javascript" } ) );
const worker = new Worker( worker_url );
worker.onmessage = evt => {
if (evt.data === "ready" ) {
blockMainThread( 3000 )
.then( () => log( 'now free' ) );
}
else log( `worker script took ${evt.data}ms to complete.` );
};
worker.postMessage( "" );
function blockMainThread( duration ) {
return new Promise( ( resolve ) => {
const now = performance.now();
while( performance.now() - now < duration ) {}
resolve();
} );
}
function log( content ) {
_log.textContent += content + '\n';
}
The page will be frozen for 3s. Please wait.
Учитывая природу этой ошибки, я сомневаюсь, что есть способ обойти ее.