就在电子中使用 IPC 侦听器的性能而言,哪种方法更好?

Which one is better way in terms of performance to use IPC listener in electron?

我的 electron 应用程序有很多 IPC 侦听器(超过 30),但我想知道哪个在性能方面更好。

第一种方案(IPC listener多少实现多少):

ipcMain.on('appLanguageChange', (event, data) => {
    //do something with data
})
ipcMain.on('current-patient-ask', (event, data) => {
    //do something with data
})

ipcMain.on('patient-set', (event, data) => {
    //do something with data
})

//Still need many listeners below..


方案二(使用Switch只实现一个IPC监听器):


    ipcMain.on('data-flow', (event, topic, data) => {
        switch (topic) {
            case "appLanguageChange":
                //do something with data

            case "current-patient-ask":
                //do something with data

            case "patient-set":
                //do something with data
                break;
             //Still need many cases below..
    })

目前我使用的是第二种方案,这个方案好吗?因为我知道有些人可能会收到一个警告,即已经实施了太多的 IPC 侦听器。如果有限制,最多可以实现多少个 IPC 侦听器?如果有人能解释一下这两种方法的优缺点就更好了。提前致谢。

由于 Electron 在底层使用 Node.js 并且 Electron 的 IPC 基于 Node 事件,任何限制都将由 Node 和 不是电子(除非电子另有定义,我不相信它是)。

根据最新的 Node.js 事件文档,一旦每个事件的侦听器超过 10 个,就会发出警告。 这 这里要注意的是“每个事件 超过 10 个听众 ”。

See this Node link for more information: events.defaultMaxListeners

因为每个 ipcMain.on('channelName', () => { ... }) 都是监听器,在这个例子中,一个名为 channelName 的事件,你 在警告之前,您的代码中需要超过 10 个 ipcMain.on('eventName', () => { ... }) 方法 是扔。

由于您的所有 ipcMain 方法似乎都适用于不同的事件名称,因此两者之间没有操作上的好处 你的解决方案。

也就是说,您的第一个解决方案将是首选解决方案,允许您拨打个人 ipcMain 电话 进入他们的“相关文件”。例如:appLangaugeChange 事件将在您的 language 脚本中编码,同时 您的任何 patient 事件都将在您的 patient 脚本中编码。这将使您的代码保持分离,逻辑, 可扩展且易于调试。

此外,随着项目的发展,特定的代码部分可以侦听由 如果需要,不相关的代码部分。 EG:在表单上提交一些新信息可能会更新多个面板 您的主要 window,或同时更新多个 child-windows。

关于“性能”的讨论,如果您的事件每隔几毫秒触发一次,那么人们会想看看 在 micro-optimisation。但根据事件名称,情况并非如此,因此任何解决方案都可行。如果有什么, 它可能更多地基于您喜欢的编码风格。

作为结束语,将 ipcMain 方法及其关联的 Electron 方法仅视为 Node 的扩展 事件。它们并不特殊或神奇,而只是一个简单的观察者设计模式。这样,你会写得更好, 更模块化的代码。