我應該在什麼時候使用Chrome連接?是否有充分的理由同時使用簡單的消息傳遞和長期連接?這兩者有不同的性能影響嗎?Chrome擴展程序:簡單消息傳遞與Chrome連接
除了http://code.google.com/chrome/extensions/messaging.html之外,還有哪些文檔比較兩種方法?
(編輯:文檔移動到https://developer.chrome.com/extensions/messaging)
我應該在什麼時候使用Chrome連接?是否有充分的理由同時使用簡單的消息傳遞和長期連接?這兩者有不同的性能影響嗎?Chrome擴展程序:簡單消息傳遞與Chrome連接
除了http://code.google.com/chrome/extensions/messaging.html之外,還有哪些文檔比較兩種方法?
(編輯:文檔移動到https://developer.chrome.com/extensions/messaging)
在我和編寫擴展個人的經驗,我傾向於使用sendMessage
的狀態初始化,並重新連接,我想重複送東西的任何時間。
作爲示例,我的擴展通常具有用戶可配置的選項,並且需要將這些選項發送到我的內容腳本的方法。我使用sendMessage
和onMessage
將JSON對象傳遞給我的內容腳本。該對象包含各種用戶控制的設置,以及可能的其他狀態。
我還創建了一個小型庫,允許在後臺頁面中定義鍵盤快捷鍵。它的工作原理很簡單:將內容腳本注入每個頁面,然後監聽和keyup
事件。
當事件發生時,它使用chrome.runtime.connect
與後臺頁面進行通信。我認爲這是一個很好的例子,當一個長期連接比許多sendMessage
調用更有用。
我不認爲有什麼需要你以某種方式使用它們......你可以使用多個sendMessage
或只發送一條帶連接的消息。我相信這更多的是語義問題,並選擇哪種工具對工作最有意義。
另外請記住,使用connect可以很容易地爲每個連接存儲單獨的狀態,而使用sendMessage
可能會更困難。
至於性能...我真的不知道,但我希望他們至少是相似的,即發送5 sendMessage
將大致相當於發送5連接消息。請記住它們是異步的,因此時間可能會根據具體情況而波動。
要添加到其他答案,使用端口有onDisconnect
事件的形式的額外優勢。
假設內容腳本打開到後臺頁面的連接。如果關閉標籤或用戶導航離開,則後臺頁面將立即通知正在卸載的內容腳本。
這也可以允許在不使用tabs
權限的情況下跟蹤打開的選項卡(使用注入的內容腳本)。
對於任何未來的觀衆,我相信'sendmessage'使用'chrome.runtime.connection',打開一個端口,然後在單個消息發送後關閉端口,所以在性能方面它們應該是相同的。嘗試'console.log(sendResponse)'。 – 2014-06-18 02:23:40