Как совместить MVC-связывание и асинхронную загрузку JS-файлов
У меня есть страница MVC, которая имеет ряд зависимостей JavaScript, давайте назовем их зависимыми-A и зависимыми-B, где зависимые-B зависят от зависимых-A. Оба они включены в различные пакеты в MVC, который включен на страницу. После запуска этого инструмента Google PageSeded Speed он предложил, чтобы мы включили JS асинхронно, чтобы предотвратить блокировку рендера.
Из-за зависимостей их нужно загружать в определенном порядке, поэтому я рассмотрел использование LABJS для их асинхронной загрузки в правильном порядке, чтобы предотвратить блокировку рендеринга.
Это работает путем включения URL-адреса комплекта, но я теряю возможность иметь локальные отладочные версии файлов JS при разработке.
Кто-нибудь может предложить способ обойти это, чтобы мы могли загружать файлы JS асинхронно, но для того, чтобы поддерживать и поддерживать версии отладки локально?
Вот что я сейчас использую.
<script src="~/Scripts/LAB.min.js"></script>
<script>
$LAB
.script("@Scripts.Url("~/bundles/jquery")").wait()
.script("/scripts/fileone.js").wait()
.script("/scripts/filetwo.js").wait(function() {
FunctionInFileTwo();
});
</script>
Исходный код страницы с приведенным выше кодом выглядит следующим образом.
<script src="/Scripts/LAB.min.js"></script>
<script>
$LAB
.script("/bundles/jquery?v=GnU3whLS74nHNYUsUJjcWJKdXvKBNbFqBrkQVKSNlKc1").wait()
.script("/scripts/scripts/fileone.js").wait()
.script("/scripts/scripts/filetwo.js").wait(function() {
FunctionInFileTwo();
});
</script>
1 ответ
Не похоже, что для этого есть чистый API.
Scripts.Render("~/bundles/yourbundle")
возвращает IHtmlString
из необходимых тегов скрипта - вы можете создать метод, который очищает скрипт от этой строки и генерирует правильный $LAB
вызовы.
Scripts.Manager.RenderExplicit(tagFormat, paths)
Подходит ближе, где вы просто передали бы строку лучшего формата в качестве первого аргумента, но читая код, выглядело так, как будто он мог бы начать включать в середине списка буквально отформатированные теги сценария.