2010-09-26 8 views
5

A che punto devo utilizzare una connessione Chrome? C'è mai una buona ragione per utilizzare sia il semplice passaggio di messaggi sia le connessioni a lunga durata? Questi due hanno implicazioni sulle prestazioni separate?Estensioni di Chrome: semplice passaggio di messaggi vs connessione di cromo

Esistono documenti diversi da http://code.google.com/chrome/extensions/messaging.html che confrontano i due approcci?

(edit: la documentazione è trasferito a https://developer.chrome.com/extensions/messaging)

+0

per i futuri spettatori, credo che 'sendmessage' usi' chrome.runtime.connection', aprendo una porta, quindi chiudendo la porta dopo che il singolo messaggio è stato inviato, quindi in termini di prestazioni, dovrebbero essere identici. Prova 'console.log (sendResponse)'. –

risposta

7

Nella mia esperienza personale con le estensioni di scrittura, tendo a usare sendMessage per l'inizializzazione dello stato, e collegare per ogni momento che voglio inviare le cose più volte.

Ad esempio, le mie estensioni di solito dispongono di opzioni configurabili dall'utente e ho bisogno di un modo per inviare tali opzioni ai miei script di contenuto. Io uso sendMessage e onMessage per passare un oggetto JSON ai miei script di contenuto. Questo oggetto contiene le varie impostazioni controllate dall'utente e probabilmente anche altri stati.

Ho anche creato una piccola libreria che consente di definire scorciatoie da tastiera nella pagina di sfondo. Come funziona è semplice: uno script di contenuto viene iniettato in ogni pagina, che quindi ascolta gli eventi keydown e keyup.

Quando si verifica un evento, utilizza chrome.runtime.connect per comunicare con la pagina di sfondo. Penso che questo sia un eccellente esempio di quando una connessione di lunga durata sarebbe più utile di molte chiamate sendMessage.

Non penso che ci sia qualcosa che richiede che tu li usi in un modo o nell'altro ... potresti usare più sendMessage o solo inviare un singolo messaggio con la connessione. Credo che sia più una questione di semantica e di scegliere quale strumento abbia più senso per il lavoro.

Ricorda inoltre che l'utilizzo della connessione semplifica l'archiviazione dello stato separato per ciascuna connessione, mentre potrebbe essere un po 'più difficile fare con sendMessage.

quanto riguarda le prestazioni ... Onestamente non lo so, ma mi aspetto che almeno essere simili, vale a dire l'invio 5 sendMessage sarebbe più o meno equivalente a inviare 5 messaggi con Connect. Tieni presente che sono asincroni, quindi i tempi possono variare a seconda delle circostanze.

1

Per aggiungere all'altra risposta, l'uso delle porte ha un ulteriore vantaggio sotto forma di evento onDisconnect.

Supponiamo che uno script di contenuto apra una connessione alla pagina di sfondo. La pagina di sfondo verrà immediatamente avvisata dello script di contenuto che viene scaricato se la scheda viene chiusa o l'utente si allontana.

Ciò consente anche di tenere traccia delle schede aperte (con script di contenuto iniettati) senza utilizzare l'autorizzazione tabs.

Problemi correlati