[前端] HTML5 Web Worker(多线程处理)

1984 0
Honkers 2023-2-25 08:38:30 | 显示全部楼层 |阅读模式
概述

JavaScript的执行环境是单线程的,也就是一次只能执行一个任务。如果遇到多个任务时,只能排队依次执行。
在HTML5中,可以使用Web Worker创建一个后台线程执行一个耗时任务,而不会影响页面响应。
简单使用

Web Worker技术基本原理就是:在当前JavaScript的主线程中,使用Worker()构造函数新建一个worker实例,然后加载某一个JavaScript文件,发送给一个后台线程来处理(注意,这里是后台线程)。
worker.html

<!DOCTYPE html>
<html>
        <head>
                <meta charset="utf-8">
                <title></title>
                <script>
                        //创建worker
                        var worker = new Worker("worker.js");
                        //向后台线程发送数据
                        worker.postMessage("hello world");
                        //监听后台线程返回的数据
                        worker.onmessage = function(e) {
                                console.log("前台线程收到:" + e.data);
                        };
                </script>
        </head>
        <body>
        </body>
</html>
worker.js

onmessage = function(e) {
        //接收前台发来的数据
        var d = e.data;
        console.log("后台线程收到:" + d);
        var str = d.split("").reverse().join("");
        postMessage(str);
};


处理复杂数据

worker.html

<!DOCTYPE html>
<html>
        <head>
                <meta charset="utf-8">
                <title></title>
                <script>
                        var worker;
                        window.onload = function() {
                                var start = document.getElementById("start");
                                var stop = document.getElementById("stop");
                                start.onclick = function() {
                                        worker = new Worker("worker.js")
                                        worker.onmessage = function(e) {
                                                console.log("前台接收:" + e.data);
                                        }
                                }
                                stop.onclick = function() {
                                        worker.terminate();
                                }
                        }
                </script>
        </head>
        <body>
                <button id="start">开始</button>
                <button id="stop">停止</button>
        </body>
</html>
worker.js
var i = 0;

function handleTask() {
        i++;
        console.log("handle:" | i);
        postMessage(i);
}
setInterval(handleTask, 1000);<font face="Tahoma"><span style="white-space: normal;"> </span></font>到此这篇关于HTML5 Web Worker(多线程处理)的文章就介绍到这了,更多相关HTML5 Web Worker内容请搜索中国红客联盟以前的文章或继续浏览下面的相关文章,希望大家以后多多支持中国红客联盟!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4004
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行