2010-09-26 252 views
5

我應該在什麼時候使用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

回答

7

在我和編寫擴展個人的經驗,我傾向於使用sendMessage的狀態初始化,並重新連接,我想重複送東西的任何時間。

作爲示例,我的擴展通常具有用戶可配置的選項,並且需要將這些選項發送到我的內容腳本的方法。我使用sendMessageonMessage將JSON對象傳遞給我的內容腳本。該對象包含各種用戶控制的設置,以及可能的其他狀態。

我還創建了一個小型庫,允許在後臺頁面中定義鍵盤快捷鍵。它的工作原理很簡單:將內容腳本注入每個頁面,然後監聽​​和keyup事件。

當事件發生時,它使用chrome.runtime.connect與後臺頁面進行通信。我認爲這是一個很好的例子,當一個長期連接比許多sendMessage調用更有用。

我不認爲有什麼需要你以某種方式使用它們......你可以使用多個sendMessage或只發送一條帶連接的消息。我相信這更多的是語義問題,並選擇哪種工具對工作最有意義。

另外請記住,使用connect可以很容易地爲每個連接存儲單獨的狀態,而使用sendMessage可能會更困難。

至於性能...我真的不知道,但我希望他們至少是相似的,即發送5 sendMessage將大致相當於發送5連接消息。請記住它們是異步的,因此時間可能會根據具體情況而波動。

1

要添加到其他答案,使用端口有onDisconnect事件的形式的額外優勢。

假設內容腳本打開到後臺頁面的連接。如果關閉標籤或用戶導航離開,則後臺頁面將立即通知正在卸載的內容腳本。

這也可以允許在不使用tabs權限的情況下跟蹤打開的選項卡(使用注入的內容腳本)。