Signatur
Beschreibung
Die Methode destroy() der Schnittstelle LanguageDetector gehört zur Language Detector API, einer der eingebauten KI-APIs des Browsers. Ein Aufruf gibt die Ressourcen frei, die der Instanz zugewiesen sind, etwa das geladene Sprachmodell im Speicher. Danach ist die Instanz dauerhaft unbrauchbar.
Laufende Aufrufe von detect() oder measureInputUsage() werden abgebrochen, und ihre Promises werden mit einer AbortError-DOMException abgelehnt. Spätere Aufrufe auf der zerstörten Instanz schlagen ebenfalls fehl. Wer wieder Sprachen erkennen will, muss mit LanguageDetector.create() eine neue Instanz anlegen.
Rufen Sie destroy() auf, sobald Sie den Detektor nicht mehr brauchen, zum Beispiel beim Verlassen einer Ansicht, beim Aushängen einer Komponente (etwa React useEffect-Cleanup) oder nach einer einmaligen Stapelverarbeitung. Gerade auf Geräten mit wenig Arbeitsspeicher spart das deutlich Ressourcen, denn ein On-Device-Modell kann viel Speicher belegen.
Denselben Effekt erreichen Sie auch, indem Sie das AbortSignal abbrechen, das Sie über die Option signal an LanguageDetector.create() übergeben haben.
Rückgabewert
undefined).Beispiele
Einmalige Erkennung mit anschließender Freigabe
const erkenneSprache = async (text) => {
if (!('LanguageDetector' in self)) {
throw new Error('Language Detector API nicht verfügbar');
}
const detector = await LanguageDetector.create();
try {
const [top] = await detector.detect(text);
return top.detectedLanguage;
} finally {
// Ressourcen (Modell im Speicher) immer freigeben
detector.destroy();
}
};
console.log(await erkenneSprache('Guten Morgen, wie geht es dir?'));
Laufende Erkennung durch destroy() abbrechen
const detector = await LanguageDetector.create();
const promise = detector.detect('Ceci est un texte assez long …');
detector.destroy();
try {
await promise;
} catch (err) {
console.log(err.name);
}
// Weitere Aufrufe schlagen ebenfalls fehl
try {
await detector.detect('Hello');
} catch (err) {
console.log('Instanz zerstört:', err.name);
}
Aufräumen beim Verlassen einer Ansicht
let detector = null;
const startView = async () => {
detector ??= await LanguageDetector.create({
expectedInputLanguages: ['de', 'en', 'fr']
});
const input = document.querySelector('#kommentar');
input.addEventListener('input', async () => {
const [top] = await detector.detect(input.value);
document.querySelector('#sprache').textContent = top?.detectedLanguage ?? '–';
});
};
const stopView = () => {
detector?.destroy();
detector = null; // Referenz lösen, damit keine zerstörte Instanz weiterverwendet wird
};
await startView();
window.addEventListener('pagehide', stopView);
// Wichtig · Fallstricke
- Nicht umkehrbar: Eine zerstörte Instanz lässt sich nicht wiederverwenden. Alle weiteren Aufrufe von
detect()undmeasureInputUsage()werden mitAbortErrorabgelehnt. Setzen Sie Ihre Referenz deshalb danach aufnull. - Laufende Promises: Offene Erkennungsaufrufe werden abgelehnt. Fangen Sie den
AbortErrorgezielt ab, damit er nicht als unbehandelte Promise-Ablehnung auftaucht. - Alternative: Ein
AbortSignal, das Sie über die Optionsignalancreate()übergeben, zerstört die Instanz beim Abbrechen auf dieselbe Weise. - Mehrfachaufruf: Ein erneuter Aufruf von
destroy()auf einer schon zerstörten Instanz richtet keinen Schaden an. - Kompatibilität: Die API ist experimentell. Sie ist derzeit nur in Chromium-basierten Desktop-Browsern verfügbar (Chrome 138+), setzt einen sicheren Kontext (HTTPS) voraus und kann über eine Permissions Policy eingeschränkt sein. Prüfen Sie die Verfügbarkeit vorher mit
'LanguageDetector' in selfundLanguageDetector.availability().