2010-09-14 58 views
0

我正在研究一個ajax應用程序,它將在html表中顯示大約一百萬條記錄。 Web服務從服務器返回記錄,我通過concatinating數據和標籤來構建logn字符串,並且使用innerHTML(不使用DOM來獲得更好的性能)放置此字符串。Ajax問題:延遲從使用innerHTML的web服務獲取數據,請指導

爲了測試,我已經把6000個recod放在數據庫中(存儲過程大約需要4秒才能完成執行)。

在本地系統(同一臺機器上的數據庫和應用程序)上測試時,大約需要5分鐘才能在頁面中顯示記錄。在依靠網絡服務器之後,即使有更多的時間,它也沒有迴應。它看起來性能非常低。我把記錄放在一個CSV文件中,它的重量小於2MB。我無法理解爲什麼字符串concatinations構建html表格並將字符串放入innerHTML需要花費如此多的時間(如果是問題)。要求是在網頁上顯示大約百萬條記錄,但只有6000條記錄的性能令人失望。我不知道該怎麼做才能提高性能。

請引導我,幫助我。

+1

你在服務端或客戶端執行字符串concat嗎? – CodingGorilla 2010-09-14 13:47:11

+0

編碼大猩猩它在客戶端 – haansi 2010-09-15 04:00:21

回答

3

您試圖在單個頁面上顯示一百萬條記錄嗎?不管你如何優化你的服務器代碼,這是很多的HTML解析/渲染,特別是如果它在一個表中。

即使使用.innerHTML也不會隨時「保存」你。渲染引擎仍然需要解析/樣式/渲染/定位數以百萬計的表格行/單元格,並且您將不得不等待它的工作。

如果您絕對必須在單個頁面上顯示所有這些記錄,請嘗試將事件分解爲可管理的塊。讓AJAX調用一次返回(比如說)100條記錄,將這些記錄放入表中,然後獲取另外100條記錄等等......至少這樣你會看到頁面的內容在增長,而不是坐在那裏在那裏等待1,000,000個表格行顯示在一個鏡頭中。

一個更好的選擇是做網頁分頁,一次只顯示100條記錄,並提供一個標準的導航和第一/上一頁/下一頁/最後一頁>>按鈕來交換數據的「頁面」。

1

正如馬克所說,你需要分頁。看看這是否有幫助 - How do I do pagination in ASP.NET MVC?

除此之外,您可以通過使用主 - 細節模式優化結果 - 只抓取記錄摘要(主),以及對主文件進行一些操作,獲取細節並在屏幕上顯示。這將減少從服務器傳輸的數據的大小。

+0

謝謝字節實際上它不是一個可以使用主 - 細節模式的情況。只有細節記錄可以顯示,沒有主記錄。任何更多的想法請求 – haansi 2010-09-15 04:08:09

+0

在這種情況下,分頁是你需要的。它可以是基於傳統頁面的鏈接,也可以是設備策略,以便在用戶滾動瀏覽列表時異步獲取數據(即滾動時連續更新)。 – byte 2010-09-15 13:01:44

+0

還有一件事,您使用什麼格式進行數據傳輸/交換?查看這個w.r.t xml,json,html等 – byte 2010-09-15 13:03:25