0
我创建了这个聊天系统,用于正常工作,直到消息数量增加(超过300条消息,我希望达到1000条)开始导致慢速脚本并花费时间检索所有数据。 这个想法取决于选择数据的XML风格,然后将其添加到特定的选项卡,并重复与setTimeout的行为,有没有其他方式我可以做我真的需要的想法,这里是我的代码。使用jquery获取大量数据
function updateMessage()
{
$.post("db.php",
{MsgNo :$("#no_of_msgs").val()},
function(data)
{
$(data).find("message").each(function() {
var msg_id = $(this).find("msg_id").text();
var date_time = $(this).find("date_time").text();
var from_user = $(this).find("from_user").text();
var from_user_id = $(this).find("from_user_id").text();
var from_group = $(this).find("from_group").text();
var to_user = $(this).find("to_user").text();
var to_user_id = $(this).find("to_user_id").text();
var to_group = $(this).find("to_group").text();
var msg_type = $(this).find("msg_type").text();
var msg = $(this).find("msg").text();
var from_grp_abr = $(this).find("from_grp_abr").text();
var to_grp_abr = $(this).find("to_grp_abr").text();
var flagged = $(this).find("flagged").text();
var onlydate = getonlydate(date_time);
$("#no_of_msgs").val(msg_id);
if (from_group == $("#login").val())
{
var reply = '';
}
else {var reply = 'reply';}
if(from_user == "")
{
var handle_reply = from_grp_abr;
}
else
{
var handle_reply = from_user;
}
var html = "<tr id='row_"+msg_id+"'>";
html += "<td><a class='bullet' onclick='changeStatus(\""+msg_id+"\")'> <\/a><\/td>";
html += "<td><a class='"+reply+"' onclick=\"reply('"+escape(handle_reply)+"','"+escape(to_user)+"',"+from_user_id+","+to_user_id+");\"> <\/a><\/td>";
html += "<td class='time'>"+date_time+"<\/td>";
html += "<td>"+from_user+" ["+from_grp_abr+"]"+"<\/td>";
html += "<td>"+to_user+" ["+to_grp_abr+"]"+"<\/td>";
html += "<td><a href='#' class="+msg_type+"><\/a><\/td>";
html += "<td><a id='flag_"+msg_id+"' class='"+class_flag+"' onclick='flagMsg("+msg_id+")'> <\/a><\/td>";
html += "<td>"+msg+"<\/td>";
html += "<td>"+from_grp_abr+"<\/td><\/tr>";
$('#no_of_msgs').val(msg_id);
$("#tbody1").prepend(html);
updatetabledata('t1');
alternateRows('t1');
//append data to tab2 messages received
if (to_group == $("#login").val())
{
$("#tbody2").prepend(html);
updatetabledata('t2');
alternateRows('t2');
}
//append data to tab3 sent messages
else if (from_group == $("#login").val())
{
$("#tbody3").prepend(html);
updatetabledata('t3');
alternateRows('t3');
}
if(from_group != $("#login").val())
{
$("#tbody"+from_group).prepend(html);
updatetabledata('t'+from_group);
alternateRows('t'+from_group);
}
if(to_group != $("#login").val())
{
$("#tbody"+to_group).prepend(html);
updatetabledata('t'+to_group);
alternateRows('t'+to_group);
}
});
});
setTimeout('updateMessage()',3000);
}
我在想,问题在于使用each(),然后在同一时间在多个选项卡上分发数据的任何想法。
我已经这样做了。是的,这些消息似乎是分批检索的,但第一次检查它们是否正确?如果是的话,我会如何将它们分成不同的标签。 – Sarah 2010-04-13 08:43:09
您每个周期收到多少条消息;鉴于你每三秒钟检查一次,它不会超过一对?尝试不同浏览器中的脚本...他们变化堆。此外,大多数现代浏览器都带有一个javascript profiler(我只使用了firebug中的一个),他们都应该很擅长告诉你哪些方法正在耗尽你的时间。将您的功能分解为几种方法将有助于找出问题。 – CurtainDog 2010-04-15 05:40:38