最近因为效率问题改造了哈现有的一个功能,以前需要一分钟左右的东西,因数据库时间花的比较多,所以现在改成多次请求,多次AJAX请求,然后对表格填值,最大的数据量的话纵向400多行,横向80列左右,因效率问题,填充值都没有用
jquery的
$("#DataTable tr:eq("+(realrowindex+rowindex+tm)+") td:eq("+(realcolindex+colindex)+")").html(resultdata[rowindex][colindex].disData+" ");
秀发型用上面的IE常提示是否继续。这样感觉给用户映像很不好。所以想改进哈。
后用
var DataTable=$("#DataTable")[0];
DataTable.rows[(realrowindex+rowindex+tm)].cells[(realcolindex+colindex)].innerHTML='<font color="'+fontcolor+'">'+resultdata[rowindex][colindex].disData+"</font>";
则没有提示有问题了。
这个功能现在请求30次左右,左边表格请求一次,右边表格请求29次,一次需要1S左右,现在总共跑下来10多秒就搞定,
本想右边请求完一次,再请求另一个的,但这样主线程好像速度慢,而且IE基本取数据时动不了。现在全用异步,递归调用,效果还行,没有出现填数据混乱的现象。
但就有一个问题,你29次请求全完了后要提示用户,想了老半天没想出办法,现在想了个办法定义一个全局变量,在显示这个页面时初始化,然后在回调函数中alert(),结果是递增的,奇怪的是先从2开始,打到28后再打1,搞不懂。
我想当这个变量为1时把正在取数据的消息取了,结果数据还没全显示完取数据的消息就已消失了。后直接>=28这下效果很好。
但在里面调用$("#msgid").html("");没反应,晕了,在回调函数里给表里给值都可以,为什么这个就不行,
后想了个办法,把这代码写在外面,在外面另定义一个函数,结果这样就搞定了。
在回调函数中调用下面这个函数。搞定。
function hideMsg(){
$("#msgid").html("");//alert("dfs");
}