2009-06-05 43 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]); 
     }); 
    } 
)};