我使用的是mysql和node.js。我有一个按钮‘加载以前的聊天’加载两个用户的聊天。当我点击那个按钮时,它给出的结果是12行/秒(手动测试).How我能让它更快吗?以下是我的代码
在服务器端-
socket.on('chatHistory', function(data){
var count=0;
connection.query("SELECT * FROM chatRecord WHERE uniqueRoomId = '"+data.roomId+"' ", function(err, result, fields) {
if (err) throw err;
for (var j in result)
{
if (rows3.hasOwnProperty(j)) count++;
}
var k=0;
if(result[0])
{
socket.emit('chatHistoryMaintain', {result:result,sum:count,nickname:data.nickname});
}
});
});客户端代码-
socket.on('chatHistoryMaintain', function(data){
for(i=0;i<data.sum;i++)
{
if(data.result[i].sender==data.nickname)
{
$('#chat-messages ul').append('<li class="marker"><div class="fl sender">'+nickname+' : </div><div class="fl text1">'+data.result[i].msg+'</div></li>');
}
else
{
$('#chat-messages ul').append('<li class="marker"><div class="fl receiver">'+nickname+' : </div><div class="fl text">'+data.result[i].msg+'</div></li>');
}
}
});当我的应用程序给出的结果是12行/秒,而skype的速度高达1560行/秒时,我如何才能对其进行更多的优化?我做错了什么?
下面是我的数据库引擎的详细信息
> +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
> | Engine | Support | Comment | Transactions | XA | Savepoints |
> +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
> | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
> | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
> | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
> | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO
> |
> | MyISAM | YES | MyISAM storage engine | NO | NO | NO |
> | CSV | YES | CSV storage engine | NO | NO | NO |
> | ARCHIVE | YES | Archive storage engine | NO | NO | NO |
> | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
> | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
> +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+发布于 2014-04-30 21:06:40
为了让它更快,你首先必须找出为什么它会变慢。
SELECT COUNT(*)...子句执行WHERE。如果它也很慢,那么索引可能是问题所在。如果问题出在执行行扫描的查询中,请调整索引。如果mysql在找到数据而不是返回数据时没有问题,那么不要等待通过套接字将所有30k记录都分批返回。考虑使用异步读取行(毕竟是node.js!),如official doc中所述。一次在node.js进程内存中放入大量记录不是一个好主意,您可以尝试监视进程的内存使用情况。
https://stackoverflow.com/questions/23387151
复制相似问题