就在电子中使用 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 的扩展
事件。它们并不特殊或神奇,而只是一个简单的观察者设计模式。这样,你会写得更好,
更模块化的代码。
我的 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 的扩展
事件。它们并不特殊或神奇,而只是一个简单的观察者设计模式。这样,你会写得更好,
更模块化的代码。