JavaScript发布/订阅消息优先级

JavaScript发布/订阅消息优先级,javascript,Javascript,与其说是问题,不如说是讨论: 我一直在读一篇题为“大规模JavaScript应用程序架构模式”的文章,到目前为止,这篇文章让我大开眼界 本文作者提倡使用pub/sub体系结构和中介/控制器。这里没有给出任何真实的例子,但在实际的幻灯片放映()中,他提倡使用'Amplify.js' 与许多其他发布/订阅实现一样,Amplify支持消息优先级。我的理解是,有了中介,对消息进行优先级排序的需求就减少了,因为中介控制了何时何地发生的事情。这一点正确吗 消息优先级让我感到害怕,因为当应用程序增长(和变化)

与其说是问题,不如说是讨论:

我一直在读一篇题为“大规模JavaScript应用程序架构模式”的文章,到目前为止,这篇文章让我大开眼界

本文作者提倡使用pub/sub体系结构和中介/控制器。这里没有给出任何真实的例子,但在实际的幻灯片放映()中,他提倡使用'Amplify.js'

与许多其他发布/订阅实现一样,Amplify支持消息优先级。我的理解是,有了中介,对消息进行优先级排序的需求就减少了,因为中介控制了何时何地发生的事情。这一点正确吗


消息优先级让我感到害怕,因为当应用程序增长(和变化)时,最终可能会出现一堆模块,这些模块的订阅设置了不同的优先级,而无法真正控制正在发生的事情。这是一个合理的担忧,还是仅仅是对如何实际使用它们的误解?

我会提醒大家不要使用任何复杂版本的pub/sub。与其从优先级的角度思考,不如从渠道的角度思考,并假设所有渠道都是独立处理的,并且没有一个渠道具有“优先级”

另一个警告:不要将模块名用作通道名或名称空间。如果您这样做了,那么您也可以给其他模块直接引用您的模块并直接调用方法。关键是,您的模块彼此不了解,也不直接通信


另一个提示:不要告诉其他模块做什么。相反,报告发送消息的模块内部发生的事件。这种思维上的微妙转变是保持模块解耦的关键。

我发现这种对发布/次级优先级的使用很有帮助,这是基于在这个问题上建议将它们用作“通道”的好主意

订阅优先级,其中1最高,5最低:

  • 调试消息
  • 包含任何影响元素大小或位置的DOM布局更改的订阅
  • 仅涉及样式DOM更改的订阅,这不会影响布局
  • 在DOM中读取布局或样式的订阅
  • 不接触DOM的订阅(纯JS)
  • 希望这能尽可能多地预防


    很抱歉回复一篇旧帖子,但这是谷歌“发布次优先级”的第一页,关于这一点没有太多内容。

    这个问题没有回应。我想我的问题可能太具体了。在任何情况下,我只是想分享我所学到的和我所得到的理解。简言之,我不主张使用优先级来管理组件之间的复杂通信。相反,使用它们作为控制通信类型的通道(即调试通道为1,正常通道为2),因此调试组件总是首先获取消息。您的问题和评论反映了我自己的感受。我们目前正在调查使用哪个酒吧/分馆,我觉得拥有优先权将导致一种新形式的无形耦合。您使用优先级和定义良好的频道的想法可能是这个概念的唯一安全使用。作为旁注,如果您使用JavaScript进行发布/订阅,如果您还没有使用SignalR,我建议您研究一下它。我在上一个项目中使用了它,效果非常好。它甚至可能有优先权的东西内置在那里为你。我知道你的问题更接近理论对话,我自己也会倾向于明确的渠道。我同意埃里克的观点。对订阅设置优先级似乎(在我看来)意味着一个模块需要对另一个模块有足够的了解,以确定它是否应该具有优先级;这反过来表明模块之间的耦合不是很松散。我一直的做法是保持简单。发布已发生的事件,只需让订阅的所有模块执行它们需要执行的操作。