然后我写了一下代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>任务队列</title>
<style>
#aa {
width: 100px;
height: 100px;
background: green;
}
</style>
</head>
<body>
<div id="aa"></div>
</body>
<script>
// 动画
var start = null;
var element = document.getElementById('aa');
element.style.position = 'absolute';
function step(timestamp) {
if (!start) start = timestamp;
var progress = timestamp - start;
element.style.left = Math.min(progress / 10, 200) + 'px';
if (progress < 2000) {
window.requestAnimationFrame(step);
}
}
window.requestAnimationFrame(step);
// 使用 web worker
var w = new Worker('worker.js');
</script>
</html>
worker.js
var now = performance.now();
while (now + 1000 > performance.now()) {
console.log('hello');
}
如果把var w = new Worker('worker.js');
注释掉,则动画很顺。
先看下动画效果:
上面的图是没有使用 web worker 的,动画很平顺( gif 图看上去卡顿,其实很顺)
而这张图是使用 web worker 处理了一段阻塞代码,会导致动画明显卡顿
问题:Web Worker 明明是开了一个新线程来处理阻塞问题,虽然没有完全阻塞主线程 但确实让动画出现明细卡顿,这是为什么?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.