我如何在 Electron 中多线程兼容 Node.JS 和 JQuery 函数?
How can I multi-thread in Electron with compatibility for Node.JS and JQuery functions?
我正在编写一个 Electron 应用程序,其中一些页面旨在通过从我的网络 API 中获取 Json 字符串来实时更新 table。重要的是我的 table 首先必须加载到文档 (HTML) 之前或之后(没关系)我开始一个新的 JavaScript 线程.我已经需要使用主进程来处理按钮和 table 事件。
该线程用于持续获取数据,如果它检测到与当前加载的文档有差异,它会将这些更改放回服务器。现在,我无法启动一个新线程,该线程可以完全访问 Node、Electron 和 JQuery.
中使用的预加载 JS 函数
下面列出了我尝试过的方法及其出错的原因,也许您可以帮助我找到解决这些问题的方法或建议新的方向(也许是另一个 NPM 模块?):
- 香草 WebWorkers |无法使用 Node、Electron、JQuery 中的任何预定义函数,因为它启动了一个全新的进程。
- 节点child_process |这个内置函数派生一个新线程。但是,它在完全不同的环境中工作,这意味着如果它对 console/document.
有任何输出,我将看不到输出
- 电子网络工作者 |我在文档中找到了这些并启用了 NodeIntegrationInWorker。但是,它有一个错误,它无法从 workers/api/etc 中找到文件,我也找不到这些文件。重要的是要注意,这不是我必须安装的模块,因此 IDK 在搜索 30 分钟后甚至在我的系统上找到了这些文件。
- 我安装了一些不同的 NPM 模块也无济于事,主要是因为它们是孤立的(例如类似于 Electron WebWorkers 的扩展 WebWorkers)或者它们是孤立的(扩展 child_process().fork也不起作用的函数,来自 Node)。
- 节点进程
- workerjs
- 线程
- webworker-ng
- 网络工作者线程
最后,为了修复我提到的第三个选项,我试图专注于提到的 ASAR 路径 here。修复了这个错误:
Uncaught Error: ENOENT, worker\api\exports\electron.js not found
但现在我处于线程可能在我加载页面后启动但甚至没有向控制台记录一个简单的“Hello”的地步,这可能是由于出色的线程隔离。
TLDR;我需要一种方法 运行 Electron 中的第二个线程,它可以完全访问预定义的对象。这个选项应该 运行 在主进程之后,一旦进入无限 while(True) 循环就不会停止页面加载。
正如 Darkrum 在评论中的回答:
setTimeOut or setInterval is your friend.
经过一些额外的研究(如果我在这里错了请评论):
这两个函数允许代码“同时”执行。因为 Javascript 在技术上只是一种单线程语言,所以真正的多线程是不存在的。相反,JS 引擎在处理 setTimeout
时,会不断地在主线程中检查更新。
我正在编写一个 Electron 应用程序,其中一些页面旨在通过从我的网络 API 中获取 Json 字符串来实时更新 table。重要的是我的 table 首先必须加载到文档 (HTML) 之前或之后(没关系)我开始一个新的 JavaScript 线程.我已经需要使用主进程来处理按钮和 table 事件。
该线程用于持续获取数据,如果它检测到与当前加载的文档有差异,它会将这些更改放回服务器。现在,我无法启动一个新线程,该线程可以完全访问 Node、Electron 和 JQuery.
中使用的预加载 JS 函数下面列出了我尝试过的方法及其出错的原因,也许您可以帮助我找到解决这些问题的方法或建议新的方向(也许是另一个 NPM 模块?):
- 香草 WebWorkers |无法使用 Node、Electron、JQuery 中的任何预定义函数,因为它启动了一个全新的进程。
- 节点child_process |这个内置函数派生一个新线程。但是,它在完全不同的环境中工作,这意味着如果它对 console/document. 有任何输出,我将看不到输出
- 电子网络工作者 |我在文档中找到了这些并启用了 NodeIntegrationInWorker。但是,它有一个错误,它无法从 workers/api/etc 中找到文件,我也找不到这些文件。重要的是要注意,这不是我必须安装的模块,因此 IDK 在搜索 30 分钟后甚至在我的系统上找到了这些文件。
- 我安装了一些不同的 NPM 模块也无济于事,主要是因为它们是孤立的(例如类似于 Electron WebWorkers 的扩展 WebWorkers)或者它们是孤立的(扩展 child_process().fork也不起作用的函数,来自 Node)。
- 节点进程
- workerjs
- 线程
- webworker-ng
- 网络工作者线程
最后,为了修复我提到的第三个选项,我试图专注于提到的 ASAR 路径 here。修复了这个错误:
Uncaught Error: ENOENT, worker\api\exports\electron.js not found
但现在我处于线程可能在我加载页面后启动但甚至没有向控制台记录一个简单的“Hello”的地步,这可能是由于出色的线程隔离。
TLDR;我需要一种方法 运行 Electron 中的第二个线程,它可以完全访问预定义的对象。这个选项应该 运行 在主进程之后,一旦进入无限 while(True) 循环就不会停止页面加载。
正如 Darkrum 在评论中的回答:
setTimeOut or setInterval is your friend.
经过一些额外的研究(如果我在这里错了请评论):
这两个函数允许代码“同时”执行。因为 Javascript 在技术上只是一种单线程语言,所以真正的多线程是不存在的。相反,JS 引擎在处理 setTimeout
时,会不断地在主线程中检查更新。