2010-09-26 9 views
5

¿En qué punto debo usar una conexión cromada? ¿Alguna vez hay una buena razón para usar tanto el envío simple de mensajes como las conexiones de larga duración? ¿Tienen estos dos implicaciones de rendimiento por separado?Extensiones de Chrome: mensaje simple que pasa frente a la conexión cromada

¿Hay algún documento aparte de http://code.google.com/chrome/extensions/messaging.html que compare los dos enfoques?

(edit: la documentación se trasladó a https://developer.chrome.com/extensions/messaging)

+0

para futuros espectadores, creo que 'sendmessage' utiliza' chrome.runtime.connection', abriendo un puerto, luego cerrando el puerto después de enviar el mensaje único, por lo que en términos de rendimiento, deberían ser idénticos. Pruebe 'console.log (sendResponse)'. –

Respuesta

7

En mi experiencia personal con extensiones de escritura, que tienden a utilizar para la inicialización sendMessage estado, y conectarse a cualquier momento que quiero enviar cosas repetidamente.

Como ejemplo, mis extensiones generalmente tienen opciones configurables por el usuario, y necesito una forma de enviar esas opciones a mis secuencias de comandos de contenido. Uso sendMessage y onMessage para pasar un objeto JSON a mis scripts de contenido. Este objeto contiene las diversas configuraciones controladas por el usuario, y posiblemente también otro estado.

También creé una pequeña biblioteca que permite definir atajos de teclado en la página de fondo. Cómo funciona es simple: se inyecta un guión de contenido en cada página, que luego escucha los eventos keydown y keyup.

Cuando ocurre un evento, usa chrome.runtime.connect para comunicarse con la página de fondo. Creo que este es un excelente ejemplo de cuándo una conexión de larga duración sería más útil que muchas llamadas sendMessage.

No creo que haya nada que requiera su uso de una manera u otra ... podría usar múltiples sendMessage o solo enviar un mensaje con la conexión. Creo que es más una cuestión de semántica y elegir qué herramienta tiene más sentido para el trabajo.

También tenga en cuenta que el uso de connect facilita la tarea de almacenar un estado separado para cada conexión, mientras que podría ser un poco más difícil de hacer con sendMessage.

En cuanto al rendimiento ... Honestamente, no sé, pero esperaría que al menos sean similares, es decir, el envío de 5 sendMessage sería más o menos equivalente a enviar 5 mensajes con la conexión. Tenga en cuenta que son asincrónicos, por lo que el tiempo puede fluctuar según las circunstancias.

1

Para agregar a la otra respuesta, el uso de puertos tiene una ventaja adicional en forma de evento onDisconnect.

Supongamos que una secuencia de comandos de contenido abre una conexión a la página de fondo. La página de fondo se notificará inmediatamente de la secuencia de comandos de contenido descargada si la pestaña está cerrada o si el usuario navega fuera.

Esto también permite rastrear las pestañas abiertas (con scripts de contenido inyectados) sin utilizar el permiso tabs.

Cuestiones relacionadas