Диспетчер сценариев в веб-формах ASP.NET 4.5 — что он делает? Как вы используете с ним связывание и минификацию?

Я создал новый проект веб-форм ASP.NET 4.5.1.

На главной странице есть диспетчер сценариев, и в нем перечислено большое количество сценариев, включая ссылку на jquery и начальную загрузку:

<asp:ScriptManager runat="server">
    <Scripts>
        <%--To learn more about bundling scripts in ScriptManager see http://go.microsoft.com/fwlink/?LinkID=301884 --%>
        <%--Framework Scripts--%>
        <asp:ScriptReference Name="MsAjaxBundle" />
        <asp:ScriptReference Name="jquery" />
        <asp:ScriptReference Name="bootstrap" />
        <asp:ScriptReference Name="respond" />
        <asp:ScriptReference Name="WebForms.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebForms.js" />
        <asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebUIValidation.js" />
        <asp:ScriptReference Name="MenuStandards.js" Assembly="System.Web" Path="~/Scripts/WebForms/MenuStandards.js" />
        <asp:ScriptReference Name="GridView.js" Assembly="System.Web" Path="~/Scripts/WebForms/GridView.js" />
        <asp:ScriptReference Name="DetailsView.js" Assembly="System.Web" Path="~/Scripts/WebForms/DetailsView.js" />
        <asp:ScriptReference Name="TreeView.js" Assembly="System.Web" Path="~/Scripts/WebForms/TreeView.js" />
        <asp:ScriptReference Name="WebParts.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebParts.js" />
        <asp:ScriptReference Name="Focus.js" Assembly="System.Web" Path="~/Scripts/WebForms/Focus.js" />
        <asp:ScriptReference Name="WebFormsBundle" />
        <%--Site Scripts--%>
    </Scripts>
</asp:ScriptManager>

Затем эти сценарии включаются в страницу.

Я всегда думал, что диспетчер сценариев предназначен только для сценариев, связанных с AJAX, но теперь он включает, по-видимому, все сценарии js. Также кажется, что он конфликтует с пакетированием и минификацией, поскольку включает скрипты, а не ссылки на пакеты.

Я искал в Google, но не смог найти, какой диспетчер сценариев на самом деле не имеет отношения к AJAX.

ОБНОВИТЬ

Я нашел эту ссылку на свойство scripts диспетчера сценариев, хотя она не объясняет преимущества/причины перечисления в нем всех сценариев страниц: http://msdn.microsoft.com/en-us/библиотека/system.web.ui.scriptmanager.scripts(v=vs.110).aspx


person niico    schedule 29.12.2013    source источник
comment
ASP.NET WebForms предшествует современному пакетированию и AJAX. Первоначально ScriptManager использовался для обеспечения того, чтобы сценарии, необходимые для более старых частей WebForms, таких как элемент управления Calendar и WebParts, отображались на странице. Обратите внимание, что, вообще говоря, WebForms несовместимы с современной веб-разработкой, для этого используйте ASP.NET MVC, который дает вам больше контроля над сгенерированной разметкой.   -  person Dai    schedule 29.12.2013
comment
Я использовал MVC раньше, хотя мне просто нужно что-то быстро сделать без всей сложности MVC. Веб-формы кажутся намного лучше в этом, чем MVC.   -  person niico    schedule 29.12.2013
comment
Менеджер сценариев был обновлен в asp.net 4.5, а в веб-формы были добавлены связывание и минификация. Это обновленные функции - и они должны работать вместе, нет?   -  person niico    schedule 29.12.2013


Ответы (2)


Эти две функции действительно работают вместе, поскольку объединение сценариев и управление сценариями — это две отдельные задачи. Объединение, очевидно, является более простым из двух, поскольку оно просто относится к технике объединения нескольких файлов сценариев в один для повышения производительности за счет уменьшения количества необходимых запросов к серверу. Но есть вполне веские причины для того, чтобы ScriptManager работал с вашими связанными файлами JavaScript (и сценариями, которые их составляют), а также с вашими несвязанными файлами. Например, вы можете использовать ScriptManager для переключения между загрузкой не минимизированных скриптов в режиме отладки и минимизированных скриптов в режиме выпуска. Вы также можете указать LoadSuccessExpression, который будет использоваться для проверки правильности загрузки скрипта, а если это не так, он может быть загружен из CDN на основе свойства CdnPath. Они должны быть указаны в ScriptResourceDefinition, возможно, в App_Code/BundleConfig.cs или в Global.asax, но вы все равно хотите добавить элементы ScriptReference в ScriptManager.

person regularmike    schedule 16.01.2014
comment
Спасибо. Bundling + Minification автоматически минифицирует только тогда, когда не находится в режиме отладки. Это не кажется таким полезным? - person niico; 17.01.2014
comment
Но можете ли вы использовать CDN только с пакетированием и минификацией, как CdnPath, CdnDebugPath и CdnSupportsSecureConnection? В любом случае, я не говорю, что это полезно, просто у него есть некоторые функции, которые могут захотеть использовать некоторые разработчики. Я думаю, что настоящий ответ заключается в том, что им не нравится что-то выбрасывать, поэтому вместо этого они попытаются улучшить это, даже если может быть более новый, более простой/чистый способ сделать это. Вот запись в блоге об улучшениях ScriptManager в ASP.NET 4.5: go.microsoft.com/fwlink/ ?LinkID=301884 - person regularmike; 17.01.2014
comment
спасибо - так что не стоит его использовать, если только для этого не требуется что-то конкретное - например, AJAX - я думаю ?! - person niico; 18.01.2014
comment
Да, или если вам не нужен более точный контроль над добавлением или удалением скриптов, а также над их источниками. - person regularmike; 22.01.2014

Оптимизация 1.1.0.0 не удаляет повторяющиеся скрипты, зарегистрированные в ScriptManager.

В компоненте Microsoft.AspNet.Web.Optimization версии 1.1.0.0 (stable) есть ошибка (в версии 1.0.0.0 этой ошибки нет. Разница в поведении метода GetBundleContents объекта BundleResolver. Если я вызову это метод в версии 1.0.0.0 и 1.1.0.0 я получаю разные результаты Версия 1.1.0.0 возвращает неверный путь к скрипту без символа ~ и поэтому этот путь не соответствует пути, указанному в ScriptReference Path.

http://aspnetoptimization.codeplex.com/workitem/94

person Cyrus    schedule 06.01.2014
comment
Спасибо - не уверен, что это действительно отвечает на мой вопрос? - person niico; 06.01.2014