如何使用 Telerik ASP.NET 与 AJAX Control Toolkit 组合脚本
How to Combine Scripts using Telerik ASP.NET with AJAX Control Toolkit
我在一个公司网站上工作,其中 AJAX 控件与 Telerik ASP.NET 控件一起使用。虽然这在功能方面没有真正的问题,但整体性能存在问题。
为了防止 AJAX 工具包脚本管理器对其支持的每个组件上的所有脚本进行多次调用,我们将 CombineScripts 标志设置为 true,将 EnablePartialRendering 标志设置为 true 并指定一个 URL 用于 CombineScriptsHandlerUrl。
这非常有效,因为为 AJAX 组件生成的脚本以及相应的往返次数显着减少。但是,我们发现 Telerik Controls 对此设置存在问题。更具体地针对这个特定站点(TelerikHTMLChart 控件)
经过进一步研究,确认必须将 CombineScripts 标志设置为 false 才能使 Telerik 控件以这种身份与 AJAX 控件一起工作。
显然,当您的目标是增加网站的整体响应时间时,这不是最理想的选择。
有没有遇到此问题的人能够获得合理的解决方案,使 AJAX 和 Telerik ASP.NET 组件能够愉快地一起玩而不会降低性能?
我不知道有什么方法可以做到这一点。 AjaxControlToolkit 破坏了与 <asp:ScriptManager>
的兼容性。 Telerik 控件是基于 vanilla MS AJAX 框架构建的,因此由于 2013 年冬季 AjaxControlToolkit 的更改,这两个套件之间没有兼容性。
因此,要考虑的想法是:
删除 AjaxControlToolkit 控件以支持 Telerik 控件
面对比您希望的更多的请求
尝试从他们的 CDN 下载 Telerik 控件的组合脚本并在您的页面中引用它,然后为它们禁用嵌入式脚本。您可以使用 RadSCriptManager 启用它,启用它的 CDN 并在 web.config
中将 Telerik.ScriptManager.TelerikCdn.CombinedScript appSettings 键设置为 true
如果您只需要 Telerik 的 HtmlChart,请尝试 Kendo 图表小部件。它们是相同的,但是 Kendo widged 是纯客户端代码,与 MS AJAX、AjaxControlToolkit 或 ASP.NET [=36= 的 UI 无关]套房
感谢 rdmptn 的回复,但在等待某人以适当且可接受的解决方案进行回复的过程中;我设法找出问题的解决方案。因此,我将这篇文章发布给可能也对性能有顾虑并需要可行的解决方案的其他人。
Rdmptn 已经很好地提出了这个问题的解决方法。其实问题的原因其实已经说过了。但是,还有另一种方法可以通过将 CombineScripts 标志设置为 true 来实现 AJAX ToolkitScriptManager,以减少过多的往返并以高效的方式使用 Telerik 控件。为了找到这个解决方案,我不得不进行一些实验,所以也许这会对其他人有所帮助。 Telerik 支持人员无法提供此解决方案,因此我也将其提供给他们。
首先,您必须确定特定场景所需的 Telerik 脚本引用。您可以从以下 link 获得:http://www.telerik.com/help/aspnet-ajax/introduction-disabling-embedded-resources.html
然后在您的网站上找到您需要的 Telerik 控件。您会注意到此 link 中提供的选项重申了 rdmptn 提供的第三个要点。但是,我描述的方法不需要对 web.config 进行任何修改,也不使用 CDN 引用。我们决定退出 CDN 参考是为了避免因依赖其他站点而进一步降低性能。
确定所需的控件后,将提供的 link 中的 ScriptReferences 复制并粘贴到 AJAX ToolkitScript 管理器中的标记中。在我的例子中,生成的代码如下所示:
<ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" ScriptMode="Release" runat="server" EnablePartialRendering="true"
CombineScripts="true" CombineScriptsHandlerUrl="~/AjaxScriptMergeHandler.ashx">
<CompositeScript>
<Scripts>
<asp:ScriptReference Path="~/Scripts/Common/Core.js" />
<asp:ScriptReference Path="~/Scripts/Common/jQuery.js" />
<asp:ScriptReference Path="~/Scripts/Common/jQueryPlugins.js" />
<asp:ScriptReference Path="~/Scripts/Common/HTML5UI/html5/core.js" />
<asp:ScriptReference Path="~/Scripts/Common/HTML5UI/html5/dataviz/core.js" />
<asp:ScriptReference Path="~/Scripts/Common/HTML5UI/Data/html5/data.js" />
<asp:ScriptReference Path="~/Scripts/Common/HTML5UI/html5/userevents.js" />
<asp:ScriptReference Path="~/Scripts/Common/HTML5UI/DataViz/html5/dataviz/themes.js" />
<asp:ScriptReference Path="~/Scripts/Common/HTML5UI/DataViz/html5/dataviz/chart.js" />
<asp:ScriptReference Path="~/Scripts/Common/HTML5UI/DataViz/html5/dataviz/svg.js" />
<asp:ScriptReference Path="~/Scripts/Common/HTML5UI/DataViz/html5/dataviz/vml.js" />
<asp:ScriptReference Path="~/Scripts/HtmlChart/RadHtmlChart.js" />
</Scripts>
</CompositeScript>
</ajaxToolkit:ToolkitScriptManager>
此方法允许 AJAX ToolScriptManager 显式减少支持您在站点(或网页)中实际使用的组件所需的脚本数量,将 CombineScripts 标记设置为 true,同时仅加载这些脚本在您的应用程序中需要为 Telerik 控件加载的内容。
不再像对已指出的不兼容问题的常见响应那样设置为 false;同时仅加载所需的脚本以支持您的 Telerik 控件。瞧!
希望这些信息对其他人有所帮助,并为他们节省我们浪费在解决问题上的时间。
再次感谢 rdmptn 发布您的建议!
我在一个公司网站上工作,其中 AJAX 控件与 Telerik ASP.NET 控件一起使用。虽然这在功能方面没有真正的问题,但整体性能存在问题。
为了防止 AJAX 工具包脚本管理器对其支持的每个组件上的所有脚本进行多次调用,我们将 CombineScripts 标志设置为 true,将 EnablePartialRendering 标志设置为 true 并指定一个 URL 用于 CombineScriptsHandlerUrl。
这非常有效,因为为 AJAX 组件生成的脚本以及相应的往返次数显着减少。但是,我们发现 Telerik Controls 对此设置存在问题。更具体地针对这个特定站点(TelerikHTMLChart 控件)
经过进一步研究,确认必须将 CombineScripts 标志设置为 false 才能使 Telerik 控件以这种身份与 AJAX 控件一起工作。
显然,当您的目标是增加网站的整体响应时间时,这不是最理想的选择。
有没有遇到此问题的人能够获得合理的解决方案,使 AJAX 和 Telerik ASP.NET 组件能够愉快地一起玩而不会降低性能?
我不知道有什么方法可以做到这一点。 AjaxControlToolkit 破坏了与 <asp:ScriptManager>
的兼容性。 Telerik 控件是基于 vanilla MS AJAX 框架构建的,因此由于 2013 年冬季 AjaxControlToolkit 的更改,这两个套件之间没有兼容性。
因此,要考虑的想法是:
删除 AjaxControlToolkit 控件以支持 Telerik 控件
面对比您希望的更多的请求
尝试从他们的 CDN 下载 Telerik 控件的组合脚本并在您的页面中引用它,然后为它们禁用嵌入式脚本。您可以使用 RadSCriptManager 启用它,启用它的 CDN 并在 web.config
中将 Telerik.ScriptManager.TelerikCdn.CombinedScript appSettings 键设置为 true
如果您只需要 Telerik 的 HtmlChart,请尝试 Kendo 图表小部件。它们是相同的,但是 Kendo widged 是纯客户端代码,与 MS AJAX、AjaxControlToolkit 或 ASP.NET [=36= 的 UI 无关]套房
感谢 rdmptn 的回复,但在等待某人以适当且可接受的解决方案进行回复的过程中;我设法找出问题的解决方案。因此,我将这篇文章发布给可能也对性能有顾虑并需要可行的解决方案的其他人。
Rdmptn 已经很好地提出了这个问题的解决方法。其实问题的原因其实已经说过了。但是,还有另一种方法可以通过将 CombineScripts 标志设置为 true 来实现 AJAX ToolkitScriptManager,以减少过多的往返并以高效的方式使用 Telerik 控件。为了找到这个解决方案,我不得不进行一些实验,所以也许这会对其他人有所帮助。 Telerik 支持人员无法提供此解决方案,因此我也将其提供给他们。
首先,您必须确定特定场景所需的 Telerik 脚本引用。您可以从以下 link 获得:http://www.telerik.com/help/aspnet-ajax/introduction-disabling-embedded-resources.html
然后在您的网站上找到您需要的 Telerik 控件。您会注意到此 link 中提供的选项重申了 rdmptn 提供的第三个要点。但是,我描述的方法不需要对 web.config 进行任何修改,也不使用 CDN 引用。我们决定退出 CDN 参考是为了避免因依赖其他站点而进一步降低性能。
确定所需的控件后,将提供的 link 中的 ScriptReferences 复制并粘贴到 AJAX ToolkitScript 管理器中的标记中。在我的例子中,生成的代码如下所示:
<ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" ScriptMode="Release" runat="server" EnablePartialRendering="true"
CombineScripts="true" CombineScriptsHandlerUrl="~/AjaxScriptMergeHandler.ashx">
<CompositeScript>
<Scripts>
<asp:ScriptReference Path="~/Scripts/Common/Core.js" />
<asp:ScriptReference Path="~/Scripts/Common/jQuery.js" />
<asp:ScriptReference Path="~/Scripts/Common/jQueryPlugins.js" />
<asp:ScriptReference Path="~/Scripts/Common/HTML5UI/html5/core.js" />
<asp:ScriptReference Path="~/Scripts/Common/HTML5UI/html5/dataviz/core.js" />
<asp:ScriptReference Path="~/Scripts/Common/HTML5UI/Data/html5/data.js" />
<asp:ScriptReference Path="~/Scripts/Common/HTML5UI/html5/userevents.js" />
<asp:ScriptReference Path="~/Scripts/Common/HTML5UI/DataViz/html5/dataviz/themes.js" />
<asp:ScriptReference Path="~/Scripts/Common/HTML5UI/DataViz/html5/dataviz/chart.js" />
<asp:ScriptReference Path="~/Scripts/Common/HTML5UI/DataViz/html5/dataviz/svg.js" />
<asp:ScriptReference Path="~/Scripts/Common/HTML5UI/DataViz/html5/dataviz/vml.js" />
<asp:ScriptReference Path="~/Scripts/HtmlChart/RadHtmlChart.js" />
</Scripts>
</CompositeScript>
</ajaxToolkit:ToolkitScriptManager>
此方法允许 AJAX ToolScriptManager 显式减少支持您在站点(或网页)中实际使用的组件所需的脚本数量,将 CombineScripts 标记设置为 true,同时仅加载这些脚本在您的应用程序中需要为 Telerik 控件加载的内容。
不再像对已指出的不兼容问题的常见响应那样设置为 false;同时仅加载所需的脚本以支持您的 Telerik 控件。瞧!
希望这些信息对其他人有所帮助,并为他们节省我们浪费在解决问题上的时间。
再次感谢 rdmptn 发布您的建议!