2009-06-05 62 views
1

我有一個包含在我的系統上運行的作業表的網頁。當這些工作完成或改變狀態時,表格需要反映這些改變。通過Ajax刷新表格列

目前我每8秒通過AJAX刷新整個表格。這對於一定數量的作業來說工作正常,但是會導致性能問題,導致很高的(〜100)作業負載,最終導致瀏覽器鎖定。

我使用struts2的sx:div來執行這些更新,我相信它每次都會解析返回的表來搜索窗口小部件,從而關閉休息功能。

我認爲刷新只是狀態欄會有很大的幫助,因爲返回的數據會小得多,但我不確定這將如何工作。

我打算使用struts標籤以外的東西來執行此操作。所以本質上,我問是否有一種簡單的方法來刷新表的一列。

在此先感謝。

回答

2

只更新status列中的文本應該比重新呈現整個表格更好地執行。從帶寬節省可能不是那麼大的勝利。但這只是我的直覺 - 你當然應該檢查和測量最適合你的東西。

當每個更新中只有某些行的狀態發生更改時,只更新更改的行也應提高性能。

另外,正如m_oLogin建議的那樣,您可以考慮只發送更改的變化量。雖然根據我的經驗,這不是最容易的事情,所以我不會從那裏開始。

0

當你說「我每8秒刷新一次整個表」時,你的意思是你每8秒檢索一次整個json數據?因爲如果是這樣的話,這是正常的緩慢...

我會跟蹤服務器端的變化,併發送一個小的「相同的表」味精如果查詢進來,而沒有數據已經​​改變。只有在服務器端發生了變化時才發回表格數據。

1

如果每列都有一個類(col-1,col-2等)。您的Ajax調用只能查詢該行並將新文本輸出爲分隔字符串。

如果您使用的是jQuery.ajax,您可以使用代碼首先拆分字符串來提供success回調函數。然後使用$('.col-X').each()循環遍歷列的每個元素,以便更新其innerhtml

$.ajax({ 
    url: "YOUR_URL.php", 
    success: function (data) { 
     var return = data.split(','); 
     $('.col-1').each(function (index) { 
      $(this).html(return[index]); 
     }); 
    } 
)};