ASP.NET脚本组合

时间:2010-11-30 13:25:13

标签: javascript asp.net webresource.axd scriptresource.axd

我已将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.axdScriptResource.axd个链接?

4 个答案:

答案 0 :(得分:1)

AjaxControlToolkit中有一些组件不支持组合脚本。 来自: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属性   &lt;%= WebResource / ScriptResource%&gt;标签   嵌入JS文件并获取   在脚本发送到之前已解决   浏览器。这种行为不是   目前支持   ToolkitScriptManager

没有神奇的旗帜你可以打开以完全摆脱这些文件。使用ToolKitScriptManager的优点是它可以减少页面所需的资源数量,从而提高性能。 Webresource.axd和Scriptresouce.axd文件由整个应用程序使用,而不仅仅是AjaxControlToolkit。我的建议是使用像Fiddler这样的程序来查看Scriptresource.axd和Webresource.axd实际上从哪里获取和工作的资源。

答案 1 :(得分:1)

在这种情况下,通过设置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.jsMicrosoftAjaxWebForms.debug.js。 您可以通过梳理它们来为Microsoft Ajax发出单个请求。

您可以明确使用<CompositeScript>代码,并指定MicrosoftAjax.jsWebform.jsMicrosoftAjaxWebForms.debug.js将它们合并到一个请求中。 通过这种方式,您将只看到两个JS请求,一个用于该页面上的Ajax控件的组合脚本,另一个用于组合脚本MicrosoftAjax js

答案 2 :(得分:0)

如果您使用的是.NET 4.0,则可以使用scriptmanager上的enablecdn属性,它可以从Microsoft的CDN提供所需的JavaScript代码。

如果没有,您仍然可以将它们合并为Scott Hanselman describes here。您还可以更进一步,使用HTTP模块/过滤器将这些脚本(WebResource.axd,ScriptResource.axd)组合成2或3个脚本,但是,它需要广泛的ASP.NET基础知识;或者,您可以在应用程序中打破Microsoft Ajax方法调用(这是因为UpdatePanel用于更新页面的一部分等的奇特机制......)

答案 3 :(得分:0)

我为此编写了一个简单的处理程序,似乎工作得很好,但它适用于ASP.NET MVC,但它也不应该很难使其适用于webforms。我把它放在github上:https://github.com/mastoj/SimpleCompression

我的解决方案的好处是:

  • 您不需要两份脚本;也就是说,原始版本的缩小版本。
  • 如果需要,您可以更改压缩引擎。
  • 文件会动态压缩并放入webb服务器和客户端的缓存中(您可以更新版本设置以强制客户端再次下载脚本)。
  • 文件即时组合。
  • 组合压缩文件与原始文件具有文件相关性,因此如果您出于某种原因需要在prod中测试某些东西(但不要这样做:),它们会被重新压缩和组合。)
  • 至少对于MVC来说它很容易使用。