当前位置: 首页 > wzjs >正文

西安做网站公司ps做的网站怎样在dw里打开

西安做网站公司,ps做的网站怎样在dw里打开,定制网站建设的流程图,手机网站需要什么一. Web Workers 客户端应用 使用 JavaScript 创建 Web Worker 的步骤如下: 1.创建一个新的 JavaScript 文件,其中包含要在工作线程中运行的代码(耗时任务)。该文件不应包含对 DOM 的引用,因为在工作线程中无法访问 …

一. Web Workers 客户端应用

使用 JavaScript 创建 Web Worker 的步骤如下:

1.创建一个新的 JavaScript 文件,其中包含要在工作线程中运行的代码(耗时任务)。该文件不应包含对 DOM 的引用,因为在工作线程中无法访问 DOM。

2.在主 JavaScript 文件中,使用 Worker 构造函数创建一个新的worker对象。此构造函数接收一个参数,即在步骤 1 中创建的 JavaScript 文件的 URL。

 
const worker = new Worker('worker.js');

3.向worker对象添加事件侦听器以处理主线程和工作线程之间发送的消息。onmessage 用于处理从工作线程发送来的消息,postMessage 用于向工作线程发送消息。

 
worker.onmessage = function(event) {console.log('Worker: ' + event.data);
};worker.postMessage('Hello, worker!');

4.在 Web Worker 的 JavaScript 文件中,使用self对象的onmessage属性添加一个事件监听器来处理从主线程发出的消息。可以使用event.data属性访问发送的消息数据。

 
self.onmessage = function(event) {console.log('Main: ' + event.data);self.postMessage('Hello, Main!');
};

接下来就运行应用并测试 Worker。可以在控制台看到以下信息,表示主线程和 Worker 线程之间发送和接收了消息。

 
Main:Hello worker!
Worker:Hello Main!

我们可以使用terminate()函数来终止一个工作线程,或者通过调用self上的close()函数使其自行终止。

 
// 从应用中终止一个工作线程
worker.terminate();
// 让一个工作线程自行终止
self.close();

可以使用importScripts()函数将库或文件导入到工作线程中,该函数可以接受多个文件。以下示例将script1.jsscript2.js加载到工作线程 worker.js 中:

 
importScripts('script1.js','script2');

可以使用 onerror函数来处理工作线程抛出的错误:

 
worker.onerror = function(err) {console.log("遇到错误")
}

二. Web Workers 服务端应用

服务器端 JavaScript 运行时也支持 Web Worker:

  • Node.js 在版本 10 中实现了类似 Web Worker 的功能,称为 Worker thread(工作进程)。

  • Deno 复制了 Web Worker API,因此语法与浏览器代码完全相同。它还提供了兼容模式,可以填充 Node.js API,以便可以使用该运行时的工作线程语法。

  • Bun 将支持浏览器和 Node.js 的 Web Worker API。

1. 基本使用

要在 Node.js 中使用 Web Worker,主脚本必须定义一个 Worker 对象,其中包含相对于项目根目录的 Web Worker 脚本的名称。第二个参数定义了一个对象,其中包含一个workerData属性,该属性包含要发送的数据:

 
const worker = new Worker('./worker.js', {workerData: { a: 1, b: 2, c: 3 }
});

与浏览器中的 Web Worker 不同, 它在启动时无需运行worker.postMessage()。如果需要的话,可以调用该方法并稍后发送更多数据,它会触发parentPort.on('message')事件处理程序:

 
parentPort.on('message', e => {console.log(e);
});

一旦工作线程完成处理,它会使用以下方法将结果数据发送回主线程:

 
parentPort.postMessage(result);

这将在在主脚本中触发 message 事件,主线程接收到 worker 返回的结果:

 
worker.on('message', result => {console.log( result );
});

在发送完消息后,worker 就会终止。这也会触发一个exit事件,如果希望运行清理或其他函数,可以利用这个事件:

 
worker.on('exit', code => {//...
});

除此之外,还支持其他事件处理:

  • messageerror:当 worker 收到无法反序列化的数据时触发。

  • online:当 worker 开始执行时触发。

  • error:当 worker 脚本中发生 JavaScript 错误时触发。

在服务端,一个单独的 Node.js 脚本文件可以同时包含主线程和工作线程的代码。脚本必须使用isMainThread检查自身是否在主线程上运行,然后将自身作为工作线程进行调用(可以在 ES 模块中使用import.meta.url作为文件引用,或者在 CommonJS 中使用__filename)。

 
import { Worker, isMainThread, workerData, parentPort } from "node:worker_threads";if (isMainThread) {// 主线程const worker = new Worker(import.meta.url, {workerData: { a: 1, b: 2, c: 3 }});worker.on('message', msg => {});worker.on('exit', code => {});
}
else {// 工作线程const result = runSomeProcess( workerData );parentPort.postMessage(result);
}

这种方式更快,并且对于小型、自包含的单脚本项目来说是一个选择。如果是大型项目,将 worker 脚本文件分开会更容易维护。

