Google chrome extension Chrome扩展:简单的消息传递与Chrome连接

Google chrome extension Chrome扩展:简单的消息传递与Chrome连接,google-chrome-extension,Google Chrome Extension,我应该在什么时候使用镀铬连接?是否有充分的理由同时使用简单的消息传递和长寿命的连接?这两者是否有单独的性能影响 除了比较这两种方法之外,还有其他文件吗 (编辑:文档移动到)在我编写扩展的个人经验中,我倾向于使用sendMessage进行状态初始化,并在我想要重复发送内容的任何时候进行连接 例如,我的扩展通常有用户可配置的选项,我需要一种方法将这些选项发送到我的内容脚本。我使用sendMessage和onMessage将JSON对象传递给我的内容脚本。此对象包含各种用户控制的设置,可能还包含其他状

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

除了比较这两种方法之外,还有其他文件吗


(编辑:文档移动到)

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

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

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

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

我不认为有任何东西需要你以这样或那样的方式使用它们。。。您可以使用多个
sendMessage
,也可以使用connect只发送一条消息。我相信这更多的是语义和选择哪个工具对工作最有意义的问题

还请记住,使用connect可以很容易地为每个连接存储单独的状态,而使用
sendMessage
可能要困难一些


至于表现。。。我真的不知道,但我希望它们至少是相似的,即发送5条
sendMessage
大致相当于使用connect发送5条消息。请记住,它们是异步的,因此计时可能会根据情况而波动。

要补充另一个答案,使用端口还有一个额外的优势,即断开连接事件

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


这还允许跟踪打开的选项卡(插入内容脚本),而无需使用
选项卡
权限。

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