2011-09-01 37 views
0

我有一個位置使用我們的ASP.NET 4.0 Web應用程序,它運行良好約2年。我出去現場做了升級,發現其中一個頁面只是空白,IE 8完全停止響應。經過調查,我發現一個頁面上的一個組合框有超過8000個項目。該頁面在IE7,IE9,Firefox和Chrome中正常加載。我查看了該Ajax Control Toolkit網站上的文檔,他們說我應該使用Auto Complete Extender,因爲我擁有如此多的記錄。我認爲,在任何瀏覽器中都不起作用只是時間問題。該設施使用IE8,所以我現在讓它們以兼容模式運行;然後我告訴他們開始刪除他們不再需要的舊記錄。不過,我需要開始研究替代品。 Auto Complete Extender的問題在於它不能像組合框那樣工作。有誰知道一個好方法?我需要保持代碼隱藏的DataSource和DataBinding風格。另外,重新設計不是一種選擇。我需要該列表來包含任何特定設施的所有訪問者。AjaxControlToolkit combobox替代大量項目

回答

2

隨着8000個項目,我會推薦一個控件,這兩個都是填充和過濾按需(不在Page_Load),並沒有堅持所有項目ViewState。

不幸的是,按需填充和過濾會影響DataSource和DataBinding風格。剩下的就是試圖使用控件EnableViewState =「false」並儘量減少頁面大小的可用性,首先是使用壓縮。在IIS中,enable dynamic compression。我認爲這些步驟不會解決性能問題,但您應該先從使用YSlow或其他工具分析頁面大小開始。例如,如果頁面具有可選元素(如特定於客戶的組合框),請確保只有正在使用的組件才被實際填充。通過不填充未使用的控件併爲它們禁用ViewState,我已經有了能夠超過一半頁面大小的情況。設置Visible =「false」是不夠的。

至於替代品,我用Telerik RadCombobox與類似的項目數和性能問題。設置EnableViewState =「false」可顯着提高回發速度,但加載時間仍不可接受。切換到load on demand的幫助,但引入了新的問題,堅持選擇狀態沒有ViewState。按需填充組合框表示在ItemsRequested事件中執行數據綁定,每次組合框在UI中打開時都會執行數據綁定。這與使用帶有AutoCompleteExtender和頁面方法的普通文本框大致相同。您可能可以在這裏重用大部分Page_Load時間數據綁定代碼。總的來說,我有jQuery UI autocomplete和Ajax請求的最佳體驗,但這需要更廣泛的重新設計。