我编写了一个以json方式返回一些数据的Web服务。要在表中显示它,我使用datatables jquery插件:
for(var i=0;i<results.length;i++){
myTable.fnAddData( [
"<input name='codeSearched' type='radio' value='"+results[i].ID+"' />",
"<span id='code_"+results[i].ID+"'>"+ results[i].code+"</>",
results[i].description ] ,true);
}
这个javascript似乎杀了浏览器。 (firefox上只有几千行的20秒以上)。通过将服务器端渲染为html片段并直接插入dom,我已经将相似数量的数据加载到数据表表中,然后再提高了数量级。
你能推荐一种方法来充分利用这两个方面吗? (即,调用ajax Web服务,以开放的结构化格式提供数据,但也可以快速解析和呈现?
感谢您的任何建议
答案 0 :(得分:1)
为什么不尝试将最后一个参数设置为“false”?它应该运行得更快,但用户必须等到表填充。
如果它足够快,你可能想让它更具交互性,也许你可以设置参数“false”,但每10或100条记录“true”以允许重绘表格。
填写数千个单选按钮列表的原因超出了我的意思......它听起来不像是一个好的用户界面练习,但你必须有自己的理由。
祝你好运!路易斯
答案 1 :(得分:0)
您需要获取一些时间信息,以了解您的通话回复的速度。
我有两种方法可以做到这一点,一种方法是使用萤火虫来查看它需要多长时间,还可以在我的通话时间内进行计时,这样我就可以看到从开始通话到实际完成时间有多长
如果这是可以接受的,那么构建表就是问题所在。
你会想看看这篇文章,以确保你的技术不会在时间上杀死你,因为使用DOM函数和innerHTML之间存在不同。
http://www.quirksmode.org/dom/innerhtml.html
下一个问题是,如果您正在尝试完全构建表,您会发现浏览器在完成之前不会显示它,这可能是一个杀手。
所以,我过去所做的就是把它分成几部分。所以,我建立了大约100行,然后使用setTimeout
以便浏览器可以显示它,然后我构建下一批,直到我完成。
这样用户可以快速查看表的第一部分,并且应该在他们需要构建整个表之前完成(例如,如果他们需要查看底行)。
一次构建多少行是用户需求与性能之间的权衡。