Навіщо використовувати @ Scripts.Render ("~ / bundles / jquery")


217

Як

@Scripts.Render("~/bundles/jquery")

відрізняються від просто посилання на скрипт із html, як це

<script src="~/bundles/jquery.js" type="text/javascript"></script>

Чи є якісь підвищення продуктивності?


Як додати type = “text / css” - stackoverflow.com/questions/15662096/…
LCJ

Відповіді:


288

Пакет - це стиснення декількох файлів JavaScript або таблиць стилів без форматування (також згаданих як мінімізованих) в один файл для збереження пропускної здатності та кількості запитів для завантаження сторінки.

Як приклад, ви можете створити свій власний пакет:

bundles.Add(New ScriptBundle("~/bundles/mybundle").Include(
            "~/Resources/Core/Javascripts/jquery-1.7.1.min.js",
            "~/Resources/Core/Javascripts/jquery-ui-1.8.16.min.js",
            "~/Resources/Core/Javascripts/jquery.validate.min.js",
            "~/Resources/Core/Javascripts/jquery.validate.unobtrusive.min.js",
            "~/Resources/Core/Javascripts/jquery.unobtrusive-ajax.min.js",
            "~/Resources/Core/Javascripts/jquery-ui-timepicker-addon.js"))

І візуалізуйте так:

@Scripts.Render("~/bundles/mybundle")

Ще одна перевага в @Scripts.Render("~/bundles/mybundle")порівнянні з нативним <script src="~/bundles/mybundle" />полягає в тому, що @Scripts.Render()буде дотримано web.configналаштування налагодження:

  <system.web>
    <compilation debug="true|false" />

У debug="true"такому випадку він замість цього видаватиме окремі теги скриптів для кожного вихідного сценарію без будь-яких змін.

Для таблиць стилів вам доведеться використовувати StyleBundle та @ Styles.Render ().

Замість завантаження кожного сценарію чи стилю за допомогою одного запиту (із тегами скрипту чи посилання) всі файли стискаються в один файл JavaScript або таблиці стилів та завантажуються разом.


9
Цікаво: чи є файл, який зберігається десь для цього пакета, чи він просто існує в пам'яті?
Елліот

15
Він зберігається в кеші.
NicoJuicy

4
Він також може бути встановлений для автоматичного використання CDN та резервного копіювання до локальних сценаріїв, якщо CDN недоступний. Це досить гладко.
Дан Еспарза

39
Для цього є додаткова вигода. Під час налагодження Scripts.Render видасть кожен файл нерозв’язаним, що робить локальний розвиток набагато меншим болем, але в живій обстановці це видасть пакетний / мінімізований результат, що може призвести до підвищення продуктивності, як описано вище, але без зміни будь-якого коду.
Сеткран

9
У "базовому" шаблоні MVC4 (Visual Studio) пакети готуються у "BundleConfig.cs" (папка App_Start).
Аполо

51

Ви також можете використовувати:

@Scripts.RenderFormat("<script type=\"text/javascript\" src=\"{0}\"></script>", "~/bundles/mybundle")

Щоб вказати формат виводу у сценарії, коли вам потрібно використовувати Charset, Type тощо.


3
Також дуже корисний для завантаження модулів Requjs
Phil

13
... або додати asyncатрибут.
Крістоф Фінк

7
@Scripts.RenderFormat("<script type=\"text/javascript\" async src=\"{0}\"></script>", "~/bundles/mybundle")
Роберт Маккі

1
... або додати атрибут crossorigin = "анонімний"
Олександр Свіокло
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.