HTML5的Web Workers

简介: 该特性仅支持:FF3.5+、Opera 10.6+、Chrome 3+、Safari 4。 详情请参数(下面的参考链接中都有例子说明): https://developer.mozilla.org/En/Using_web_workers https://developer.

该特性仅支持:FF3.5+、Opera 10.6+、Chrome 3+、Safari 4。

image

详情请参数(下面的参考链接中都有例子说明):

https://developer.mozilla.org/En/Using_web_workers

https://developer.mozilla.org/En/DOM/Worker

http://www.whatwg.org/specs/web-workers/current-work/

中文:WEB Workers提升WEB前端脚本JavaScript的处理性能

 

这里以一个计算加法和乘法为例:

1、创建一个worker

2、worker使用postMessage方法,发送请求,在处理时再通过postMessage返回给消息给创建者,它的onmessage方法会捕获进行处理

3、如果需要kill worker直接使用terminate方法

 

最终运行的界面 :

image

 

完整html代码

<!DOCTYPE html>
<html>
<head>
<title>HTML5__Web Workers(仅支持FF3.5+、Opera 10.6+、Chrome 3+、Safari 4)</title>
<meta name="generator" content="editplus" />
<meta name="author" content="" />
<meta name="keywords" content="" />
<meta name="description" content="" />
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<link rel="stylesheet" type="text/css" href="http://www.codediesel.com/demos/workers/view.css" />
</head>

<body id="main_body">

<img id="top" src="http://www.codediesel.com/demos/workers/top.png" alt="">
<div id="form_container">
<h1><a>Untitled Form</a></h1>
<form id="main" class="appnitro" method="post" action="">
<div class="form_description">
<h2 id="title"></h2>
</div>
<ul >
<li id="li_2" >
<label class="description" for="element_2">X </label>
<div>
<input id="x" name="x" class="element text medium" type="text" maxlength="255" value="3"/>
</div>
</li>
<li id="li_3" >
<label class="description" for="element_3">Y </label>
<div>
<input id="y" name="y" class="element text medium" type="text" maxlength="255" value="3"/>
</div>
</li>
<li id="li_1" >
<label class="description" for="element_1">Messages </label>
<div>
<textarea id="output" name="output" class="element textarea medium"></textarea>
</div>
</li>
<li class="buttons">
<input type="hidden" name="form_id" value="87137" />
<input id="addButton" class="button_text" type="button" value="Add" />
<input id="multButton" class="button_text" type="button" value="Multiply" />
<input id="killButton" class="button_text" type="button" value="Stop Worker" />
<input id="clearBtn" class="button_text" type="button" value="Clear" />
</li>
</ul>
</form>
<div id="footer"></div>
</div>
<img id="bottom" src="http://www.codediesel.com/demos/workers/bottom.png" alt="">

<script type='text/javascript'>
   1:  
   2:  
   3: !(function() {
   4:     
   5:  
   6:     var getWebWorkerSupport = function() {
   7:         return (typeof(Worker) !== "undefined") ? true:false;
   8:     }
   9:  
  10:     var getElem = function(id) {
  11:         return typeof id === 'string' ? document.getElementById(id) : id;
  12:     }
  13:  
  14:     var worker,
  15:         isSupport = getWebWorkerSupport();
  16:  
  17:  
  18:     if (isSupport) {
  19:         
  20:         var createWorker = function() {
  21:             if (worker) {
  22:                 return ;
  23:             }
  24:  
  25:             worker = new Worker("worker.js");
  26:             worker.onmessage = function(evt) {
  27:                 getElem("output").value += evt.data + '\n';
  28:             }
  29:             worker.onerror = function(evt) {
  30:                 getElem("output").value += "\n在第["+ evt.lineno +"]行发生错误: " + evt.message;
  31:             }
  32:         }
  33:  
  34:         getElem("multButton").onclick = function() {
  35:             createWorker();
  36:  
  37:             var x = document.getElementById("x").value;
  38:             var y = parseFloat(document.getElementById("y").value);
  39:  
  40:             var str = "mult_" + x + "_" + y;
  41:             
  42:             worker.postMessage(str);
  43:         }
  44:         
  45:         getElem("addButton").onclick = function() {
  46:             createWorker();
  47:  
  48:             var x = document.getElementById("x").value;
  49:             var y = parseFloat(document.getElementById("y").value);
  50:  
  51:             var str = "add_" + x + "_" + y;
  52:             worker.postMessage(str);
  53:         }
  54:  
  55:         getElem("killButton").onclick = function() {
  56:             if (worker) {
  57:                 worker.terminate();
  58:                 worker = null;
  59:             }
  60:         }
  61:     } else {
  62:         getElem("multButton").disabled = getElem("addButton").disabled = getElem("killButton").disabled = true;
  63:     }
  64:  
  65:     getElem("title").innerHTML = "您当前使用的浏览器"+(isSupport ? "支持" : "<em class='error'>不支持</em>")+"Web Worker";
  66:  
  67:     getElem("clearBtn").onclick = function() {
  68:         getElem("output").value = "";
  69:     }
  70: })();
