Start · Sprachen · JavaScript · Referenz · DedicatedWorkerGlobalScope.name

DedicatedWorkerGlobalScope.name

Eigenschaft

Gibt innerhalb eines Dedicated Workers den Namen als <code>string</code> zurück, der beim Erzeugen über <code>new Worker(url, { name })</code> vergeben wurde. Die Eigenschaft ist schreibgeschützt.

seit JavaScript Baseline: alle modernen Browser (Chrome 70+, Firef Kategorie: webapi

Signatur

get DedicatedWorkerGlobalScope.name

Beschreibung

Die schreibgeschützte Eigenschaft name des globalen Worker-Objekts (self bzw. globalThis im Worker) enthält den Namen, den das Hauptskript dem Worker beim Erzeugen gegeben hat. Du vergibst den Namen über die Option name im zweiten Argument des Konstruktors: new Worker("worker.js", { name: "bildverarbeitung" }). Ohne diese Option ist der Wert ein leerer String ("").

Hauptsächlich nutzt man den Namen zur Fehlersuche und Protokollierung: Die Entwicklerwerkzeuge der Browser zeigen ihn in der Liste der Threads und im Debugger an. So findest du bei mehreren Workern schnell den richtigen. Außerdem kann ein und dasselbe Worker-Skript anhand von self.name seine Rolle erkennen, zum Beispiel als Worker Nr. 3 in einem Worker-Pool, oder seinen Log-Ausgaben ein Präfix voranstellen.

Der Name ist ausschließlich im Worker selbst lesbar. Das Worker-Objekt im Hauptthread hat keine entsprechende Eigenschaft. Wenn du den Namen auch dort brauchst, musst du ihn selbst speichern. Der Name muss nicht eindeutig sein und hat keine Auswirkung darauf, wie der Worker ausgeführt wird.

Rückgabewert

Typ
string
Beschreibung
Der beim Erzeugen über die Option name übergebene Name des Workers. Wurde keiner angegeben, ist der Wert ein leerer String "".

Beispiele

Worker mit Namen erzeugen und den Namen im Worker auslesen

// main.js
const worker = new Worker("worker.js", { name: "bildverarbeitung" });
worker.onmessage = (event) => console.log(event.data);
worker.postMessage("start");

// worker.js
self.onmessage = () => {
  self.postMessage(`Hallo vom Worker "${self.name}"`);
};
Hallo vom Worker "bildverarbeitung"

Worker-Pool: Rolle und Log-Präfix über den Namen festlegen

// main.js – vier Worker mit demselben Skript, aber unterschiedlichen Namen
const pool = Array.from({ length: 4 }, (_, i) =>
  new Worker("rechner.js", { name: `rechner-${i}` })
);
pool.forEach((w, i) => w.postMessage({ von: i * 1000, bis: (i + 1) * 1000 }));

// rechner.js
const log = (...args) => console.log(`[${self.name || "unbenannt"}]`, ...args);

self.onmessage = ({ data: { von, bis } }) => {
  let summe = 0;
  for (let n = von; n < bis; n++) summe += n;
  log(`Summe ${von}–${bis - 1}:`, summe);
  self.postMessage(summe);
};
[rechner-0] Summe 0–999: 499500 [rechner-1] Summe 1000–1999: 1499500 [rechner-2] Summe 2000–2999: 2499500 [rechner-3] Summe 3000–3999: 3499500

Modul-Worker ohne Namen und Schreibschutz

// main.js
new Worker("modul-worker.js", { type: "module" });

// modul-worker.js (Module laufen immer im Strict Mode)
console.log(JSON.stringify(self.name)); // kein Name vergeben

try {
  self.name = "neu";
} catch (err) {
  console.log(err.constructor.name);
}
"" TypeError

// Wichtig · Fallstricke

  • Schreibgeschützt: Außerhalb des Strict Mode wird eine Zuweisung wie self.name = "x" stillschweigend ignoriert. Im Strict Mode, also auch in Modul-Workern (type: "module"), wirft sie einen TypeError. Das ist anders als bei window.name, das beschreibbar ist.
  • Nur im Worker verfügbar: Das Worker-Objekt im Hauptthread hat keine name-Eigenschaft. Wenn du den Namen dort brauchst, speichere ihn selbst.
  • Kein Bezeichner: Namen müssen nicht eindeutig sein. Verwende sie nicht als Sicherheits- oder Zugriffsmerkmal, denn jedes Skript kann beliebige Namen vergeben.
  • Bei SharedWorker gibt es eine eigene Eigenschaft SharedWorkerGlobalScope.name. Dort ist der Name wichtig: Zusammen mit der URL entscheidet er, ob eine bestehende Worker-Instanz wiederverwendet wird.
  • Kompatibilität: In allen aktuellen Browsern verfügbar. Sehr alte Versionen ignorieren die Option name; dann ist self.name undefined. Ein Fallback wie self.name || "unbenannt" fängt das ab.