Managing/removing 实时 Kentico 站点中不必要的脚本

Managing/removing unnecessary scripts in live Kentico site

我们正在使用 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 /> 的模板中断。

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

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

我不建议删除主页中的任何默认代码。这会导致事情崩溃(如您所见)。

但是,使用此标记不会对页面性能造成重大影响。可以理解,这并不理想。

我为减轻打击所做的工作如下:

  • 尽可能禁用 ViewState。例如,在页面模板或 Webpart/User 控制级别。
  • 将ViewState移动到页面底部(在Kentico设置中),这样页面就少了"top heavy"。
  • 确保你正在缓存所有你能缓存的东西。例如,您的 Web 部件和模板(images/js 等)在 IIS 级别和 Kentico 级别使用它们的 API.
  • 使用的站点家具

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

如果您真的想要 "full control" 而不是 HTML 呈现,Kentico 允许您使用 MVC 创建模板。但这不会让您通过在 CMS 管理中移动 Web 部件来灵活地修改页面模板。我想您正是出于这个原因而选择了门户页面方法。

希望对您有所帮助。

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

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

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

虽然我并不严格推荐它,因为您失去了太多的功能并且有太多额外的不必要的代码,但 MVC 将为您提供您正在寻找的控制。