Html5之Worker

181 阅读1分钟

什么是 Web Worker?

当在 HTML 页面中执行脚本时,页面的状态是不可响应的,直到脚本已完成。

web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 在后台运行。

简单demo:

index.html

<!DOCTYPE html>
<html>

<head> 
    <meta charset="utf-8"> 
    <title></title> 
</head>

<body>
    <input type="text" id="input1">
    <input type="text" id="input2">
    <div id="app"></div>
</body>
<script>
    let input1 = document.getElementById('input1')
    let input2 = document.getElementById('input2')
    let app = document.getElementById('app')
    if (window.Worker) {
        let myWorker = new Worker('./Workers.js')
        input1.addEventListener('change', (e) => {
            myWorker.postMessage([input1.value, input2.value])
        })
        input2.addEventListener('change', (e) => {
            myWorker.postMessage([input1.value, input2.value])
        })
        myWorker.onmessage = (e)=>{
           app.innerHTML = e.data
        }
    }

</script>

</html>

Workers.js

onmessage = function (e) {
    console.log(e)
    let result = e.data[0] * e.data[1];
    if (isNaN(result)) {
        postMessage('Please write two numbers');
    } else {
        let workerResult = 'Result: ' + result;
        postMessage(workerResult);
    }
}

阮一峰老师详细教程:www.ruanyifeng.com/blog/2018/0… 举个实际可用的例子:

项目中刮刮卡松手时要计算已刮开的面积和整个图片的面积的比,如果大于某个比例则剩余的蒙层自动刮开。其中涉及到大量计算,就很适合用web worker了。