2012-03-18 60 views
0

的jqGrid由ASP .NET應用MVC2遠程JSON數據供電。 在頁面加載時,兩個請求被髮送到服務器:一個用colmodel檢索整個html頁面,第二個用jqgrid調用來檢索數據。如何檢索單請求colmodel和數據,並且加快的jqGrid負載

colmodel存儲在數據庫中,並取決於用戶權限和用戶配置。創建colmodel需要一些需要一段時間的sql服務器調用。

兩個請求需要在服務器構建colmodel。對於數據檢索,colmodel需要獲取正確數量的列來構建select語句。

目前這個colmodel內置兩次爲每個請求。還需要返回recod總數,這對大數據來說很慢(導致PostgreSql服務器中的整個結果掃描)。

如何加快東西? 如何只建立一次colmodel併發送它和數據在相同的請求?

回答

1

我同意jqGrid支持一些零件的加載colModel一個 Ajax會很有幫助。例如,我發佈了the feature request約一年。

你現在可以做什麼:

  1. 如果我正確理解你的要求,你需要顯示的列取決於用戶的權限用戶。可以實現中一個 Ajax請求的要求。你可以做的是:首先不要發送「隱藏」數據或發送空字符串。秒可以將應該隱藏的列的列表發送給客戶端。在這種情況下,您可以在jqGrid中實現可變數量的列。例如,您可以發送內部的userData部分JSON響應信息。有許多隱藏的列更好的表現,我會建議你打電話beforeProcessing隱藏的內部showColhideCol /顯示在空格列。它會顯着加快showColhideCol的性能。如果需要,您可以添加其他電話clearGridData。您必須優化檢索colModel。我不明白爲什麼它應該很慢。一切都取決於你的實現。無論如何,我確信人們可以很快地完成檢索。
  2. 爲了提高數據庫中的數據的請求的性能,你可以考慮不填JSON響應的records場,並設置totalpage + 1。它消除了尋呼機的「下一步」按鈕。只有當您返回的行數少於rows(每頁的行數)時,才應設置total等於page。在大多數情況下,它將是檢測最後一頁的好標準。您還可以隱藏頁面湖上的某個字段的「最後」按鈕和顯示總頁數的跨度sp_1_...。您可以通過使用pgtext : "Page {0}"選項或使用pginput: false根本沒有任何尋呼機輸入。 viewrecords應該是false(它的默認值)。在所有的定製之後,您將不需要計算記錄的總數,並且在大數據的情況下提高數據庫請求的性能。
+0

非常感謝。選項3非常棒。如何通過'「最後一頁」按鈕被按下參數給控制器?在這種情況下,控制器可以檢索實際記錄數。在這種情況下如何恢復頁面n/m顯示? (Initialy pgtext:「Page {0}」用於防止緩慢的記錄計數調用並返回假頁數)。如果這不合理,如何隱藏Last pager按鈕? – Andrus 2012-03-18 17:28:26

+1

@安德魯斯:我認爲更簡單明瞭的方法是隱藏「最後」尋呼機按鈕。在這種情況下,用戶將看到相同的頁面看看任何頁面,並且將有更清晰的控制器界面。可以隱藏'loadComplete'中的「Last」尋呼機按鈕。代碼可以是'$(「#last_」+ $ .jgrid.jqID(this.p.pager.substr(1)))。hide(); $(「#last_t_」+ $ .jgrid.jqID(this.p.toppager.substr(1)))。hide();'。它將隱藏頂部和底部尋呼機上的「最後」尋呼機按鈕。 – Oleg 2012-03-18 17:50:34

+0

謝謝。它工作 – Andrus 2012-03-18 19:51:43