HTML学习笔记(八) Web Worker

简介: HTML学习笔记(八) Web Worker

Web Worker 为 JavaScript 创建多线程环境


主线程可以创建 Worker 线程,并将一些高延迟的任务分配给 Worker 线程在后台运行


而主线程只会负责渲染和交互,从而保证页面的流畅性


Web Worker 有两种类型,分别是 Dedicated Web Worker 和 Shared Web Worker


  • Dedicated Web Worker:只有一个页面可以使用这个 Web Worker
  • Shared Web Worker:多个同源页面可以共享一个 Web Worker,为跨页面通信提供一种解决方案

下面介绍 Dedicated Web Worker

主线程通过构造函数 Worker(),创建一个 Worker 线程,并在参数中指定需要执行的脚本文件

var worker = new Worker('worker.js')


构造函数返回一个 Worker 对象,便于主线程与 Worker 线程通信,Worker 对象常用的属性和方法如下:


  • onerror:用于指定 error 事件的监听函数,当 Worker 发生错误时触发
  • onmessage:用于指定 message 事件的监听函数,当接收到传递的数据时触发
  • onmessageerror:用于指定 messageerror 事件的监听函数,当数据无法进行反序列化时触发
  • postMessage():传递数据给 Worker 线程
  • terminate():终止 Worker 线程
<!DOCTYPE html>
<html>
<head>
    <script>
        var worker;
        function submit() {
            if (typeof(Worker) === 'undefined') {
                return
            }
            if (typeof(worker) === "undefined") {
                worker = new Worker('worker.js')
            }
            let input = document.getElementById('data').value
            worker.postMessage(input)
            worker.onmessage = function(event) {
                let result = event.data
                document.getElementById('result').innerText = result
                worker.terminate()
                worker = undefined
            }
            worker.onerror = function(event) {
                console.log('出错的信息', event.message)
                console.log('出错的文件', event.filename)
                console.log('出错的行数', event.lineno)
                console.log('出错的列数', event.colno)
                worker.terminate()
                worker = undefined
            }
        }
    </script>
</head>
<body>
    <input type="text" id="data" name="data" placeholder="Please Enter Something">
    <button onclick="submit()">Reverse String</button>
    <span id="result"></span>
</body>
</html>


Worker 线程有一个自己的全局对象,self 和 this 都提供对该对象的引用,常用的属性和方法如下:


  • onmessage:用于指定 message 事件的监听函数,当接收到传递的数据时触发
  • onmessageerror:用于指定 messageerror 事件的监听函数,当数据无法进行反序列化时触发
  • importScripts():用于加载其它脚本
  • postMessage():传递数据给主线程
  • close():关闭 Worker 线程
// worker.js
this.onmessage = function(event) {
    let data = event.data
    let result = reverse(data)
    this.postMessage(result)
    this.close()
}
function reverse(content) {
    return content.split('').reverse().join('')
}


使用 Web Worker 需要注意以下的点:


  • 主线程分配给 Worker 线程的脚本文件,不能从本地读取,它必须来自网络
  • 主线程分配给 Worker 线程的脚本文件,必须与主线程的脚本文件同源,准确来说应该是与页面文档同源
  • Worker 线程不能访问 window、document、parent 对象,但可以使用 navigator、location 对象
  • Worker 线程不能使用 alert、confirm,但可以使用 setTimeout、setInterval、XMLHttpRequest
  • 主线程和 Worker 线程不能直接通信,必须通过消息传递,消息传递有两种方式,拷贝和转让

拷贝:拷贝原始数据,产生一份副本,将副本传递给目标线程,在传递较大的数据时比较消耗性能

转让:将原始数据的所有权转让给目标线程,原来线程不再具有这个数据

在默认的实现中,除 ArrayBuffer 外都是拷贝传递

