Start · Sprachen · JavaScript · Referenz · WorkerGlobalScope.dump()

WorkerGlobalScope.dump()

Methode

Schreibt eine Zeichenkette aus einem Worker direkt auf die Standardausgabe (stdout) des Browser-Prozesses, nicht in die DevTools-Konsole.

seit JavaScript Nicht standardisiert – nur Firefox (Gecko) deprecated seit ja Kategorie: webapi

Signatur

WorkerGlobalScope.dump(message)

Beschreibung

dump() ist eine nicht standardisierte Methode des globalen Worker-Kontexts (self in Dedicated, Shared und Service Workern). Sie gibt die übergebene Zeichenkette unverändert auf die Standardausgabe des Browser-Prozesses aus, also auf das Terminal, aus dem Firefox gestartet wurde. In der Entwicklerwerkzeug-Konsole erscheint dabei nichts.

Nützlich ist die Methode vor allem für Low-Level-Debugging: bei automatisierten Tests (z. B. Firefox im Headless-Modus in CI-Pipelines), bei Abstürzen, nach denen die DevTools nicht mehr erreichbar sind, und bei Timing-Problemen, bei denen die Konsole selbst das Verhalten verfälschen würde. Anders als bei console.log() wird kein Zeilenumbruch angehängt, und Objekte werden nicht formatiert. Es wird schlicht der String-Wert ausgegeben.

In Firefox muss die Ausgabe erst aktiviert werden: In about:config die Einstellung browser.dom.window.dump.enabled auf true setzen. Bei Debug-Builds ist sie standardmäßig aktiv. Für normalen Produktivcode sollte man stattdessen console-Methoden verwenden.

Parameter

Name Typ Default Beschreibung
$message Pflicht string Die auszugebende Zeichenkette. Andere Werte werden in einen String umgewandelt. Einen Zeilenumbruch (\n) muss man selbst anhängen.

Rückgabewert

Typ
void
Beschreibung
Kein Rückgabewert (undefined).

Beispiele

Einfache Ausgabe aus einem Dedicated Worker

// worker.js
self.dump('Worker gestartet\n');

self.addEventListener('message', (event) => {
  self.dump(`Nachricht empfangen: ${event.data}\n`);
  self.postMessage(event.data * 2);
});
Worker gestartet Nachricht empfangen: 21

Sicherer Logger mit Fallback auf die Konsole

// worker.js – funktioniert in allen Browsern
const log = (...teile) => {
  const text = teile
    .map((t) => (typeof t === 'string' ? t : JSON.stringify(t)))
    .join(' ');
  if (typeof self.dump === 'function') {
    self.dump(`[worker ${Date.now()}] ${text}\n`);
  } else {
    console.log(text);
  }
};

log('Berechnung beginnt', { n: 1e6 });
[worker 1718000000000] Berechnung beginnt {"n":1000000}

Lebenszyklus eines Service Workers im Terminal verfolgen

// sw.js
self.addEventListener('install', () => {
  self.dump('SW: install\n');
  self.skipWaiting();
});

self.addEventListener('activate', (event) => {
  self.dump('SW: activate\n');
  event.waitUntil(self.clients.claim());
});

self.addEventListener('fetch', (event) => {
  self.dump(`SW: fetch ${event.request.url}\n`);
});
SW: install SW: activate SW: fetch https://example.com/index.html

// Wichtig · Fallstricke

  • Nicht standardisiert: Nur Firefox unterstützt die Methode. In Chrome, Safari und Edge ist self.dump undefined, ein Aufruf wirft dort einen TypeError. Deshalb immer zuerst mit typeof self.dump === 'function' prüfen.
  • Standardmäßig stumm: In Release-Builds von Firefox erscheint erst dann etwas, wenn browser.dom.window.dump.enabled auf true gesetzt ist. Unter Windows braucht man zusätzlich den Startparameter -console, sonst gibt es kein sichtbares stdout.
  • Kein Zeilenumbruch, keine Formatierung: \n muss man selbst anhängen. Objekte werden zu [object Object], daher vorher mit JSON.stringify() umwandeln.
  • Die Ausgabe landet nicht in der DevTools-Konsole und lässt sich dort auch nicht filtern.
  • Die Methode ist für Debugging gedacht. Aufrufe vor der Auslieferung entfernen, damit Protokolle keine sensiblen Daten preisgeben.