Jar*_*red 5 c# asp.net performance jquery updatepanel
我正在开发一个ASP.Net应用程序,并努力为它添加一些Ajax来加速某些领域.我所关注的第一个领域是教师报告孩子出勤率(以及其他一些数据)的出勤区域.这需要很快.
我创建了一个双控制设置,用户点击图标,通过Javascript和Jquery我弹出第二个控件.然后我使用__doPostBack()来刷新弹出控件以加载所有相关数据.
这是一个小视频片段,展示它是如何工作的:http://www.screencast.com/users/cyberjared/folders/Jing/media/32ef7c22-fe82-4b60-a74a-9a37ab625f1f(:21并忽略音频背景).
在Firefox和Chrome中,每次"弹出"的速度都比我想要的慢2-3秒,但它在IE中完全不可行,每次弹出和加载时都需要7-8秒.并且忽略了在数据被更改后保存数据所需的任何时间.
这是处理弹出窗口的javascript:
function showAttendMenu(callingControl, guid) {
var myPnl = $get('" + this.MyPnl.ClientID + @"')
if(myPnl) {
var displayIDFld = $get('" + this.AttendanceFld.ClientID + @"');
var myStyle = myPnl.style;
if(myStyle.display == 'block' && (guid== '' || guid == displayIDFld.value)) {
myStyle.display = 'none';
} else {
// Get a reference to the PageRequestManager.
var prm = Sys.WebForms.PageRequestManager.getInstance();
// Unblock the form when a partial postback ends.
prm.add_endRequest(function() {
$('#" + this.MyPnl.ClientID + @"').unblock({ fadeOut: 0});
});
var domEl = Sys.UI.DomElement;
//Move it into position
var loc = domEl.getLocation(callingControl);
var width = domEl.getBounds(callingControl).width;
domEl.setLocation(myPnl, loc.x + width, loc.y - 200);
//Show it and block it until we finish loading the data
myStyle.display = 'block';
$('#" + this.MyPnl.ClientID + @"').block({ message: null, overlayCSS: { backgroundColor:'#fff', opacity: '0.7'} });
//Load the data
if(guid != '') { displayIDFld.value = guid; }
__doPostBack('" + UpdatePanel1.ClientID + @"','');
}
}}
Run Code Online (Sandbox Code Playgroud)
首先,我不明白为什么__doPostBack()在IE中引入了这样的延迟.如果我把它和prm.add_endRequest拿出来,那就非常快,因为没有发生回发.
其次,我需要一种方法来弹出这个控件并刷新数据,使它仍然是交互式的.我没有与UpdatePanel结婚,但我无法弄清楚如何使用Web服务/静态页面方法.如您所见,此控件在同一页面上多次加载,因此页面大小和下载速度是个问题.
我很欣赏任何想法?
编辑:它在IE 6或7中是相同的.我认为它与IE处理UpdatePanel有关,因为在FF和Chrome中相同的代码要快得多.
如果速度/性能是您的主要关注点,我强烈建议不要使用UpdatePanels,因为它们会导致整页回发在标题中拖动ViewState,以及其他废话,并强制页面每次都经历整个生命周期(即使用户没有看到这一点).
您应该能够(相对容易地)使用PageMethods来完成您的任务.
// In your aspx.cs define the server-side method marked with the
// WebMethod attribute and it must be public static.
[WebMethod]
public static string HelloWorld(string name)
{
return "Hello World - by " + name;
}
// Call the method via javascript
PageMethods.HelloWorld("Jimmy", callbackMethod, failMethod);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5514 次 |
最近记录: |