我正在研究一個ASP.Net應用程序,並正在努力爲其添加一些Ajax以加速某些區域。我關注的第一個領域是教師報告出席(和其他數據)關於孩子們的出席區。這需要很快。UpdatePanel IE中的緩慢
我創建了一個雙控制設置,用戶點擊圖標並通過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 + @"','');
}
}}
首先,我不明白爲什麼__doPostBack()介紹了IE這樣的延遲。如果我把這個和prm.add_endRequest取出來,它非常快,因爲沒有回發。
其次,我需要一種方法來彈出此控件並刷新數據,以便它仍然是交互式的。我沒有和UpdatePanel結婚,但我一直無法弄清楚如何使用Web服務/靜態頁面方法。正如你可以看到這個控件在同一頁面上被加載了很多次,所以頁面大小和下載速度是一個問題。
我很感激任何想法嗎?
編輯:它在IE 6或7中是一樣的。我認爲它與IE的UpdatePanel處理有關,因爲在FF和Chrome中相同的代碼更快。
切換到使用jquery和PageMethod,它現在在所有瀏覽器中閃電般快速,所以它是UpdatePanel和IE – Jared 2008-11-24 17:27:58
在某些情況下使用webmethods比更新面板eghu-視圖狀態有重量,我們並不需要一次又一次地在標題中發送viewstate。 – 2011-12-06 10:55:58