`
sungang_1120
  • 浏览: 322179 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类

HTML5学习之——HTML 5 Web Workers

阅读更多

 

web worker 是运行在后台的 JavaScript,不会影响页面的性能。

 

什么是 Web Worker?

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

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

浏览器支持

所有主流浏览器均支持 web worker,除了 Internet Explorer。

 

HTML5 Web Workers 实例

下面的例子创建了一个简单的 web worker,在后台计数:

计数:
<!DOCTYPE html>
<html>
<body>

<p>计数: <output id="result"></output></p>
<button onclick="startWorker()">开始 Worker</button> 
<button onclick="stopWorker()">停止 Worker</button>
<br /><br />

<script>
var w;

function startWorker()
{
if(typeof(Worker)!=="undefined")
  {
  if(typeof(w)=="undefined")
  {
  w=new Worker("/example/html5/demo_workers.js");
  }
  w.onmessage = function (event) {
    document.getElementById("result").innerHTML=event.data;
    };
  }
else
  {
  document.getElementById("result").innerHTML="Sorry, your browser does not support Web Workers...";
  }
}

function stopWorker()
{ 
w.terminate();
}
</script>

</body>
</html>
 

检测 Web Worker 支持

在创建 web worker 之前,请检测用户的浏览器是否支持它:

if(typeof(Worker)!=="undefined")
  {
  // Yes! Web worker support!
  // Some code.....
  }
else
  {
  // Sorry! No Web Worker support..
  }

 

创建 web worker 文件

现在,让我们在一个外部 JavaScript 中创建我们的 web worker。

在这里,我们创建了计数脚本。该脚本存储于 "demo_workers.js" 文件中:

var i=0;

function timedCount()
{
i=i+1;
postMessage(i);
setTimeout("timedCount()",500);
}

timedCount();

 

以上代码中重要的部分是 postMessage() 方法 - 它用于向 HTML 页面传回一段消息。

注释:web worker 通常不用于如此简单的脚本,而是用于更耗费 CPU 资源的任务。

创建 Web Worker 对象

我们已经有了 web worker 文件,现在我们需要从 HTML 页面调用它。

下面的代码检测是否存在 worker,如果不存在,- 它会创建一个新的 web worker 对象,然后运行 "demo_workers.js" 中的代码:

if(typeof(w)=="undefined")
  {
  w=new Worker("demo_workers.js");
  }

 

然后我们就可以从 web worker 发生和接收消息了。

向 web worker 添加一个 "onmessage" 事件监听器:

w.onmessage=function(event){
document.getElementById("result").innerHTML=event.data;
};

 

当 web worker 传递消息时,会执行事件监听器中的代码。event.data 中存有来自 event.data 的数据。

终止 Web Worker

当我们创建 web worker 对象后,它会继续监听消息(即使在外部脚本完成之后)直到其被终止为止。

如需终止 web worker,并释放浏览器/计算机资源,请使用 terminate() 方法:

w.terminate();

 

完整的 Web Worker 实例代码

我们已经看到了 .js 文件中的 Worker 代码。下面是 HTML 页面的代码:

实例

<!DOCTYPE html>
<html>
<body>

<p>Count numbers: <output id="result"></output></p>
<button onclick="startWorker()">Start Worker</button>
<button onclick="stopWorker()">Stop Worker</button>
<br /><br />

<script>
var w;

function startWorker()
{
if(typeof(Worker)!=="undefined")
{
  if(typeof(w)=="undefined")
    {
    w=new Worker("demo_workers.js");
    }
  w.onmessage = function (event) {
    document.getElementById("result").innerHTML=event.data;
  };
}
else
{
document.getElementById("result").innerHTML="Sorry, your browser
 does not support Web Workers...";
}
}

function stopWorker()
{
w.terminate();
}
</script>

</body>
</html>

 

Web Workers 和 DOM

由于 web worker 位于外部文件中,它们无法访问下例 JavaScript 对象:

  • window 对象
  • document 对象
  • parent 对象
分享到:
评论

相关推荐

    Html5+WebWorkers定时通讯心跳处理

    在"Html5+WebWorkers定时通讯心跳处理"的场景中,我们首先需要创建一个Web Worker脚本,这个脚本通常会包含心跳消息的发送逻辑。例如,worker.js可能包含以下代码: ```javascript self.addEventListener('message'...

    HTML5——demo

    JavaScript在HTML5中扮演着重要角色,新的API如Geolocation API可以获取用户的位置信息,Web Workers可以在后台线程中执行计算密集型任务,不阻塞用户界面,WebSockets则提供了实时通信能力。在HTML5——demo中,...

    HTML5教程——不错的教材

    这个"HTML5教程——不错的教材"压缩包提供了一份详细的PDF教程,对于想要学习或深入了解HTML5的初学者来说,是一份非常有价值的资源。 HTML5的主要改进包括以下几个方面: 1. **语义化标签**:HTML5引入了一系列新...

    HTML5及CSS3web前端开发技术习题答案解析.pdf

    ### HTML5及CSS3 Web前端开发技术习题答案解析 #### 1. HTML5与HTML4的主要区别及其解决的问题 HTML5与HTML4相比,在Web前端开发领域解决了多个关键问题,主要包括: - **浏览器间的兼容性问题**:早期不同浏览器...

    HTML5期末大作业:网站——个人博客

    8. **HTML5的其他特性**:如离线存储(AppCache)、WebSocket实时通信、Web Workers和Web Storage等,这些在个人博客中可能被用来提升用户体验。 9. **响应式设计**:考虑到个人博客需要适应不同设备的屏幕尺寸,...

    html5——企业网页

    最后,Web Workers和Web Storage是HTML5提供的两个提升性能的关键特性。Web Workers可以在后台线程中执行计算密集型任务,不阻塞用户界面,提高网页响应速度;Web Storage(包括localStorage和sessionStorage)则...

    HTML5学习文档汇总

    这个压缩包包含三份关于HTML5学习的重要文档,分别是“HTML5权威指南”、“[HTML+5+从入门到精通]”以及“WebQQ_3.0:让html5改变你对Web的看法”。 首先,“HTML5权威指南”很可能详尽介绍了HTML5的新特性、语义化...

    HTML5示例——数百个示例及源代码

    这个压缩包“HTML5示例——数百个示例及源代码”是学习和理解HTML5的强大资源,无论是初学者还是经验丰富的开发者都能从中受益。 首先,让我们深入探讨HTML5的一些关键知识点: 1. **新元素的引入**:HTML5引入了...

    html5简单小游戏——猜拳【源码】.zip

    7. **Web Workers**:HTML5的Web Workers可以创建后台线程,处理繁重的计算任务,避免阻塞用户界面。在猜拳游戏中,虽然逻辑相对简单,但Web Workers仍然可以提高游戏性能,特别是在复杂的游戏逻辑中。 8. **...

    什么是——HTML5

    而对于使用Ajax的开发者,HTML5提供了更友好的接口,如Web Storage和Web Workers,使得后台处理和异步通信变得更加简单。 HTML5与CSS的结合也更加紧密。开发者需要更新CSS代码,以适应HTML5的新元素,使用CSS Reset...

    基于HTML5的小游戏——《斗斗龙》.zip

    《基于HTML5的小游戏——《斗斗龙》》是一款利用HTML5技术开发的多媒体游戏,它展示了HTML5在游戏开发领域的强大潜力。HTML5作为现代网页开发的标准,以其跨平台兼容性和丰富的功能特性,逐渐成为开发轻量级游戏的...

    HTML5+CSS3 Web前端设计基础教程-PPT.rar

    这篇教程——"HTML5+CSS3 Web前端设计基础教程-PPT",显然是一个旨在帮助初学者和进阶者理解这两种语言基本概念和实践应用的资源。 HTML5(超文本标记语言第五版)是网页内容的结构化标准,它增强了对多媒体的支持...

    Web客户端开发——HTML5+CSS+JavaScript实例教程.rar

    在HTML5环境中,JavaScript得到了进一步强化,提供了新的API,如Web Storage(本地存储)、WebSocket(实时双向通信)、Geolocation(地理位置定位)和Web Workers(后台多线程处理)。此外,框架和库如jQuery、...

    java EE 7 & HTML5 应用开发——构建和部署同时支持桌面和移动设备的动态高性能企业级应用.rar

    6. **Web Workers**:后台多线程处理,提升计算密集型任务性能。 7. **Geolocation API**:获取用户位置信息,实现地理位置相关应用。 结合Java EE 7和HTML5,开发者可以构建出跨平台、响应式的Web应用,充分利用...

    win8开发参考书——用HTML5和JAVESCRIPT开发win8应用

    HTML5引入了诸如Canvas、WebGL、Web Workers、Web Storage等API,极大地丰富了Web应用的功能性与表现力;而JavaScript作为执行环境,让这些功能得以动态实现,使得Win8应用可以拥有媲美原生应用的性能与体验。 ####...

    html5.rar_H.3155.com HTML5_HTML5 小游戏_HTML5小游戏_html5_html5 game m

    "html5.rar_H.3155.com HTML5_HTML5 小游戏_HTML5小游戏_html5_html5 game m"这个压缩包文件包含了一个使用HTML5开发的小游戏——超级玛丽的实现。超级玛丽是经典的平台跳跃游戏,通过HTML5的重构,可以在现代浏览器...

    网页设计必备——html初级教程

    这个"网页设计必备——html初级教程"包含两个CHM文件:HTML入门与提高.CHM和HTML基础教程.chm,它们将帮助初学者理解并掌握HTML的基本概念和语法。 HTML入门与提高.CHM可能涵盖以下内容: 1. HTML简介:解释HTML的...

    HTML——变幻粒子.zip

    在本案例中,"HTML——变幻粒子.zip" 提供了一个使用HTML实现的粒子特效。这种特效通常用于网站背景...通过深入研究HTML——变幻粒子.html文件,我们可以学习如何用这些技术创建自己的粒子特效,提升网页的用户体验。

    网页模板——基于HTML5+Canvas实现炫彩纸屑爆炸碎片特效.zip

    【标题】中的“网页模板——基于HTML5+Canvas实现炫彩纸屑爆炸碎片特效”表明这是一个使用HTML5和Canvas技术创建的网页模板,其特色在于能够展示一种炫彩的纸屑爆炸碎片效果。这个特效为网页增加了动态视觉元素,...

Global site tag (gtag.js) - Google Analytics