Ответ 1
Я столкнулся с этим, исследуя то же самое. После некоторого тестирования я пришел к выводу, что да, существует разница major между этими двумя методами. В современных браузерах это не столько время загрузки, сколько последовательность, в которой оцениваются сценарии. Например, если у вас есть следующее:
someScript.js
console.log('2');
index1.htm
<script>
console.log('1');
var script = document.createElement('script');
script.src = 'someScript.js';
document.write(script.outerHTML);
</script>
<script>
console.log('3');
</script>
index2.htm
<script>
console.log('1');
var script = document.createElement('script');
script.src = 'someScript.js';
document.body.appendChild(script);
</script>
<script>
console.log('3');
</script>
Запуск index1.htm
на консоли даст вам последовательность "1, 2, 3". Запуск index2.html даст вам последовательность "1, 3, 2". Если запрашиваются внешние скрипты, они будут загружаться впереди динамически запрошенных someScript
для обоих методов.
Важно отметить порядок выполнения. Как отметил Джек в комментарии, использование document.write
неодобрительно. Это верно, если ваши сценарии не расположены в конце документа html, так как это блокирует рендеринг вашей веб-страницы. Я не уверен, если это все еще так, если ваши сценарии находятся внизу.
Тем не менее, вы все равно можете использовать функцию обратного вызова для обеспечения порядка выполнения javascript.