HTML5 Web Workers 学习笔记

打印 上一主题 下一主题

主题 1856|帖子 1856|积分 5568

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x


HTML5 Web Workers 是一种在后台运行的 JavaScript,它不会影响页面的性能。通过 Web Workers,可以在欣赏器中实现多线程,从而让页面保持相应,同时执行复杂的计算任务。
一、什么是 Web Worker?

在传统的 HTML 页面中,JavaScript 脚本会在页面中同步执行,这会导致页面在脚本运行期间变得不可相应。Web Worker 提供了一种办理方案,它允许在后台运行独立的 JavaScript 线程,从而不会影响页面的性能。
Web Worker 的主要特点包括:


  • 独立运行:Web Worker 在后台线程中运行,不会阻塞主线程。
  • 通信机制:通过 postMessage 方法,Web Worker 可以与主线程通信。
  • 适用场景:适用于必要长时间运行的任务,比方复杂的数学计算、数据处理等。
二、欣赏器支持

Web Workers 在当代欣赏器中得到了广泛支持,包括 Internet Explorer 10、Firefox、Chrome、Safari 和 Opera。不外,Internet Explorer 9 及更早版本不支持 Web Workers。
三、Web Workers 的使用方法

1. 检测欣赏器是否支持 Web Worker

在创建 Web Worker 之前,必要检测用户的欣赏器是否支持它。可以通过以下代码进行检测:
JavaScript复制
  1. if (typeof(Worker) !== "undefined") {
  2.     // 浏览器支持 Web Worker
  3. } else {
  4.     // 浏览器不支持 Web Worker
  5. }
复制代码
2. 创建 Web Worker 文件

Web Worker 的代码必要存储在一个外部 JavaScript 文件中。比方,创建一个名为 demo_workers.js 的文件,其代码如下:
JavaScript复制
  1. var i = 0;
  2. function timedCount() {
  3.     i = i + 1;
  4.     postMessage(i); // 向主线程发送消息
  5.     setTimeout("timedCount()", 500); // 每 500 毫秒执行一次
  6. }
  7. timedCount();
复制代码
3. 创建 Web Worker 对象

在 HTML 页面中,可以通过以下代码创建 Web Worker 对象并调用它:
JavaScript复制
  1. if (typeof(w) == "undefined") {
  2.     w = new Worker("demo_workers.js"); // 创建 Web Worker 对象
  3. }
  4. w.onmessage = function(event) {
  5.     document.getElementById("result").innerHTML = event.data; // 接收 Web Worker 发送的消息
  6. };
复制代码
4. 终止 Web Worker

当不再必要 Web Worker 时,可以通过 terminate() 方法终止它,开释欣赏器和计算机资源:
JavaScript复制
  1. w.terminate();
  2. w = undefined;
复制代码
四、完备实例

以下是一个完备的实例,展示了如何在 HTML 页面中使用 Web Worker:
HTML复制
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <meta charset="utf-8">
  5.     <title>Web Worker 示例</title>
  6. </head>
  7. <body>
  8.     <p>计数: <output id="result"></output></p>
  9.     <button onclick="startWorker()">开始工作</button>
  10.     <button onclick="stopWorker()">停止工作</button>
  11.     <p><strong>注意:</strong> Internet Explorer 9 及更早版本浏览器不支持 Web Workers.</p>
  12.     <script>
  13.         var w;
  14.         function startWorker() {
  15.             if (typeof(Worker) !== "undefined") {
  16.                 if (typeof(w) == "undefined") {
  17.                     w = new Worker("demo_workers.js");
  18.                 }
  19.                 w.onmessage = function(event) {
  20.                     document.getElementById("result").innerHTML = event.data;
  21.                 };
  22.             } else {
  23.                 document.getElementById("result").innerHTML = "抱歉,你的浏览器不支持 Web Workers...";
  24.             }
  25.         }
  26.         function stopWorker() {
  27.             w.terminate();
  28.             w = undefined;
  29.         }
  30.     </script>
  31. </body>
  32. </html>
复制代码
预览
五、Web Workers 的限制

由于 Web Workers 运行在独立的线程中,它们无法访问以下 JavaScript 对象:


  • window 对象
  • document 对象
  • parent 对象
这意味着 Web Workers 无法直接操作 DOM,但可以通过主线程与 DOM 交互。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

石小疯

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表