【问题标题】:ASP.NET Script combiningASP.NET 脚本组合
【发布时间】:2010-11-30 13:25:13
【问题描述】:

我已将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 链接?

【问题讨论】:

  • 你听从这里的建议了吗? stackoverflow.com/questions/626659/…
  • 我刚读过但没有答案如何删除 WebResource.axd 和 ScriptResource.axd 链接
  • @ihorko 尝试不在您的代码中调用 RegisterClientScriptResource。
  • hm,只搜索我所有的文件,并没有在我的代码中找到RegisterClientScriptResource。谢谢
  • 嗯,微软一如既往的愚蠢解决方案。因此,当 CombineScripts 属性设置为 false 时,我的页面有 14 个 ScriptResource.axd 文件,但如果它设置为“true”,那么我有 5 个链接(1 - WebResource、3 - ScriptResource、1 - script src="/MyPage.aspx?_TSM_HiddenField ...) !但我只需要一个链接(将所有脚本合并为一个)。使用 ToolkitScriptManager 有什么好处??????????

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


【解决方案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

滑块的 SliderBehavior.js 脚本 使用了一个相当晦涩的功能 通过 PerformSubstitution 属性 允许的 WebResource 属性 标签 嵌入到 JS 文件中并获取 在脚本发送到之前解决 浏览器。这种行为不是 目前支持 工具包脚本管理器

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

【讨论】:

    【解决方案2】:

    在这种情况下,通过设置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 发出单个请求。

    您可以显式使用&lt;CompositeScript&gt; 标记并指定MicrosoftAjax.jsWebform.jsMicrosoftAjaxWebForms.debug.js 将它们组合在一个请求中。 这样你只会看到两个对 JS 的请求,一个是针对该页面上的 Ajax 控件的组合脚本,另一个是针对 MicrosoftAjax js 的组合脚本

    【讨论】:

      【解决方案3】:

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

      我的解决方案的优点是:

      • 您不需要两份脚本;即原始版本的缩小版。
      • 您可以根据需要更改压缩引擎。
      • 文件被即时压缩并放入 webb 服务器和客户端的缓存中(您可以更新版本设置以强制客户端重新下载脚本)。
      • 文件即时合并。
      • 合并和压缩的文件对原始文件具有文件依赖性,因此如果您出于某种原因需要在 prod 中测试某些内容(但不要这样做 :)),它们会被重新压缩和合并。
      • 而且它易于使用,至少对于 MVC 而言。

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • sry...我不是要写评论,我正要写答案:)
        猜你喜欢
        • 1970-01-01
        • 2010-10-12
        • 1970-01-01
        • 1970-01-01
        • 2016-11-25
        • 1970-01-01
        • 2011-06-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多