2009-09-19 65 views
0

我正在开发一个Web项目,它需要从多个用户和大量数据进行相当多的更新。无刷新更新网站(大量数据)的最有效方式?

预期的数据量是70个唯一行,每行有14个需要定期更新的字段。这共有980个领域。

我首先尝试了一系列使用for循环更新所有字段的同步ajax查询到数据库。这造成了很大的悬挂。我会说,在更新页面被冻结之间的30秒内,我会持续20秒。

下一次尝试是使用onsuccess异步地运行ajax查询,以更新for循环中的字段。这减慢了减速,但我遇到了奇怪的问题。我认为我的for循环变量更改导致东西被写入错误的HTML元素。

目前我有一个后端.asp页写HTML,并清除包含div的innerHTML,然后设置div.innerHTML = transport.responseText。这似乎对我来说工作得很好,但我只是好奇别人会用什么工具来更新这些数据(vbscript,javascript和Access数据库)。

跨所有工作站的数据将是相同的,并且多个用户将实时交互编辑数据。但是,他们每个人都会关心更新他们自己的部分数据,但是需要让所有用户在最新的迭代中都可以更新和查看。

回答

1

一个HTML表1000名的字段不是“大量的数据”。

如果你给一个ID给每个细胞,并使用JSON或简单CSV获取数据,然后使用javascript,因为浏览器并不需要重绘表作出新的DOM结构,这将是更快更新所有。

POR例如:

试想一下,服务器对你的数据是这样的: 12,234,564,423,1223,2413,133,113,5443 ...

然后在JavaScript你可以:

var data = responseText.split(','); 

,然后填写表(假设表细胞所具有的ID名称,如CELL_0,CELL_1,CELL_2 ...)。

for (i=0; i<data.length; i++) { 
    document.getElementById('CELL_'+i).innerHTML=data[i]; 
} 

就是这样。

+0

这与我以前的做法非常接近。不过,我把它当作JSON传递。原型eval.json是处理器密集型调用吗? – 2009-09-26 06:14:32

+0

对于你的问题你说:“目前我有一个后端.asp页面编写HTML,并清除包含div的innerHTML,然后设置div.innerHTML = transport.responseText。”。这与更新单元格内容完全不同。对于只有1000个值JSON是可以的。 – Peter 2009-09-26 22:13:21

+0

是的...我试图更新单元格内容,但是我收到了一些非常奇怪的行为,所以我改为这样做。 – 2009-09-29 06:30:46

0

用户希望如何与页面进行交互?多个用户会同时处理相同的数据吗?他们是否期望看到其他的结果?你标记了这个asp.net,但只提及能够使用VBScript,JavaScript和访问 - 这是怎样的asp.net?

编辑:

感谢您的澄清。每行都有编辑/保存按钮有帮助吗?行将被读取,直到用户需要编辑他们的数据(我假设他们正在编辑每一行)数据将刷新,并且该行将被锁定以供任何其他用户编辑。用户完成后,单击保存并更新其数据,该行被解锁,并刷新页面的数据。您还可以让ajax每隔几分钟运行一次,以便在用户未进行主动编辑时获取最新信息。另外 - 根据数据结构的不同,您应该只需要获取自用户页面上次更新后更改的数据。无需每次都获得一切。你的更新也应该很小,仅限于对用户的行,他们正在编辑的数据。

+0

没有意识到我标记它的asp.net,我的意思是只标记它的ASP,这似乎并不存在。 为了清晰起见,我编辑了这篇文章,包括回答你的问题。 – 2009-09-19 01:45:45