目录
相关文章
|
3月前
|
存储 Web App开发 移动开发
HTML5 Web 存储详解
HTML5 Web存储提供了两种客户端数据存储机制:**Local Storage**和**Session Storage**。Local Storage用于长期存储数据,即使关闭浏览器数据也依然存在,适用于保存用户偏好设置等信息。Session Storage则在标签或窗口关闭时清除数据,适合存储临时信息。两者均提供了简单的API进行数据的存取操作,但需要注意的是,Web存储并非加密存储,不应存放敏感信息。现代浏览器普遍支持Web存储,合理利用这两种存储方式可提升Web应用的用户体验。
|
3月前
|
存储 移动开发 大数据
HTML5 Web IndexedDB 数据库详解
IndexedDB 是一种高效的浏览器存储方案,允许在本地存储大量结构化数据,支持索引和事务,适用于需要离线和大数据处理的应用。它由数据库、对象仓库等组成,通过键值对存储数据,确保数据一致性和完整性。本介绍展示了如何创建、读取、更新和删除数据,以及事务和错误处理的最佳实践。
|
2月前
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
51 6
|
2月前
|
前端开发 JavaScript UED
在数字化时代,Web 应用性能优化尤为重要。本文探讨了CSS与HTML在提升Web性能中的关键作用及未来趋势
在数字化时代,Web 应用性能优化尤为重要。本文探讨了CSS与HTML在提升Web性能中的关键作用及未来趋势,包括样式表优化、DOM操作减少、图像优化等技术,并分析了电商网站的具体案例,强调了技术演进对Web性能的深远影响。
44 5
|
3月前
|
计算机视觉 Python
Flask学习笔记(六):基于Flask的摄像头-web显示代码(可直接使用)
这篇文章是关于如何使用Flask框架结合OpenCV库,通过电脑摄像头实现视频流在网页上的实时显示,并提供了单摄像头和多摄像头的实现方法。
142 2
Flask学习笔记(六):基于Flask的摄像头-web显示代码(可直接使用)
|
3月前
|
存储 移动开发 数据库
HTML5 Web IndexedDB 数据库常用数据存储类型
IndexedDB 支持多种数据存储类型,满足复杂数据结构的存储需求。它包括基本数据类型(如 Number、String、Boolean、Date)、对象(简单和嵌套对象)、数组、Blob(用于二进制数据如图像和视频)、ArrayBuffer 和 Typed Arrays(处理二进制数据)、结构化克隆(支持 Map 和 Set 等复杂对象),以及 JSON 数据。尽管不直接支持非序列化数据(如函数和 DOM 节点),但可以通过转换实现存储。开发者应根据具体需求选择合适的数据类型,以优化性能和使用体验。
|
3月前
|
移动开发 JavaScript 前端开发
HTML5 Web Workers详解
HTML5 Web Workers 允许在后台线程中运行 JavaScript,实现复杂计算而不影响用户界面,提升应用性能。其主要特性包括并行处理、异步通信、独立作用域及多数据类型支持。通过创建和使用 Worker 文件,如 `worker.js`,可执行后台任务,并与主线程通过消息传递机制通信。适用于数据处理、图像处理、复杂计算及网络请求并行等场景。需要注意的是,Web Workers 在浏览器兼容性、安全性限制、调试及资源消耗方面需特别关注。合理利用 Web Workers 可显著增强 Web 应用的流畅度和响应速度。
|
3月前
|
SQL 存储 移动开发
HTML5 Web SQL 数据库详解
Web SQL 数据库是 HTML5 中的一种本地存储技术,允许在浏览器中使用 SQL 语言操作本地数据,支持离线访问和事务处理,适用于缓存数据和小型应用。然而,其存储容量有限且仅部分现代浏览器支持,标准已不再积极维护,未来可能被 IndexedDB 和 localStorage 等技术取代。使用时需谨慎考虑兼容性和发展前景。
|
3月前
|
存储 移动开发 缓存
HTML5 Web 存储详解
HTML5 Web 存储包括 `localStorage` 和 `sessionStorage`,前者提供持久存储且无过期时间,后者仅在会话期间有效。两者均支持键值对形式存储数据,容量约为 5-10 MB。`localStorage` 适用于用户偏好设置、登录状态保持及离线应用缓存;`sessionStorage` 则用于临时数据如表单输入。数据以字符串形式存储,可通过 `JSON` 方法处理对象。由于数据存储于本地,不适合存放敏感信息。示例代码展示了如何使用按钮将输入框内容保存至 `localStorage` 并进行清除操作。
|
4月前
|
前端开发 程序员
【前端web入门第二天】01 html语法实现列表与表格_合并单元格
本文介绍了HTML中的列表与表格的使用方法。列表包括无序列表(`&lt;ul&gt;`嵌套`&lt;li&gt;`)、有序列表(`&lt;ol&gt;`嵌套`&lt;li&gt;`)和定义列表(`&lt;dl&gt;`嵌套`&lt;dt&gt;`和`&lt;dd&gt;`)。
85 19