Ich sehe das Problem nicht mit document.write
. Wenn Sie es verwenden, bevor das onload
Ereignis ausgelöst wird, wie Sie es vermutlich sind, um beispielsweise Elemente aus strukturierten Daten zu erstellen, ist es das geeignete Werkzeug. Die Verwendung bietet keinen LeistungsvorteilinsertAdjacentHTML
oder explizite Hinzufügung von Knoten zum DOM nach dessen Erstellung . Ich habe es gerade auf drei verschiedene Arten mit einem alten Skript getestet, mit dem ich einmal eingehende Modemanrufe für einen 24/7-Dienst auf einer Bank von 4 Modems geplant habe.
Bis es fertig ist, erstellt dieses Skript über 3000 DOM-Knoten, hauptsächlich Tabellenzellen. Auf einem 7 Jahre alten PC, auf dem Firefox unter Vista ausgeführt wird, dauert diese kleine Übung weniger als 2 Sekunden, document.write
wenn eine lokale 12-KB-Quelldatei und drei 1px-GIFs verwendet werden, die etwa 2000 Mal wiederverwendet werden. Die Seite wird nur vollständig erstellt und ist bereit, Ereignisse zu verarbeiten.
Die Verwendung insertAdjacentHTML
ist kein direkter Ersatz, da der Browser Tags schließt, für die das Skript geöffnet bleiben muss, und doppelt so lange dauert, bis eine verstümmelte Seite erstellt wird. Schreiben Sie alle Teile in eine Zeichenfolge und übergeben Sie sie dann aninsertAdjacentHTML
dauert noch länger, aber zumindest erhalten Sie die Seite wie geplant. Andere Optionen (wie das manuelle Neuerstellen des DOM für einen Knoten) sind so lächerlich, dass ich nicht einmal dorthin gehe.
Manchmal document.write
ist das Ding zu benutzen. Die Tatsache, dass es sich um eine der ältesten Methoden in JavaScript handelt, spricht nicht dagegen, sondern dafür - es handelt sich um hochoptimierten Code, der genau das tut, was er beabsichtigt hat und seit seiner Einführung getan hat.
Es ist schön zu wissen, dass es alternative Nachlademethoden gibt, aber es muss verstanden werden, dass diese für einen ganz anderen Zweck bestimmt sind. Ändern des DOM, nachdem es erstellt und ihm Speicher zugewiesen wurde. Die Verwendung dieser Methoden ist von Natur aus ressourcenintensiver, wenn Ihr Skript den HTML-Code schreiben soll, aus dem der Browser das DOM erstellt.
Schreiben Sie es einfach und lassen Sie den Browser und den Dolmetscher die Arbeit erledigen. Dafür sind sie da.
PS: Ich habe gerade mit einem onload
Parameter im body
Tag getestet und selbst zu diesem Zeitpunkt ist das Dokument noch vorhanden open
und document.write()
funktioniert wie beabsichtigt. Außerdem ist in der neuesten Version von Firefox kein Leistungsunterschied zwischen den verschiedenen Methoden erkennbar. Natürlich gibt es eine Menge Caching, das wahrscheinlich irgendwo im Hardware- / Software-Stack stattfindet, aber genau darum geht es - lassen Sie die Maschine die Arbeit erledigen. Auf einem billigen Smartphone kann dies jedoch einen Unterschied machen. Prost!
print()
beschließt zuwindow.print()
.