对于公司网站建设的一些想法,网站建设客户功能详细要求,网站建设验收模板,免费建设com网站简介 这是基于 node.js 中的子进程的概念推出来的#xff0c;可参考链接#xff1a;utilityProcess | Electron 官网有一句话非常重要#xff0c;它提供一个相当于 Node.js 的 child_process.fork API#xff0c;但使用 Chromium 的 Services API 代替来执行子进程。这句话…简介 这是基于 node.js 中的子进程的概念推出来的可参考链接utilityProcess | Electron 官网有一句话非常重要它提供一个相当于 Node.js 的 child_process.fork API但使用 Chromium 的 Services API 代替来执行子进程。这句话的意思是两者还是有点区别的。更应该当成一个 worker.js 来看到。 这个工具进程自从 electron:22.0.0 才开始有老版本是没有的哦Electron 22.0.0 - 知乎
特点
utilityProcess 是一个轻量级的进程在开发过程中有些逻辑是针对数据进行判断和处理所以没有必要创建一个渲染进程渲染进程会模拟整个浏览器会耗费很多 cpu 和内存但是我们却用不到这时轻量级的工具进程就起到了很大的作用了例如做一个全局任务调度程序。
难点
主子进程最重要的环节就是两者的通信官方给了主子通信的方式同时还给了 MessageChannelMainElectron 通信桥的方式这两种方式基本解决了我们所有问题
完整代码
main.js
import {utiltyProcess, MessageChannelMain} from electron
const {port1, port2} new MessageChannelMain()
const child utilityProcess.fork(path.join(__static, alarm1.js))
child.on(spawn, () {child.postMessage({message: hello}, [port1])
})port2.on(message, (e) {console.log(port receive:, e.data);port2.postMessage(I receive your messages:)
})
port2.start()
child.on(message, (e) {console.log(接收到消息了, e);
}) utility-process.js
console.log(Listening for messages...);
process.parentPort.on(message, (e) {const port e.ports[0];process.parentPort.postMessage({data: Ready});console.log(I m coming,do you find me)port.on(message, (e) {console.info(why not print it, e.data)setTimeout(() {port.postMessage(I receive your message:${e.data})}, 2000)});port.start();port.postMessage({data: Ready});
});
注意 utility-process.js 中的 console.log 有时候不能在控制台打印出来我删掉 node_modules 重新安装并且全部改为英文之后没事不要用中文外国人搞得东西用中文都是坑又能输出来了这个有人提过是个老问题这里记下来好像他们也没处理就放在那里了 [Bug]: output sometimes missing in utility process · Issue #36411 · electron/electron · GitHub console.info(why not print it, e.data) 这里没有打印出来不代表这里没有收到 message实际上是收到了setTimeout 那里是可以执行的很多人被坑以为这里没办法通信因为 console.log 没打印出来以为代码没走到这里 port.start() 这行代码一定要有最好放在 onmessage 之后electron 开发者的意思如果默认开启就会丢失一些消息只有当你确保 onmessage 配置好了后再开启消息队列html5 MessageChannel 中的 port 没有 start 函数这是最大的区别。