Signatur
Beschreibung
Die Methode destroy() gehört zur Summarizer API, einer der „Writing Assistance APIs“ für eingebaute KI-Modelle im Browser (in Chrome z. B. Gemini Nano). Eine mit Summarizer.create() erzeugte Instanz belegt Arbeitsspeicher und gegebenenfalls GPU-Ressourcen, solange sie existiert. Mit destroy() teilen Sie dem Browser ausdrücklich mit, dass Sie die Instanz nicht mehr brauchen. Er kann die Ressourcen dann sofort freigeben und muss nicht auf die Speicherbereinigung warten.
Nach dem Aufruf ist die Instanz dauerhaft unbrauchbar:
- Noch laufende Aufrufe von
summarize(),summarizeStreaming()odermeasureInputUsage()werden abgebrochen. Ihre Promises werden mit einemAbortError(DOMException) abgelehnt, Streams brechen mit einem Fehler ab. - Neue Aufrufe an derselben Instanz schlagen ebenfalls fehl.
- Wenn Sie wieder zusammenfassen wollen, müssen Sie mit
Summarizer.create()eine neue Instanz erzeugen.
Rufen Sie destroy() auf, wenn eine Komponente abgebaut wird (z. B. wenn ein Dialog geschlossen wird oder in einer SPA die Route wechselt), wenn Sie mit anderen Optionen (type, length, format) arbeiten möchten oder wenn Sie Ressourcen auf schwächeren Geräten schonen wollen. Die Methode wirkt genauso, als würden Sie das AbortSignal abbrechen, das Sie an Summarizer.create({ signal }) übergeben haben.
Rückgabewert
Beispiele
Instanz erzeugen, einmal zusammenfassen und freigeben
const fasseZusammen = async (text) => {
if (!('Summarizer' in self)) {
throw new Error('Summarizer API wird nicht unterstützt');
}
const verfuegbarkeit = await Summarizer.availability();
if (verfuegbarkeit === 'unavailable') {
throw new Error('Modell nicht verfügbar');
}
const summarizer = await Summarizer.create({
type: 'tldr',
format: 'plain-text',
length: 'short'
});
try {
return await summarizer.summarize(text);
} finally {
// Ressourcen immer freigeben – auch im Fehlerfall
summarizer.destroy();
}
};
const ergebnis = await fasseZusammen(document.querySelector('article').textContent);
console.log(ergebnis);
Laufende Zusammenfassung per Abbrechen-Button stoppen
const summarizer = await Summarizer.create({ type: 'key-points', format: 'markdown' });
const ausgabe = document.querySelector('#ausgabe');
const abbrechen = document.querySelector('#abbrechen');
abbrechen.addEventListener('click', () => summarizer.destroy(), { once: true });
try {
const stream = summarizer.summarizeStreaming(document.body.innerText);
for await (const teil of stream) {
ausgabe.textContent += teil;
}
} catch (err) {
if (err.name === 'AbortError') {
console.log('Zusammenfassung abgebrochen');
} else {
throw err;
}
}
Instanz nach destroy() nicht wiederverwenden
const summarizer = await Summarizer.create();
summarizer.destroy();
try {
await summarizer.summarize('Ein beliebiger Text …');
} catch (err) {
console.log(err.name);
}
// Richtig: neue Instanz erzeugen
const neu = await Summarizer.create({ length: 'medium' });
console.log(typeof neu.summarize);
neu.destroy();
Aufräumen beim Abbau einer Komponente
class ZusammenfassungsPanel {
#summarizer = null;
async init() {
this.#summarizer = await Summarizer.create({ type: 'teaser' });
}
async render(text) {
return this.#summarizer?.summarize(text);
}
dispose() {
this.#summarizer?.destroy();
this.#summarizer = null;
}
}
const panel = new ZusammenfassungsPanel();
await panel.init();
console.log(await panel.render('Langer Blogartikel …'));
panel.dispose();
// Wichtig · Fallstricke
Kompatibilität: Die Summarizer API ist experimentell. In Chrome ist sie ab Version 138 auf dem Desktop verfügbar, sofern die Hardware-Voraussetzungen für das eingebaute Modell erfüllt sind. Firefox und Safari unterstützen sie derzeit nicht. Prüfen Sie deshalb vorher mit 'Summarizer' in self und Summarizer.availability(), ob die API nutzbar ist.
- Endgültig: Eine zerstörte Instanz lässt sich nicht reaktivieren. Jeder weitere Methodenaufruf wird abgelehnt.
- Fehlerbehandlung: Offene Promises werden mit
AbortErrorabgelehnt. Fangen Sie diesen Fehler gezielt ab, damit ein gewollter Abbruch nicht als Fehler protokolliert wird. - Einzelne Anfrage abbrechen: Wenn Sie nur eine Zusammenfassung abbrechen und die Instanz weiter nutzen wollen, übergeben Sie
summarize(text, { signal })ein eigenesAbortSignal, stattdestroy()aufzurufen. - Mehrfacher Aufruf: Wenn Sie
destroy()mehrmals aufrufen, entsteht kein Fehler. - Performance: Eine neue Instanz zu erzeugen kann spürbar dauern. Zerstören Sie Instanzen also nicht nach jeder Anfrage, wenn Sie kurz danach weitere Texte mit denselben Optionen zusammenfassen wollen.
- Datenschutz: Die Verarbeitung findet lokal statt.
destroy()löscht aber nicht das heruntergeladene Modell, sondern nur die Sitzungsressourcen.