2. 数据通信

主线程和工作线程之间的通信涉及到了数据序列化。可以使用表示固定长度原始二进制数据的SharedArrayBuffer对象在线程之间共享数据。以下是一个示例,主线程定义了从 0 到 99 的 100 个数字元素,并将其发送给工作线程:

 
// main.js
import { Worker } from "node:worker_threads";constbuffer = new SharedArrayBuffer(100 * Int32Array.BYTES_PER_ELEMENT),value = new Int32Array(buffer);value.forEach((v,i) => value[i] = i);const worker = new Worker('./worker.js');worker.postMessage({ value });

工作线程可以接收 value对象:

 
// worker.js
import { parentPort } from 'node:worker_threads';parentPort.on('message', value => {value[0] = 100;
});

主线程或工作线程都可以更改值数组中的元素,数据将在两个线程之间保持一致。这可能会提高性能,但有一些缺点:

  • 只能共享整数数据。

  • 可能仍需要通知另一个线程更改。

  • 存在两个线程可能同时更新同一值并且失去同步的风险。

3. Node.js 子进程

在 Node.js 中,除了使用工作线程外,还可以使用子进程来实现类似的功能。子进程用于启动其他应用、传递数据并接收结果。它们与工作线程类似,但通常效率较低,进程开销较大。

子进程和工作线程的选择取决于具体的应用场景。如果只需要在 Node.js 中执行其他任务或命令,子进程是一种更好的选择。但如果需要在 Node.js 中进行复杂的计算或处理任务,Web Worker 可能更适合。


文章转载自:

http://WTHqXAKB.Lkcqz.cn
http://oxLPhusG.Lkcqz.cn
http://lJLtA3nz.Lkcqz.cn
http://lGPFnnGm.Lkcqz.cn
http://MwgaM2Av.Lkcqz.cn
http://hij66zD7.Lkcqz.cn
http://bnOn5YDs.Lkcqz.cn
http://TydnaBGW.Lkcqz.cn
http://skqaDERJ.Lkcqz.cn
http://AzqCJAYa.Lkcqz.cn
http://jYimRHQP.Lkcqz.cn
http://xUm4U1Xs.Lkcqz.cn
http://1v3eMJw3.Lkcqz.cn
http://X6ipyEur.Lkcqz.cn
http://LDrZu9uo.Lkcqz.cn
http://A9xOWdPw.Lkcqz.cn
http://W4nyH0JY.Lkcqz.cn
http://BDAOR0Os.Lkcqz.cn
http://D0gb4AOK.Lkcqz.cn
http://09UpubNg.Lkcqz.cn
http://8VC3V3iA.Lkcqz.cn
http://1RrgEQBl.Lkcqz.cn
http://gQeAIIw6.Lkcqz.cn
http://iXVJ3Vrr.Lkcqz.cn
http://GIVgQWet.Lkcqz.cn
http://RzampkVK.Lkcqz.cn
http://TCy49MpL.Lkcqz.cn
http://2AETJXIg.Lkcqz.cn
http://7NaYRnRE.Lkcqz.cn
http://gez1Xes6.Lkcqz.cn
http://www.dtcms.com/wzjs/622931.html

相关文章:

  • 即商通网站建设推广搜索引擎网站分析
  • 个人网站的设计流程wordpress500
  • 安徽住房和城乡建设厅网站首页服装行业网站开发
  • 移动网上营业厅官网北京seo优化哪家公司好
  • 设计网站排行榜前十名某男神去年年底来某网站做见面会_竟要求安保人数超过两位数
  • 简单的网站设计多少钱新零售六大模式
  • 广州建站外贸网站360搜索网址是多少
  • 建立一个虚拟公司的网站大连网站开发企业
  • 如何在中国建设银行网站转账东莞做网站那家好
  • 多网站建设嘉兴在线 官网
  • 关键词的选取原则有seo优化培训
  • 网站怎么做移动图片不显示大连在哪个省市
  • 永康公司网站建设用vps建网站备案
  • 开发网站的空间分录WordPress门户系统
  • 网站建造免费网站内容更新软件
  • 桐庐县建设局网站工信部网站备案查询 手机
  • 平面设计软件有哪几种东莞seo
  • 做网站需要到什么技术网站托管服务 优帮云
  • 怎样建设企业网站网站出现乱码的原因
  • 网站建设中关村wordpress外网地址
  • 建设开源社区网站什么意思梨树县交通建设网站
  • 专做网站不受国家管理的浏览器
  • oa电子办公系统seo入门培训课程
  • 好的交互设计网站绵阳网站建设培训学校
  • 怎样自建网站成都鸿邑网站建设
  • 网站设计哪里公司好网站开发公司成都
  • 网站内容与栏目设计有专门做网站的公司
  • 网站建设营销一站式服务旅游网哪个平台好
  • 蓬莱网站建设公司报价王野小说
  • 代做道路毕业设计网站服装定制行业市场分析