Я не вижу проблемы с document.write
. Если вы используете его до того, как сработает событие onload
, как вы, вероятно, предполагаете, для построения элементов, например, из структурированных данных, это подходящий инструмент для использования. Нет никакого преимущества в производительности при использовании insertAdjacentHTML
или явном добавлении узлов в DOM после его построения. Я только что проверил три различных способа со старым сценарием, который однажды использовал для планирования входящих вызовов модемов для круглосуточной услуги на банке из 4 модемов.
К моменту завершения этот скрипт создает более 3000 узлов DOM, в основном ячеек таблицы. На 7-летнем ПК, на котором установлен Firefox в Vista, это небольшое упражнение занимает менее 2 секунд, используя document.write
из локального исходного файла размером 12 КБ и три 1-пиксельных GIF-файла, которые повторно используются около 2000 раз. Страница просто появляется полностью сформированной, готовой к обработке событий.
Использование insertAdjacentHTML
не является прямой заменой, поскольку браузер закрывает теги, которые, как требуется сценарию, остаются открытыми, и занимает в два раза больше , чтобы в конечном итоге создать искаженную страницу. Запись всех фрагментов в строку, а затем передача ее в insertAdjacentHTML
занимает еще больше времени, но, по крайней мере, вы получаете страницу, как задумано. Другие варианты (например, ручное восстановление DOM по одному узлу за раз) настолько нелепы, что я даже не собираюсь туда идти.
Иногда document.write
- это то, что нужно использовать. Тот факт, что это один из самых старых методов в JavaScript, - это не точка зрения против него, а точка зрения в его пользу - это высокооптимизированный код, который делает именно то, для чего он предназначался, и делал с самого начала.
Приятно знать, что существуют альтернативные методы после загрузки, но следует понимать, что они предназначены для совершенно другой цели; а именно изменение DOM после его создания и выделения памяти для него. Использование этих методов по своей природе более ресурсоемко, если ваш сценарий предназначен для написания HTML-кода, из которого браузер в первую очередь создает DOM.
Просто напишите это, и пусть браузер и переводчик сделают всю работу. Вот для чего они там.
PS: Я только что протестировал использование параметра onload
в теге body
, и даже на этом этапе документ все еще open
и document.write()
функционирует, как предполагалось. Кроме того, нет никакой ощутимой разницы в производительности между различными методами в последней версии Firefox. Конечно, где-то в аппаратном / программном стеке существует тонна кеширования, но в этом-то и дело - пусть машина выполняет свою работу. Это может иметь значение на дешевом смартфоне, хотя. Ура!