我用ASP和AJAX写了一个聊天室,但有个致命问题!

george910726 2009-05-23 01:33:15
加精
我的聊天室执行可以。发送可以,更新可以。照理说,测试过程中所有功能完善……

但是有个致命的弱点就是……

当聊天室里的人数>=2人时响应速度变得超慢……甚至有死掉的感觉……

谁能提供个一针见血的问题原因?
...全文
2350 119 打赏 收藏 转发到动态 举报
写回复
用AI写文章
119 条回复
切换为时间正序
请发表友善的回复…
发表回复
zouhaifeng2012 2010-09-02
  • 打赏
  • 举报
回复
关注。。
subendong 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 iruobb 的回复:]
首先不要把性能问题归罪于ASP,ASP是语言,性能是把握在你的手里

你在本地测试很顺,说明程序是正常的

服务器上面不顺,因为你忽略了网络因素,200毫秒,你太离谱了
[/Quote]

支持

你竟然设置为200毫秒,你太有诚意了,大哥。

如果你同时跟数据库也打交道,那我可以说:你的服务器肯定OVER。

ASP只是解释性的语言,再慢也慢不到哪儿去。

刀、剑、棍孰强孰弱?关键还是看使用的人。。。
方工 2010-01-29
  • 打赏
  • 举报
回复
没看到源代码,采用asp? 建议采用 HttpHandler, 写一个一般处理程序 .ashx,这样不用构建页面
hackstudio 2010-01-20
  • 打赏
  • 举报
回复
学习、、、
cuixiping 2009-12-20
  • 打赏
  • 举报
回复
没贴源码,这儿是白讨论
seamanhy 2009-06-02
  • 打赏
  • 举报
回复
学习到了,比较同意是线程和ajax发送时间间隔的问题。
nittynitty 2009-06-01
  • 打赏
  • 举报
回复
程序问题,响应速度也有问题,值太小了。
itian 2009-06-01
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20090601/11/aa9079f2-ba25-4984-bb74-97ed731a33c5.html

这个是我写的在线客服系统,里头有个专门给客服聊天的就是个聊天室
chinatzbcn 2009-06-01
  • 打赏
  • 举报
回复
ASP写聊天室的程序很多的,以前我也写过,但是不存在你的现象;
建议你从最初的ASP调试起;一点点把你的全部功能完善以排除问题;

如果刷新过快的话,建议你调整一下时间,然后在测试一下;
SY_ToG 2009-06-01
  • 打赏
  • 举报
回复
用你那方法每次0.2秒刷新到最后肯定会慢
华亭真人 2009-06-01
  • 打赏
  • 举报
回复
直接用C++写个组件得了
forplay 2009-06-01
  • 打赏
  • 举报
回复
楼主把怀疑出问题的代码copy过来大家看看咯
tony_dagoo 2009-06-01
  • 打赏
  • 举报
回复
er 聊天室满占资源的.
tianfang25 2009-06-01
  • 打赏
  • 举报
回复
回贴 拿分下载 资源去咯
Atai-Lu 2009-06-01
  • 打赏
  • 举报
回复
恩,数据库用完之后,没有及时关闭连接,如果单个人的时候,可能看不出来对程序有什么影响,
但是当使用的人越来越多的时候,及时关闭数据库连接与否的效果就有比较明显的区别了。
Atai-Lu 2009-06-01
  • 打赏
  • 举报
回复
小声的问下:能否把你的所有js部分的代码贴出来瞧瞧?
是不是你返回的聊天记录比较多?
或者是,显示的时候没有把上一次的记录清空,直接在后面拼接新的查询结果,导致拼接出来的字串过长?

就你所描述的问题,咋一看似乎就是客户端程序的问题,但想想,我还是觉得服务器端代码、客户端代码都有些问题。
因为单个人的时候很流畅,多人的时候才开始卡起来。而不管人多与否,客户端程序不可能会跑其它用户去运行。
那么,问题可能是:服务器端代码设计不够合理,每次查询聊天数据消耗的资源比较多,
甚至是可能你查询数据库之后没有及时关闭掉链接。
这样,当客户端请求越来越多的时候,服务器端显然就反应不过来,响应时间开始变慢。
然后客户端的ajax程序访问服务器端的时候,等待服务器端响应的时间也会越来越长,
但是呢,客户端的ajax又再不停不断的发送请求,而前面的请求尚未响应完毕,ajax程序开始陷入繁忙状态,最终导致了你说的这种情况。

解决方法:
优化服务器端代码提高查询速度就不必说了。
客户端代码最好尽可能的避免当上一次请求还未响应完毕的时候,就开始再次发送请求。
方法如下:
定义一个全局变量
var isActive=false;
...
if(!isActive){
isActive=true;
//执行ajax代码
...
if(xmlHttp.readyState==4){
//响应完毕
isActive=false;
}
...
}
...
我看你有戏 2009-05-31
  • 打赏
  • 举报
回复


聊天数据不要直接写数据库

先放内存里

放application中
marsara 2009-05-31
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 george910726 的回复:]
我现在改成了两秒一次,但是人一多还慢,我对着360看了一下浏览器的占内存量,以平均每秒0.25M的速度增长。怀疑真是内存泄漏。有会的联系我:547084615
[/Quote]
每秒0.25M呵,吃内存吃得够厉害呵,不知道和服务器本身有没有关系呢?
歪歪 2009-05-31
  • 打赏
  • 举报
回复
晕的,还是在说时间的问题。

<script language="javascript" type="text/javascript">
var step = 1; //毫秒 1000毫秒=1秒
var over = false; //状态标识
setInterval(function(){
if(over == false) return; //状态监测
/*
-------实际ajax处理的代码块-------
*/
},step);
</script>

自己copy去式下看。。。。
mimimao_47 2009-05-31
  • 打赏
  • 举报
回复
0.2?
加载更多回复(92)

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