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/     (有部分修改)

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

目录
相关文章
|
2月前
|
存储 移动开发 大数据
HTML5 Web IndexedDB 数据库详解
IndexedDB 是一种高效的浏览器存储方案,允许在本地存储大量结构化数据,支持索引和事务,适用于需要离线和大数据处理的应用。它由数据库、对象仓库等组成,通过键值对存储数据,确保数据一致性和完整性。本介绍展示了如何创建、读取、更新和删除数据,以及事务和错误处理的最佳实践。
|
23天前
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
31 6
|
23天前
|
前端开发 JavaScript UED
在数字化时代,Web 应用性能优化尤为重要。本文探讨了CSS与HTML在提升Web性能中的关键作用及未来趋势
在数字化时代,Web 应用性能优化尤为重要。本文探讨了CSS与HTML在提升Web性能中的关键作用及未来趋势,包括样式表优化、DOM操作减少、图像优化等技术,并分析了电商网站的具体案例,强调了技术演进对Web性能的深远影响。
27 5
|
2月前
|
存储 移动开发 数据库
HTML5 Web IndexedDB 数据库常用数据存储类型
IndexedDB 支持多种数据存储类型,满足复杂数据结构的存储需求。它包括基本数据类型(如 Number、String、Boolean、Date)、对象(简单和嵌套对象)、数组、Blob(用于二进制数据如图像和视频)、ArrayBuffer 和 Typed Arrays(处理二进制数据)、结构化克隆(支持 Map 和 Set 等复杂对象),以及 JSON 数据。尽管不直接支持非序列化数据(如函数和 DOM 节点),但可以通过转换实现存储。开发者应根据具体需求选择合适的数据类型,以优化性能和使用体验。
|
2月前
|
移动开发 JavaScript 前端开发
HTML5 Web Workers详解
HTML5 Web Workers 允许在后台线程中运行 JavaScript,实现复杂计算而不影响用户界面,提升应用性能。其主要特性包括并行处理、异步通信、独立作用域及多数据类型支持。通过创建和使用 Worker 文件,如 `worker.js`,可执行后台任务,并与主线程通过消息传递机制通信。适用于数据处理、图像处理、复杂计算及网络请求并行等场景。需要注意的是,Web Workers 在浏览器兼容性、安全性限制、调试及资源消耗方面需特别关注。合理利用 Web Workers 可显著增强 Web 应用的流畅度和响应速度。
|
2月前
|
SQL 存储 移动开发
HTML5 Web SQL 数据库详解
Web SQL 数据库是 HTML5 中的一种本地存储技术,允许在浏览器中使用 SQL 语言操作本地数据,支持离线访问和事务处理,适用于缓存数据和小型应用。然而,其存储容量有限且仅部分现代浏览器支持,标准已不再积极维护,未来可能被 IndexedDB 和 localStorage 等技术取代。使用时需谨慎考虑兼容性和发展前景。
|
2月前
|
存储 移动开发 缓存
HTML5 Web 存储详解
HTML5 Web 存储包括 `localStorage` 和 `sessionStorage`,前者提供持久存储且无过期时间,后者仅在会话期间有效。两者均支持键值对形式存储数据,容量约为 5-10 MB。`localStorage` 适用于用户偏好设置、登录状态保持及离线应用缓存;`sessionStorage` 则用于临时数据如表单输入。数据以字符串形式存储,可通过 `JSON` 方法处理对象。由于数据存储于本地,不适合存放敏感信息。示例代码展示了如何使用按钮将输入框内容保存至 `localStorage` 并进行清除操作。
|
2月前
|
移动开发 前端开发 JavaScript
HTML与现代Web开发的不同技术
【10月更文挑战第11天】HTML与现代Web开发的不同技术
30 0
|
23天前
|
前端开发 测试技术 定位技术
如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤
本文深入介绍了如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤。通过实例展示了主页、关于我们、产品展示、新闻动态及联系我们等页面的设计与实现,强调了合理布局、美观设计及用户体验的重要性。旨在为企业打造一个既专业又具吸引力的线上平台。
46 7
下一篇
DataWorks