ASP.NET Script объединения - PullRequest
       55

ASP.NET Script объединения

3 голосов
/ 30 ноября 2010

Я заменил asp:ScriptManager элемент управления на ajaxToolkit:ToolkitScriptManager с атрибутом CombineScripts="true".

Теперь, когда я просматриваю источник HTML-страницы, появляется новый тег скрипта:

<script src="/MyPage.aspx?_TSM_HiddenField_=ctl00__pageBody_asScript_tscAjaxScripts_HiddenField&amp;_TSM_CombinedScripts_=%3b%3bAjaxControlToolkit%2c+Version%3d3.0.20820.30277%2c+Culture%3dneutral%2c+PublicKeyToken%3d28f01b0e84b6d53e%3aen-US%3a06e896ab-1f8c-4bcb-9cc4-0200671cba8a%3ae2e86ef9%3a1df13a87%3ac4c00916%3aaf22e781%3a9ea3f0e2%3ac7c04611%3acd120801%3a3858419b%3a96741c43%3a38ec41c0" />

Но есть и старые теги сценариев: WebResource.axd и несколько ScriptResource.axd

Как удалить ссылки WebResource.axd и ScriptResource.axd со страницы?

Ответы [ 4 ]

1 голос
/ 08 апреля 2012

В этом сценарии установка CombineScripts="true" из ajaxToolkit:ToolkitScriptManager означает, что это объединит все файлы скриптов, используемые элементами управления ajax на этой странице, и загрузит объединенный скрипт в приведенной ниже форме:

<script src="/MyPage.aspx?_TSM_HiddenField_=ctl00__pageBody_asScript_tscAjaxScripts_HiddenField&amp;_TSM_CombinedScripts_=%3b%3bAjaxControlToolkit%2c+Version%3d3.0.20820.30277%2c+Culture%3dneutral%2c+PublicKeyToken%3d28f01b0e84b6d53e%3aen-US%3a06e896ab-1f8c-4bcb-9cc4-0200671cba8a%3ae2e86ef9%3a1df13a87%3ac4c00916%3aaf22e781%3a9ea3f0e2%3ac7c04611%3acd120801%3a3858419b%3a96741c43%3a38ec41c0" />

Но в ScriptResource.axd файлах он будет загружать файлы библиотеки Microsoft Ajax, такие как - MicrosoftAjax.debug.js и MicrosoftAjaxWebForms.debug.js в отдельном запросе.Вы можете сделать один запрос для Microsoft Ajax, комбинируя их.

Вы можете явно использовать тег <CompositeScript> и указать MicrosoftAjax.js, Webform.js и MicrosoftAjaxWebForms.debug.js, чтобы объединить их в одном запросе.Таким образом, вы увидите только два запроса на JS, один для комбинированного скрипта элементов управления Ajax на этой странице, а другой для комбинированного скрипта MicrosoftAjax js

1 голос
/ 13 января 2011

Некоторые компоненты AjaxControlToolkit не поддерживают комбинирование скриптов.From: http://blogs.msdn.com/b/delay/archive/2007/06/11/script-combining-made-easy-overview-of-the-ajax-control-toolkit-s-toolkitscriptmanager.aspx

В скрипте Slider SliderBehavior.js используется довольно неясная функция, включаемая свойством PerformSubstitution атрибута WebResource, которая позволяет внедрять теги <% = WebResource / ScriptResource%> в JSфайлы и получить разрешение до отправки сценария в браузер.Это поведение в настоящее время не поддерживается ToolkitScriptManager

Нет волшебного флага, который можно включить, чтобы полностью избавиться от этого файла.Преимущество использования ToolKitScriptManager заключается в том, что оно уменьшает количество ресурсов, необходимых вашей странице, что ведет к повышению производительности.Файлы Webresource.axd и Scriptresouce.axd используются всем приложением, а не только AjaxControlToolkit.Я бы посоветовал использовать такую ​​программу, как Fiddler, чтобы увидеть, какие ресурсы Scriptresource.axd и Webresource.axd на самом деле используют и работают оттуда.

0 голосов
/ 13 января 2011

Я написал простой обработчик для этого, который, кажется, работает нормально, но он для ASP.NET MVC, но не должно быть так сложно заставить его работать и для веб-форм. Я положил его на GitHub: https://github.com/mastoj/SimpleCompression.

Хорошие части моего решения:

  • Вам не нужны две копии вашего сценария; то есть уменьшенная версия с оригиналом.
  • Вы можете изменить компрессор, если хотите.
  • Файлы сжимаются на лету и помещаются в кэш на веб-сервере и клиенте (вы можете обновить настройку версии, чтобы клиент снова загрузил скрипт).
  • Файлы объединяются на лету.
  • Объединенный и сжатый файл имеет файловую зависимость от исходных файлов, поэтому они повторно сжимаются и объединяются, если по какой-то причине вам нужно что-то проверить в prod (но не делайте этого:)).
  • И он прост в использовании, по крайней мере для MVC.
0 голосов
/ 05 января 2011

Если вы используете .NET 4.0, вы можете использовать атрибут enablecdn в менеджере сценариев, и он обслуживает необходимый код JavaScript из CDN Microsoft.

Если нет, вы все равно можете объединить их, как Скотт Хансельман описывает здесь . Вы также можете пойти еще дальше и использовать модуль / фильтр HTTP для объединения этих сценариев (WebResource.axd, ScriptResource.axd) в 2 или 3, однако для этого необходимы глубокие знания основы ASP.NET; Или же вы можете прервать вызовы методов Microsoft Ajax в приложении (это из-за этого причудливого механизма, который UpdatePanel использует для обновления части страницы и т. Д.) *

...