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 构建站点将自动生成其他标记,例如 __doPostBack
、WebResource.axd
和 ScriptResource.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 将为您提供您正在寻找的控制。
我们正在使用 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 构建站点将自动生成其他标记,例如 __doPostBack
、WebResource.axd
和 ScriptResource.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 将为您提供您正在寻找的控制。