2010-09-26 1 views
5

В какой момент следует использовать хром-соединение? Есть ли веская причина использовать как простые передачи сообщений, так и долгоживущие соединения? Имеют ли эти две отдельные последствия для производительности?Хромированные расширения: простая передача сообщений против хромированного соединения

Есть ли какие-либо документы, кроме 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 для состояния инициализации, и подключить в течение любого времени, что я хочу, чтобы отправить вещи повторно.

В качестве примера мои расширения обычно имеют настраиваемые пользователем параметры, и мне нужен способ отправки этих параметров в мои сценарии содержания. Я использую sendMessage и onMessage, чтобы передать объект JSON своим сценариям контента. Этот объект содержит различные пользовательские настройки и, возможно, другое состояние.

Я также создал небольшую библиотеку, которая позволяет определять сочетания клавиш на странице фона. Как это работает, просто: скрипт содержимого вводится на каждую страницу, который затем прослушивает события keydown и keyup.

При возникновении события для связи со справочной страницей используется chrome.runtime.connect. Я думаю, что это отличный пример того, когда долговременное соединение было бы более полезным, чем многие звонки sendMessage.

Я не думаю, что есть что-то, требующее от вас использовать их так или иначе ... вы можете использовать несколько sendMessage или отправлять только одно сообщение с подключением. Я считаю, что это скорее вопрос семантики и выбор того, какой инструмент имеет наибольший смысл для этой работы.

Также имейте в виду, что при использовании соединения упрощается хранение отдельного состояния для каждого соединения, в то время как с sendMessage это может быть труднее.

Что касается производительности ... Я честно не знаю, но я ожидал бы, что они по крайней мере будут похожи, т. Е. Отправка 5 sendMessage будет примерно эквивалентна отправке 5 сообщений с подключением. Имейте в виду, что они асинхронны, поэтому время может колебаться в зависимости от обстоятельств.

1

Чтобы добавить к другому ответу, использование портов имеет дополнительное преимущество в виде события onDisconnect.

Предположим, что скрипт контента открывает соединение с фоновым рисунком. После этого фоновая страница будет немедленно уведомлена о том, что сценарий содержимого выгружается, если вкладка закрыта или пользователь переходит.

Это также позволяет отслеживать открытые вкладки (с вложенными скриптами содержимого) без использования разрешения tabs.