</ script >

</ body >
</ html >

worker.js的代码:


unction addNumbers(x,y) {
return x + y;


unction mulNumbers(x,y) {
return x*y;


his.onmessage = function (event) {
var msg = event.data,
arr = msg.split("_"),
op = arr[0],
x = (arr[1] || "")|0,
y = (arr[2] || "")|0;

switch(op) {
case 'mult':
postMessage( x + "*" + y + "=" + mulNumbers(x, y));
break;
case 'add':
postMessage( x + "+" + y + "=" + addNumbers(x, y));
break;
default:
postMessage("Wrong operation specified");
}

var i = 1;
while (i < 1000*1000*1000) {
if (i % 500000 === 0) {
postMessage(i);
}
i++;
}

;

本章参考自:http://www.codediesel.com/demos/workers/     (有部分修改)

点些直接下载本文示例代码>>

目录
相关文章
|
3月前
|
XML 移动开发 前端开发
HTML5简介(什么是网页、什么是 HTML、Web标准)
网站是指在因特网上根据一定的规则,使用 HTML 等制作的用于展示特定内容相关的网页集合。
37 0
|
11天前
|
前端开发 搜索推荐 数据安全/隐私保护
HTML标签详解 HTML5+CSS3+移动web 前端开发入门笔记(四)
HTML标签详解 HTML5+CSS3+移动web 前端开发入门笔记(四)
18 1
|
11天前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
|
28天前
|
移动开发 监控 数据可视化
组态软件之万维组态介绍(web组态、html组态、vue2/vue3组态)
组态软件之万维组态、web组态、html组态、vue2/vue3组态,组态在工业自动化领域越来越重要,但由于市面上组态软件费用昂贵、集成复杂,使用技术门槛高,万维组态就应运而生;万维组态是一款功能强大的基于Web的可视化组态编辑器,采用标准HTML5技术,使用Vue2和Vue3语言,基于B/S架构进行开发,支持WEB端显示;支持快速集成,集成简单方便;支持在浏览器端完成便捷的人机交互,简单的拖拽即可完成可视化页面的设计;可快速构建和部署可扩展的SCADA、HMI、仪表板或LoT系统;
组态软件之万维组态介绍(web组态、html组态、vue2/vue3组态)
|
1月前
|
移动开发 前端开发 HTML5
Web前端全栈HTML5通向大神之路
本套课程共三大阶段,六大部分,是WEB前端、混合开发与全栈开发必须要掌握的技能,从基础到实践,是从编程小白成长为全栈大神的最佳教程!
46 3
Web前端全栈HTML5通向大神之路
|
2月前
|
数据处理 API UED
Web Workers
Web Workers 是一种在后台线程中运行脚本的技术,它的主要作用是提高Web应用程序的性能。通过使用Web Workers,我们可以将一些耗时的任务(如计算、数据处理等)转移到后台线程中执行,从而避免阻塞主线程,提高用户体验。
32 8
|
3月前
|
前端开发 Linux 编译器
web开发:HTML详解
web开发:HTML详解
45 0
|
3月前
|
前端开发 JavaScript 定位技术
web版拳皇,使用html,css,js来制作一款拳皇游戏
web版拳皇,使用html,css,js来制作一款拳皇游戏
37 0
|
3月前
|
移动开发 前端开发 JavaScript
web前端基础(一)——HTML+CSS
web前端基础(一)——HTML+CSS
106 0
|
4月前
|
自然语言处理 算法 数据库
【JavaScript+自然语言处理+HTML+CSS】实现Web端的智能聊天问答客服实战(附源码 超详细必看)
【JavaScript+自然语言处理+HTML+CSS】实现Web端的智能聊天问答客服实战(附源码 超详细必看)
52 0