IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> web worker API开启浏览器js多进程 -> 正文阅读

[JavaScript知识库]web worker API开启浏览器js多进程

面试使人进步!!!

在大厂佬们的碾压下接触到了目前工作中没有遇到的新api和新思路以及解决方案。

今天就来说说这个新的api web Worker。以下是MDN原话

指的是一种可由脚本创建的后台任务,任务执行中可以向其创建者收发信息。要创建一个 Worker?,只须调用?Worker(URL)?构造函数,函数参数 `URL` 为指定的脚本。Worker?也可以创建新的 Worker,当然,所有 Worker 必须与其创建者同源。

很明显了就是让我们可以开启一个新的进程来处理js。js是采用的是单线程模型,代码从上往下执行如果js任务中间存在较大的数据计算那么势必会阻塞js的运行以及页面的渲染,那么这时候web worker就是一个很好的解决方案,可以将这部分数据计算的代码放到web worker中进行处理等待处理完成后在通过通信的方式告知js线程。下面是一个简单的demo(vite-react)

import React, { useEffect, useState } from "react";

export default (): JSX.Element => {
  const [w, setW] = useState<Worker>()
  const startWorker = () => {
    setW(new Worker("http://localhost:3322/front/worker.js"))
  }
  function stopWorker() {
    if (!w) return 
    w.terminate(); // 终止进程运行,下回启动重头开始
  }
  useEffect(() => {
    if (!w || !!w.onmessage) return 
    w.onmessage = function (event) {
      // 通过postMessage和onMessage进行线程之间的通信
      console.log("通知来了", event);
    };
  }, [w])
  return <div>
    web-worker
    <button onClick={startWorker}>开始</button>
    <button onClick={stopWorker}>结束</button>
  </div>;
};

worker.js

var i = 0;
// confirm(1) 错误
// alert(1) 错误
// console.log(window, document) 错误
function a() {
	i = i + 1;
	console.log(i)
	postMessage(i); // 进程间通信
	setTimeout(a, 1000);
}
a();

需要注意的地方:

1.new Worker接收的参数是和当前环境同一域名下(同源策略)的js文件并且不能是file://协议要是http协议。因此我将文件放到和vite的index.html同一目录下启动服务直接就能访问。

2.worker进程中不能执行alert和confirm来打端主进程但是可以执行ajax网络请求。

3.worker进程无法使用window和document对象同时也获取不到dom。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:03:42  更:2021-09-18 10:04:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 23:55:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码