Каков наилучший способ динамически загружать содержимое HTML и вводить его на страницу (когда HTML содержит как теги <script src="..." />
, так и вызовы функций для этих скриптов)?Лучшая практика для ленивой загрузки в JavaScript
Рассмотрим этот подход (для простоты я буду рассматривать JQuery):
<script>
$.ajax({
url: 'http://...',
success: function(html) {
$("body").append(html);
}
});
</script>
Давайте предположим, что возвращаемый HTML содержит что-то, как например:
<script src="some_script.js"></script>
<script>
some_function(); // function defined in some_script.js
</script>
Поскольку some_function()
определен в some_script.js он будет доступен только после того, как some_script.js будет загружен, но (как правило) он будет выполнен до того, как будет загружен файл some_script.js (что приведет к ошибке).
Очевидно, что есть некоторые решения для преодоления этой проблемы, но какова наилучшая практика в этом случае? Должны ли использоваться библиотеки, такие как RequireJS?
Пример, приведенный выше, является результатом использования шаблона, который я использую: у меня есть компонент, который я буду загружать только тогда, когда он будет использоваться (в этот момент я делаю вызов Ajax для извлечения как HTML, так и необходимых скриптов). Тем не менее, может случиться так, что требуется множество сценариев, и их легче записать в виде набора тегов в HTML-шаблоне, а не загружать их через JavaScript (это также предпочтительнее, поскольку URL-адрес сценария может быть сгенерирован внутри приложения, поэтому простой JS сценарий может не знать абсолютный URL-адрес сценария).
Как сложно, поскольку JavaScript может возникнуть из-за того, насколько он динамичен, я мог бы предположить, что вместо того, чтобы загружать скрипты только при выполнении определенных функций, вы используете что-то вроде Require.JS для лучшего контроля при загрузке вещей. – Brad