Web Worker特点
1、利用多核CPU
2、对多线程支持较好
注意:
不能访问HTML页面,不能使用DOM
主流浏览器基本都支持,除了IE
如何使用Web Worker
1、创建Worker文件—就是js文件
2、判断当前浏览器是否支持Worker
if(typeof(Worker)!=="undefined"){
//说明当前浏览器支持Worker
}else{
//说明当前浏览器不支持Worker,可以给出说明提示
}
3、创建Worker对象—new Worker(worker文件路径)
小案例:使用worker实现计时器功能
HTML文件:
<!DOCTYPE html>
<html>
<head>
<title>Worker的使用入门</title>
<meta charset="utf-8"/>
</head>
<body>
<button id="start">开始计时</button>
<button id="stop">结束计时</button>
<div id="showtime"></div>
<script>
// 1. 判断当前浏览器是否支持Web Worker
if(typeof(Worker) !== "undefined"){
/*
* 2. 创建Worker对象
* new Worker(Worker文件的路径)
*/
var worker = new Worker("worker1.js");
/*
* 3. 通过Worker对象绑定事件
* onmessage事件 - 用于监听Worker文件
* * 该事件的处理函数接收参数
* * Worker文件通过postMessage()方法传递的消息,可以通过该事件的处理函数的参数进行接收
*/
worker.onmessage = function(message){
// 用于接收Worker文件传递的消息
console.log(message.data);
}
}else{
// 给出相关提示信息
}
/*
* 注意:chrome浏览器在新版本中不再允许读取本地文件
*/
</script>
</body>
</html>
worker文件:
var time = 0;
function showTime(){
time++;
// Worker对象的postMessage()方法,传递消息
postMessage(time);
}
showTime();
4、worker的方法与事件
方法
postMessage()—用于向Worker对象传递消息
terminate()—用于终止Worker的运行
事件:
onMessage—监听Worker文件
当postMessage()方法被触发时,onMessage就被调用
同时,创建Worker对象时,必须同时绑定onMessage事件
小案例:使用worker模仿售票系统
<!DOCTYPE html>
<html>
<head>
<title>使用Worker模拟售票系统</title>
<meta charset="utf-8"/>
<style>
div {
width : 150px;
height : 150px;
border : solid 1px black;
float : left;
margin-right : 10px;
}
</style>
</head>
<body>
<!-- 模拟售票窗口 -->
<div id="window0"></div>
<div id="window1"></div>
<div id="window2"></div>
<div id="window3"></div>
<div id="window4"></div>
<!--
需求 - 点击"开始抢票"按钮
* 有票 - 将对应的div的背景颜色改为绿色
* 无票 - 将对应的div的背景颜色改为红色
-->
<button id="start">开始抢票</button>
<script>
var btn = document.getElementById("start");
var workers = [];//0-4
btn.onclick = function(){
// 开始抢票 - worker
if(typeof(Worker) !== "undefined"){
for(var i=0;i<5;i++){
// 创建worker对象
var worker = new Worker("worker.js");
// 绑定onmessage事件
worker.onmessage = myMessage;
// 将创建的worker对象放置在数组中
workers[workers.length] = worker;
}
}
}
/*
* onmessage事件的处理函数形参(event)
* * 通过形参获取postMessage()方法传递的消息
*/
function myMessage(e){
// 获取worker对象对应的角标
var index = workers.indexOf(e.target);
// 获取div对应worker对象 - div的i和worker的i
var div = document.getElementById("window"+index);
if(e.data == "1"){
// 有票
div.style.background = "green";
}else{
// 无票
div.style.background = "red";
}
}
/*
* 分析逻辑
* * 具有5个售票窗口
* * 同时开始抢票 - 逻辑相同
* * 结果
* * worker文件只需要创建一个
* * 完成抢票逻辑
* * 需要创建5个worker对象
*/
</script>
</body>
</html>
worker.js文件:
/*
* Worker文件 - 完成抢票逻辑
* * 10%概率可以抢到票
*/
// 生成一个 0-100 之间的一个整数
var rand = Math.floor(Math.random()*100);
// 0-99之间,判断概率是10%
if(rand < 50){
// 有票
postMessage(1);
}else{
// 无票
postMessage(0);
}
如何判断设备的浏览器支持URL scheme
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章