EMZETT.
Login

defer: Skripte in HTML und das Schlüsselwort in Go

Kurz: In HTML sorgt <script defer> dafür, dass ein Skript parallel geladen, aber erst nach dem Aufbau der Seite ausgeführt wird. In Go verschiebt defer einen Funktionsaufruf auf den Moment, in dem die umgebende Funktion endet.

Genauer: Beide Bedeutungen haben mit „später ausführen“ zu tun. Das HTML-Attribut verbessert die Ladezeit, das Go-Schlüsselwort sorgt für Aufräumen.

Im Detail

HTML

  • Normal: <script src="a.js"> stoppt das Parsen der Seite, lädt und führt das Skript sofort aus. Das verzögert die Anzeige.
  • defer: Lädt parallel, führt nach dem fertigen HTML-Parsen aus, in der Reihenfolge im Dokument, vor dem Ereignis DOMContentLoaded. Nur für externe Skripte.
  • async: Lädt parallel, führt sofort nach dem Laden aus, Reihenfolge nicht garantiert. Gut für unabhängige Skripte wie Statistik.
  • type=“module”: Module verhalten sich standardmäßig wie defer.
  • Faustregel: Eigene Skripte mit defer, unabhängige Dritt-Skripte mit async.

Go

f, _ := os.Open("datei.txt")
defer f.Close()   // läuft, wenn die Funktion endet
  • Mehrere defer-Aufrufe laufen in umgekehrter Reihenfolge (LIFO).
  • Typisch für Dateien schließen, Mutex entsperren.
  • Argumente werden beim defer-Aufruf ausgewertet, nicht erst am Ende.
  • Ähnlich: finally (try/catch/finally) und in Zig siehe fehler-und-defer.

Siehe auch: Events und Ereignisse, Funktion