2011-06-17 91 views
0

我有一個Web窗體頁面,左邊是樹形視圖,右邊是網格。當用戶點擊樹形視圖節點時,相應的網格將使用SqlDataSource填充,然後顯示。整個事情在一個UpdatePanel中。減少大型表格的ASP.NET WebForms頁面的加載時間

這裏是我的設置:

<asp:GridView runat="server" ID='LocationsRowGrid' AutoGenerateColumns="false" DataSourceID="SqlDataSource_LocationRow"> 
    <Columns> 
     <asp:TemplateField HeaderText="Location"> 
       <ItemTemplate> 
        <asp:DropDownList runat="server" ID="NAME_LCTN" OnDataBound="dropdown_DataBound" 
         DataTextField="NAME_TO_LCTN" DataValueField="NAME_TO_LCTN" DataSourceID="SqlDataSource_LocationNames"> 
        </asp:DropDownList> 
       </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Move Time (HR)"> 
      <ItemTemplate> 
       <asp:TextBox runat="server" ID="STD_MOVE_TME_AMNT" Text='<%# Bind("STD_MOVE_TME_AMNT") %>'></asp:TextBox> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="LAST_UPDATED_BY" HeaderText="Updated By" Visible="true" /> 
     <asp:BoundField DataField="LAST_REV_DT" HeaderText="Revision Date" Visible="true" /> 
    </Columns>   
</asp:GridView> 

還有其他的(大)網格,但是這是基本的模板。最大的網格大約有十二列,其中約六個是帶有文本框的模板域,其中一個是帶有下拉列表的模板域。該下拉列表是數據綁定到另一個表,其中有大約150個元素。網格本身有大約100個條目。

這很慢。看起來這個問題可能與HTML的呈現有關 - 服務器並沒有花太長的時間來回應,但瀏覽器(Chrome和IE)幾乎在試圖呈現結果。我的第一個(明顯的)猜測是,渲染100個html選擇,每個都有> 100個元素,將會變慢 - 特別是當像ASP.NET這樣的表標記內部一次完成時。

這似乎是一個合理的猜測慢的原因?

對於這個項目我(當前)不允許使用jQuery(或者大概是任何其他的javascript庫),並且必須證明我使用的任何和所有javascript。基本上,其他開發人員不希望需要任何真正的javascript的理解,以便能夠維護此應用程序,當我完成它。

鑑於這些限制,是否有任何事情可以減少瀏覽器中返回的HTML和/或渲染時間的大小?提前致謝。

+0

您的gridview需要在UpdatePanel中嗎?去看看更新面板實際上是如何工作的,以及從服務器發佈和接收的內容...... – Emyr

回答

0

我的想法是減少初始頁面上的綁定數據量並進行分頁。除非這是一個「報告」,否則用戶不需要一次查看每一行。

另一種可能性是您將頁面設置爲也使用視圖狀態的網格。如果是這樣,那麼您在綁定中花費時間來創建視圖狀態(至少在默認情況下)。

除此之外,我同意@ n8wrl,你需要通過隔離它是否真正是渲染是問題進行故障排除。我可能會通過追蹤來做到這一點,而不是關閉它,但你必須確保問題在於渲染。另一個控制器就像一箇中繼器一樣可以工作,但我認爲這只是像CSS這樣的好處,它減少了標記數據的數量以產生輸出。

在IIS中壓縮響應流也可以加快速度。渲染時間仍然相同,但是您將消除將HTML發送到瀏覽器的時間,這至少是您的問題的一部分。

0

你幾點思考:

  1. 「關閉」的渲染,看看有多少的響應時間是在服務器端的查詢。您可以通過註釋DataSoource =語句來完成此操作。
  2. 瀏覽器傾向於等待整個表在呈現它之前完成它。您可以嘗試不同的佈局,以避免所有內容都放在一張表中。也許一箇中繼器,每個項目是一個獨立的桌子?隨着標記出現,每個可以呈現。
  3. 你可以開始更加喜歡用jQuery和AJAX來分頁你的內容。而不是100行可能10行與頁面1,2,3 ...鏈接?
+0

OP說:「對於這個項目,我(當前)不允許使用jQuery」。儘管OP不能使用jQuery,但正如你所提到的,它們仍然可以使用分頁來幫助提高速度問題。 – ashelvey