Поиск лучшего способа для Javascript связывания и загрузки
Я использую asp.net mvc 5. Я сделал различные пакеты на сервере, как показано ниже, поскольку каждая страница требует различного набора файлов.
bundles.Add(new Bundle("~/scripts/external/4")
.Include(
"~/Static/Scripts/External/jquery-2.1.3.min.js",
"~/Static/Scripts/External/jquery-ui.min.js",
"~/Static/Scripts/External/bootstrap.min.js",
//and 13 more files
));
bundles.Add(new Bundle("~/scripts/admin/external/1")
.Include(
"~/Static/Scripts/External/jquery-2.1.3.min.js",
"~/Static/Scripts/three.min.r76.js",
"~/Static/Scripts/app.min.js",
//and 15 more files
));
Как вы можете видеть, некоторые js-файлы повторяются (иногда это 4,5 больших файла), так как на них нельзя ссылаться.
Я использую lab.js на стороне клиента для загрузки этих пакетов.
Requirejs здесь работать не будет, так как проблема с пакетами. Какой ваш рекомендуемый подход здесь для объединения файлов и загрузки их без блокировки?
2 ответа
Я думаю, что лучше всего загрузить все библиотеки в один список и получить различное значение:
List<string> bundlesList = new List<string>();
bundlesList.Add("~/Static/Scripts/External/jquery-2.1.3.min.js");
bundlesList.Add("~/Static/Scripts/External/jquery-2.1.3.min.js");
bundlesList.Add("~/Static/Scripts/External/jquery-ui.min.js");
bundlesList.Add("~/Static/Scripts/External/bootstrap.min.js");
bundlesList.Add("~/Static/Scripts/External/bootstrap.min.js");
IEnumerable<string> ids = (from x in bundlesList select x).Distinct();
bundles.Add(new ScriptBundle("~/bundles").Include(ids.ToArray()));
Надеюсь это сработает:)
Я думаю, что многое зависит от структуры приложения. В чем причина наличия множества связок? Это не должно быть проблемой, если вы загружаете скрипты на страницу, которая не используется.
Обычно я бы сгруппировал большинство скриптов вендора (например, jQuery в вашем примере), так как они необходимы на большинстве страниц сайта. Затем, если есть раздел сайта, которому нужна другая группа скриптов, я бы сгруппировал их вместе. Таким образом, они выбираются один раз, а затем кэшируются и извлекаются из кэша. Наличие множества разных пакетов означает, что файлы будут уникальными и, следовательно, не будут кэшироваться. Я думаю, что лучше иметь несколько больших файлов, чем много маленьких.
В качестве примечания, я не увлекаюсь комплектацией ASP.NET и использую для создания пакетов такой инструмент запуска, как gulp или grunt, но такую же настройку можно выполнить и в ASP MVC.
Но HTTP/2 может измениться: почему оптимизация пакетов больше не является проблемой в HTTP/2