Chrome扩展程序:简单消息传递与Chrome连接

问题描述:

我应该在什么时候使用Chrome连接?是否有充分的理由同时使用简单的消息传递和长期连接?这两者有不同的性能影响吗?Chrome扩展程序:简单消息传递与Chrome连接

除了http://code.google.com/chrome/extensions/messaging.html之外,还有哪些文档比较两种方法?

(编辑:文档移动到https://developer.chrome.com/extensions/messaging

+0

对于任何未来的观众,我相信'sendmessage'使用'chrome.runtime.connection',打开一个端口,然后在单个消息发送后关闭端口,所以在性能方面它们应该是相同的。尝试'console.log(sendResponse)'。 – 2014-06-18 02:23:40

在我和编写扩展个人的经验,我倾向于使用sendMessage的状态初始化,并重新连接,我想重复送东西的任何时间。

作为示例,我的扩展通常具有用户可配置的选项,并且需要将这些选项发送到我的内容脚本的方法。我使用sendMessageonMessage将JSON对象传递给我的内容脚本。该对象包含各种用户控制的设置,以及可能的其他状态。

我还创建了一个小型库,允许在后台页面中定义键盘快捷键。它的工作原理很简单:将内容脚本注入每个页面,然后监听​​和keyup事件。

当事件发生时,它使用chrome.runtime.connect与后台页面进行通信。我认为这是一个很好的例子,当一个长期连接比许多sendMessage调用更有用。

我不认为有什么需要你以某种方式使用它们......你可以使用多个sendMessage或只发送一条带连接的消息。我相信这更多的是语义问题,并选择哪种工具对工作最有意义。

另外请记住,使用connect可以很容易地为每个连接存储单独的状态,而使用sendMessage可能会更困难。

至于性能...我真的不知道,但我希望他们至少是相似的,即发送5 sendMessage将大致相当于发送5连接消息。请记住它们是异步的,因此时间可能会根据具体情况而波动。

要添加到其他答案,使用端口有onDisconnect事件的形式的额外优势。

假设内容脚本打开到后台页面的连接。如果关闭标签或用户导航离开,则后台页面将立即通知正在卸载的内容脚本。

这也可以允许在不使用tabs权限的情况下跟踪打开的选项卡(使用注入的内容脚本)。