我在JavaScript模块中实现了发布订阅模式,以供完全面向客户端的JavaScript对象使用。该模块与任何方式,形状或形式的客户端 - 服务器通信无关。
我的问题是,这种模块中的发布方法是同步还是异步更好,以及为什么。
作为一个非常简单的示例,假设我正在为HTML5视频播放器小部件构建自定义UI:
我的一个模块是“视频”模块,它包含VIDEO元素并处理与该元素相关的各种功能和事件。这可能有一个名称空间,如“widgets.player.video。”
另一个是“控件”模块,它具有各种按钮 - 播放,暂停,音量,清理,全屏等。这可能具有“widgets.player.controls”的命名空间。
这两个模块是父“播放器”模块(“widgets.player”??)的子节点,因此在实例化为“播放器”对象的子节点时,彼此之间没有固有的知识。
“控件”元素显然需要能够对视频进行一些更改(单击“播放”并播放视频),反之亦然(视频的“timeUpdate”事件触发并显示当前视频控件中的时间应该更新。
我可以紧密地耦合这些模块并将引用传递给彼此,但我宁愿通过设置一个可以订阅和发布的pubsub类型模块来采用更松散耦合的方法。
在这种情况下,SO(感谢与我合作)是否有同步发布与异步发布的优势?我已经看到一些在线发布的解决方案允许使用/或使用布尔标志,而其他解决方案则自动异步执行。我个人没有看到一个只是自动与同步发布一起实现的实现......这是因为它没有优势吗?我知道我可以使用jQuery提供的功能来实现这一点,但似乎这里可能涉及太多的开销。发布订阅模式可以使用专为此特定目的而设计的相对轻量级代码来实现,因此我更愿意使用更通用的事件系统,如jQuery(我将用于更一般的事件需求: - )。 / p>