Start · Sprachen · JavaScript · Referenz · Translator.destroy()

Translator.destroy()

Methode

Gibt die Ressourcen einer <code>Translator</code>-Instanz frei und bricht laufende Übersetzungen ab; danach ist die Instanz nicht mehr nutzbar.

seit JavaScript Experimentell: Chrome 138+ (Desktop), Translator-A Kategorie: webapi

Signatur

Translator.prototype.destroy()

Beschreibung

Die Methode destroy() der Translator-Schnittstelle (Translator-API, Teil der eingebauten KI-APIs des Browsers) gibt alle Ressourcen frei, die der Instanz zugewiesen sind, etwa das geladene Übersetzungsmodell im Arbeitsspeicher. Gleichzeitig beendet sie jede weitere Aktivität auf dieser Instanz.

Übersetzungen, die noch laufen, z. B. über translate() oder translateStreaming(), werden abgebrochen. Ihre Promises werden mit einer AbortError-DOMException abgelehnt, Streams brechen mit einem Fehler ab. Auch alle späteren Aufrufe auf dem zerstörten Objekt schlagen fehl.

Rufe destroy() auf, sobald du einen Übersetzer nicht mehr brauchst, etwa wenn der Nutzer die Zielsprache wechselt, eine Komponente entfernt wird oder eine Einzelübersetzung fertig ist. Das gilt besonders auf Geräten mit wenig Speicher, weil das Modell sonst bis zur Speicherbereinigung im Speicher bleibt. Brauchst du wieder einen Übersetzer, erzeugst du mit Translator.create() eine neue Instanz.

Denselben Effekt hat es, das AbortSignal auszulösen, das beim Erzeugen über die Option signal an Translator.create() übergeben wurde.

Rückgabewert

Typ
undefined
Beschreibung
Kein Rückgabewert. Die Freigabe geschieht sofort (synchron).

Beispiele

Einmalige Übersetzung mit anschließender Freigabe

const translateOnce = async (text) => {
  const translator = await Translator.create({
    sourceLanguage: 'en',
    targetLanguage: 'de'
  });
  try {
    return await translator.translate(text);
  } finally {
    // Modell-Ressourcen sofort freigeben
    translator.destroy();
  }
};

console.log(await translateOnce('Good morning!'));
Guten Morgen!

Übersetzer beim Sprachwechsel austauschen

let translator = null;

const setTargetLanguage = async (targetLanguage) => {
  // Alten Übersetzer freigeben, bevor ein neuer geladen wird
  translator?.destroy();
  translator = await Translator.create({
    sourceLanguage: 'de',
    targetLanguage
  });
};

await setTargetLanguage('fr');
console.log(await translator.translate('Hallo Welt'));
await setTargetLanguage('es');
console.log(await translator.translate('Hallo Welt'));
Bonjour le monde Hola mundo

Laufende Übersetzung abbrechen

const translator = await Translator.create({
  sourceLanguage: 'en',
  targetLanguage: 'de'
});

const pending = translator.translate('A very long article text ...');

// z. B. weil der Nutzer auf "Abbrechen" klickt
translator.destroy();

try {
  await pending;
} catch (err) {
  console.log(err.name);
}

// Weitere Aufrufe schlagen ebenfalls fehl
translator.translate('Hello').catch((err) => console.log('Danach:', err.name));
AbortError Danach: InvalidStateError

// Wichtig · Fallstricke

  • Experimentelle API: Die Translator-API ist derzeit nur in Chromium-basierten Desktop-Browsern verfügbar (ab Chrome 138). Firefox und Safari unterstützen sie nicht. Prüfe die Verfügbarkeit mit 'Translator' in self und bei Bedarf mit Translator.availability().
  • Nicht umkehrbar: Eine zerstörte Instanz lässt sich nicht wiederverwenden. Spätere Aufrufe von translate(), translateStreaming() oder measureInputUsage() werden abgelehnt. Die Browser werfen hier nicht einheitlich denselben Fehler, üblich sind InvalidStateError oder AbortError.
  • Laufende Übersetzungen werden mit AbortError abgelehnt. Fange diesen Fehler ab, damit keine unbehandelten Promise-Ablehnungen entstehen.
  • Mehrfaches Aufrufen von destroy() ist harmlos.
  • Ein bereits heruntergeladenes Sprachmodell bleibt im Browser-Cache. destroy() gibt nur die Ressourcen dieser Instanz frei.
  • Nur in sicheren Kontexten (HTTPS) verfügbar. In iframes kann die Nutzung durch die Permissions-Policy translator eingeschränkt sein.