【发布时间】:2015-02-11 22:15:16
【问题描述】:
我的问题与提高 aspx 页面的性能有关。所以看完这篇文章后,请评论是否有可能提高这个页面的性能。
这是场景。
我正在使用以下工具开发一个 asp.net Web 应用程序
- .Net 3.5
- 类型化数据集(10 个表)
- IE 8 兼容性视图-IE7 标准(应用程序不适用于 FF、Chrome 或任何其他浏览器)
- Telerik RadControls。 (网格、数字文本框、带有自动完成功能的下拉菜单)
- 应用结构缓存。
- Jquery 和其他特定于页面的 javascripts。
ASPX 页面包含
- 8 个网格(其中 6 个是 Telerik 网格,2 个是 html 表格)
- 所有 Telerik 网格都定义了 EditFormTemplates。
- 很多控件(我不知道实际使用了多少控件,所以我不太热衷于清理 aspx 页面,因为这可能需要大量的 dev/qa 工作,不幸的是现在不是一个选项.)
- RadScriptBlock 中有很多 javascript。(我们还有 javascrtip 可以调整网格的宽度和其他 UI)
- 为页面上的所有网格和控件启用 ViewState。
对这些网格的操作是 - 插入、更新、删除、复制、全部删除。
所有这些操作都是通过部分回发完成的。
因为大部分数据都缓存在 appfabric 中,所以没有多少数据库命中。
现在这可能听起来很奇怪,但在这个单一页面中有数千行代码。后面的代码大约 30k 行,js 中大约 5k 行,aspx 页面中大约 4k 行(html/js 组合)。 在页面加载以及每次部分回发时运行的代码背后都有复杂的逻辑,并且大多数网格几乎在每次回发时都重新绑定(ed)。
我们为提高性能所做的事情(没有太大帮助)。 注意:再次重写整个页面不是一个选项,因此所有增强功能都必须在此页面中进行。
- 缩小所有 javascript、CSS
- 在 Radscript mangaers 脚本集合中添加了所有脚本(我不知道这是否会有所帮助,但被告知这样做。)
- 将所有写在 aspx 上的 javascript 从 RadScriptBlock 移到 js 文件中
- 重构了大量代码并最大限度地减少了 appfabric(push,get) 的使用。
- RadCompression 已实现。
- 所有网格都使用服务器分页(每页 5 条记录)。
页面几乎没有任何静态内容。 Page Caching,Fragment 缓存是不可能的看这个页面的使用情况
我不知道这是否让任何人感到惊讶,但此页面上的部分回发操作大约需要 4-6 秒(请求+响应+渲染)。我认为这是相当快的,看看在后台运行的代码。但客户不这么认为。
期望页面上的任何操作都不应超过 1-1.5 秒。
问题
- 查看此页面中使用的基础架构是否可以获得这种性能提升
- 如果有可能的话,我缺少哪些可以使页面性能更好的东西。
- 我看到每个网格的 ItemCreated 和 ItemDatabound 被调用的次数比
RowCount多很多。我知道这是为每个项目(即页眉、页脚和项目)调用的,但如果我的行数为 5,为什么这些方法被调用超过 10 次? - 我在代码中看到开发人员疯狂使用
Rebind()方法(可能这就是#3 的原因)。谁能告诉我调用 Rebind 的正确方法和位置是什么?我知道 Telerik 网格在插入时隐式调用 rebind,但是在什么情况下我们需要显式调用 rebind?
我正在尝试审查整个代码库并试图找出瓶颈。
如果有人给我任何我准备在代码上尝试的建议,我将不胜感激。
如果需要更多信息,请告诉我。
谢谢。
编辑
进一步分析,我检查了整个页面的视图状态,它大约是 33kb。此外,当我从页面中删除 AjaxSettings 时,页面加载速度非常快,只需 2/3 秒。所以我觉得页面的Ajaxification在渲染页面时产生了一些问题。
我还记录了服务器进程的时间,根据正在运行的网格大约需要 1/2 秒。
【问题讨论】:
-
查看这篇为 Telerik AJAX 控件提供优化技术的文章:telerik.com/help/aspnet-ajax/…
标签: javascript asp.net telerik-grid pagemethods ie8-compatibility-mode