В моем личном опыте написания расширений, я предпочитаю использовать sendMessage
для состояния инициализации, и подключить в течение любого времени, что я хочу, чтобы отправить вещи повторно.
В качестве примера мои расширения обычно имеют настраиваемые пользователем параметры, и мне нужен способ отправки этих параметров в мои сценарии содержания. Я использую sendMessage
и onMessage
, чтобы передать объект JSON своим сценариям контента. Этот объект содержит различные пользовательские настройки и, возможно, другое состояние.
Я также создал небольшую библиотеку, которая позволяет определять сочетания клавиш на странице фона. Как это работает, просто: скрипт содержимого вводится на каждую страницу, который затем прослушивает события keydown
и keyup
.
При возникновении события для связи со справочной страницей используется chrome.runtime.connect
. Я думаю, что это отличный пример того, когда долговременное соединение было бы более полезным, чем многие звонки sendMessage
.
Я не думаю, что есть что-то, требующее от вас использовать их так или иначе ... вы можете использовать несколько sendMessage
или отправлять только одно сообщение с подключением. Я считаю, что это скорее вопрос семантики и выбор того, какой инструмент имеет наибольший смысл для этой работы.
Также имейте в виду, что при использовании соединения упрощается хранение отдельного состояния для каждого соединения, в то время как с sendMessage
это может быть труднее.
Что касается производительности ... Я честно не знаю, но я ожидал бы, что они по крайней мере будут похожи, т. Е. Отправка 5 sendMessage
будет примерно эквивалентна отправке 5 сообщений с подключением. Имейте в виду, что они асинхронны, поэтому время может колебаться в зависимости от обстоятельств.
для будущих зрителей, я считаю, что 'sendmessage' использует' chrome.runtime.connection', открывая порт, затем закрывая порт после отправки одного сообщения, поэтому с точки зрения производительности они должны быть одинаковыми. Попробуйте 'console.log (sendResponse)'. – 2014-06-18 02:23:40