【问题标题】:Chrome Extensions: simple message passing vs chrome connectionChrome 扩展:简单的消息传递与 chrome 连接
【发布时间】:2014-04-15 19:11:32
【问题描述】:

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

除了http://code.google.com/chrome/extensions/messaging.html,还有其他文档可以比较这两种方法吗?

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

【问题讨论】:

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

标签: google-chrome-extension


【解决方案1】:

根据我个人编写扩展的经验,我倾向于使用sendMessage 进行状态初始化,并在我想重复发送内容的任何时间进行连接。

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

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

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

我认为没有什么要求您以一种或另一种方式使用它们...您可以使用多个sendMessage 或仅通过连接发送一条消息。我认为这更多的是语义问题,以及选择哪种工具最适合这项工作。

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

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

【讨论】:

    【解决方案2】:

    为了补充另一个答案,使用端口具有onDisconnect 事件形式的额外优势。

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

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

    【讨论】:

      猜你喜欢
      • 2011-03-01
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多