【问题标题】:Managing/removing unnecessary scripts in live Kentico site在实时 Kentico 站点中管理/删除不必要的脚本
【发布时间】:2015-09-25 09:32:27
【问题描述】:

我们正在使用 ASPX+门户模型构建一个 Kentico 8.2 站点。查看我的实时站点上呈现的 HTML,我可以看到 Kentico 已将许多不必要的 Javascript 转储到我的页面中。更重要的是,这发生在我的页面顶部表单元素的顶部。

例如,它正在渲染 ASP.NET __doPostBack JS 函数,即使我没有使用任何需要它的控件。其他脚本正在添加为 WebResource.axd 和 ScriptResource.axd 包括在内。

乍一看,这些脚本似乎构成了与UpdatePanel 等一起使用的Microsoft AJAX 框架。我的假设是,当在Kentico UI 中使用页面时,它们可以添加门户管理器功能。据推测,它们也与某些内置 Web 部件一起使用。

但是,我只在我的实时网站上使用自定义 Web 部件,所以所有这些脚本什么都不做,只会减慢我的页面速度并导致性能测试结果不佳。

在渲染实时站点时,我尝试在母版页上隐藏 <ajaxToolkit:ToolkitScriptManager /><cms:CMSPortalManager /> 控件,但这会导致具有 <cms:CMSWebPartZone /> 的模板中断。

有谁知道如何确保在不需要时消除这种膨胀?或者至少让这些脚本在页面末尾呈现,这样它们就不会过多地干扰性能?

【问题讨论】:

    标签: asp.net performance kentico microsoft-ajax


    【解决方案1】:

    不幸的是,在 Kentico 中使用 ASPX 和 ASPX+Portal Pages 构建站点会自动生成额外的标记,例如 __doPostBackWebResource.axdScriptResource.axd

    我不建议您删除母版页中的任何默认代码。这会导致事情崩溃(正如你所经历的那样)。

    但是,使用此标记不会导致页面性能出现严重问题。可以理解,这并不理想。

    我为减少打击采取的措施如下:

    • 尽可能禁用 ViewState。例如,在页面模板或 Webpart/用户控制级别。
    • 将 ViewState 移动到页面底部(在 Kentico 设置中),这样页面就不会那么“头重脚轻”了。
    • 确保尽可能缓存所有内容。例如,您的 Web 部件和模板(图像/js 等)在 IIS 级别和 Kentico 级别使用它们的 API 使用的站点工具。

    从 Kentico 文档中阅读这篇文章可以更深入地了解更多信息:Optimizing website performance

    如果您真的想“完全控制”呈现的 HTML,Kentico 确实允许您使用 MVC 创建模板。但这不会让您灵活地通过在 CMS 管理中移动 Web 部件来修改页面模板。我想您正是出于这个原因选择了 Portal Page 方法。

    我希望这会有所帮助。

    【讨论】:

    • 谢谢@sbhomra - 我担心这就是答案。我知道 Kentico 的其他性能指标,但 CMS 将所有这些垃圾都转储在页面顶部,这很烦人。意识到这在性能方面并不是什么大不了的事,但自动化性能测试往往会发现这些东西。
    【解决方案2】:

    除了@sbhomra 的出色回答之外,我还有一些问题、建议和cmets。

    您所说的性能是多少秒或毫秒?如果您认为您将获得几毫秒的时间,那么尝试重建所有功能是不值得的。如果您说一两秒钟,您可以在设置和您的代码中更改大约 15 种不同的东西以将其全部恢复。想想你要编写、维护和升级多少代码才能获得一秒或更少的回报?

    WebResource 和 SciptResource 加载编译到网站内的库中的资源。因此,如果有人创建了一个外部库并且该库正在加载已编译到其中的图像,您将在您的站点上获得该 WebResource.axd 引用。您必须从 Kentico 实例中物理删除这些库。

    虽然我并不严格推荐它,因为你失去了太多的功能并且有太多多余的不必要的代码,但 MVC 将为你提供所需的控制。

    【讨论】:

    • 谢谢@brenden-kehren - 现在我最关心的是自动性能测试的结果,它会标记你在内容之前加载脚本。不幸的是,MVC 目前不是一种选择。无论如何,感谢您的提示。
    • 再次,我会问,你在谈论什么样的性能问题?如果您在我认为您在浪费时间之前要花时间尝试追踪这几个脚本。还有其他可以提高性能得分的方法,例如在 webpart 中指定列、使用缓存(许多编写自定义代码的 Kentico 开发人员不使用缓存)、最小化输出等等。这些比追踪那几个脚本文件。看看KInspector工具github.com/Kentico/KInspector,这里会给你各种建议
    • 遗憾的是,Kentico 没有为开发人员提供删除未使用代码的方法。即使 DOM 加载性能差异可能可以忽略不计(有争议),它仍然是不必要的膨胀和 HTTP 请求,并且在检查 DOM 时需要挖掘的东西并不是微不足道的。
    • @philtune 我建议访问 Kentico Ideas 网站 (ideas.kentico.com) 并提交该功能请求,以便可能包含在未来的版本中。
    猜你喜欢
    • 1970-01-01
    • 2011-08-10
    • 2012-03-09
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    相关资源
    最近更新 更多