spa*_*33z 7 performance electron
我正在编写一个 Electron 应用程序,它需要每大约 25 毫秒从渲染器向一个单独的 Node 进程发送相当多的数据,该进程在主进程中使用本机fork模块启动。
数据如下所示:[{ x: int, y: int }, ...],其中包含大约 1000 个点(为了简洁起见,比此处显示的信息多一点)。
我开始ipc.send在渲染器进程中使用,但它有相当严重的性能损失:每个ipc.send.
因此,我考虑ws在分叉的 Node 进程中使用npm 包启动 WebSocket ,并使用 JSON 通过 WebSocket 发送数据。这好多了。甚至通过使用avsc而不是解析为 JSON 来进一步改进它(从 ~4ms 到 ~1ms)。
所以 WebSocket 解决方案运行良好,但有一个问题:它需要找到一个空闲端口并通过本地网络。在 macOS 中,这也会触发一个对话框:
您希望应用程序“x.app”接受传入的网络连接吗?
如果可能的话,这个对话框与使用本地网络的技巧相结合是我想避免的。
我的问题是:有没有人知道将数据发送到 Electron 中不通过本地网络的其他进程的更好解决方案?
因此,WebSocket 解决方案运行良好,但有一个问题:它需要找到一个空闲端口并通过本地网络。在 macOS 中,这还会触发一个对话框:...
您使用的是环回地址吗?环回地址永远不需要网络确认。在我本地的 ws electro 项目中,我使用 127.0.0.1:port 而不是 localhost,这完全绕过了互联网安全对话框。您可以使用其他127.xxx地址,只要在Linux / MacOS上添加适当的环回接口即可。在 Windows 上,默认情况下已添加 127.xxx。
我的问题是:有谁知道有更好的解决方案来将数据发送到 Electron 中不通过本地网络的其他进程吗?
Electron 可以使用 IPC、RPC 或基于网络的通信技术。您已经体验过 IPC(RPC 非常类似)。根据我的经验,最快的是基于网络的技术。我的经历与你的经历非常相似,网络套接字在竞争中脱颖而出。基于网络的通信技术人员不应触发 LAN/WAN/ISP 安全措施,除非他们使用 LAN/WAN/ISP 地址。