In meiner persönlichen Erfahrung mit dem Schreiben von Erweiterungen, neige ich sendMessage
für Zustandsinitialisierung zu verwenden und eine Verbindung zu jeder Zeit, die ich will immer wieder Dinge senden.
Als Beispiel haben meine Erweiterungen normalerweise benutzerkonfigurierbare Optionen, und ich brauche eine Möglichkeit, diese Optionen an meine Inhaltsskripte zu senden. Ich verwende sendMessage
und onMessage
, um ein JSON-Objekt an meine Inhaltsskripte zu übergeben. Dieses Objekt enthält die verschiedenen benutzergesteuerten Einstellungen und möglicherweise auch andere Zustände.
Ich habe auch eine kleine Bibliothek erstellt, mit der Sie Tastaturkürzel auf der Hintergrundseite definieren können. Wie es funktioniert, ist einfach: Ein Inhaltsskript wird in jede Seite eingefügt, die dann auf die Ereignisse keydown
und keyup
hört.
Wenn ein Ereignis auftritt, verwendet es chrome.runtime.connect
, um mit der Hintergrundseite zu kommunizieren. Ich denke, dies ist ein hervorragendes Beispiel dafür, wann eine langlebige Verbindung nützlicher sein könnte als viele Anrufe.
Ich glaube nicht, dass es etwas gibt, dass Sie auf die eine oder andere Weise verwenden müssen ... Sie könnten mehrere sendMessage
verwenden oder nur eine einzige Nachricht mit Verbindung senden. Ich glaube, es ist eher eine Frage der Semantik und der Auswahl, welches Tool für den Job am sinnvollsten ist.
Denken Sie auch daran, dass die Verwendung von connect es einfach macht, für jede Verbindung einen separaten Status zu speichern, während es mit sendMessage
etwas schwieriger sein könnte.
Wie für die Leistung ... Ich weiß ehrlich gesagt nicht, aber ich würde erwarten, dass sie zumindest ähnlich sein, d. H. 5 sendMessage
wäre in etwa gleich mit dem Senden von 5 Nachrichten mit Verbindung. Denken Sie daran, dass sie asynchron sind, so dass das Timing abhängig von den Umständen schwanken kann.
Für alle zukünftigen Zuschauer glaube ich, 'sendmessage' verwendet' chrome.runtime.connection', öffnet einen Port und schließt dann den Port, nachdem die einzelne Nachricht gesendet wurde, so dass sie in Bezug auf die Leistung identisch sein sollten. Versuchen Sie 'console.log (sendResponse)'. –