我为我的朋友(程序员)做了一个聊天应用程序,以便在我们之间传递代码和链接,但是在发送一些消息之后,聊天似乎花了这么长时间来发送消息并加载日志当用户在创建新会话时进入聊天时,我使用wamp进行托管,yii用于php框架,jquery用于javascript框架,我也使用mysql进行用户和聊天存储,我不知道为什么有时需要很长时间才能加载对于同一台服务器,也许是因为我从php发送数组中的聊天记录,这是我收到它的方式:
<?php foreach ($chat as $data): ?>
<?php if($data->Text == 'disconnected'): ?>
<i><strong><?php echo $data->users->username; ?></strong> <?php echo $data->Text; ?></i>
<br/>
<?php endif; ?>
<?php if($data->Text != 'disconnected'): ?>
<strong>(<?php echo $data->time; ?>) <?php echo $data->users->username; ?>:</strong> <?php CheckLink($data->Text); ?>
<br/>
<?php endif; ?>
<?php endforeach; ?>
这是yii控制器如何呈现它:
public function actionAjaxscript()
{
$chat = Chat::model()->findAll();
if(isset($_POST["usermsg"])){
echo "hello";
}
$this->renderPartial('_ajax', array('chat'=>$chat));
}
发送这个是因为我觉得问题来自这里,有谁知道如何解决这个问题?如果您需要查看其他代码,请告诉我并向他们展示。
答案 0 :(得分:0)
我不确定你的方法是最好的。
您每次加载整个聊天记录时,您应该只加载新行,而不是每次都加载所有内容。每次打开页面时都会创建一个哈希。该页面应始终使用该特定散列请求新行。服务器知道他上次发送到该哈希的内容,并且只能发送新消息(不是全部消息)。尝试使用json发回聊天消息而不是整个html结构,这也会加快它的速度。
如果你有很多用户,MySQL很快就会被聊天请求所淹没,尝试通过使用memcache或APC来缓存聊天行以便更快地访问它。
如果您在显示聊天行后执行某种jquery,那么浏览器本身可能会变慢。向上和向下滚动以查看它是否变慢。在将50件商品添加到购物车后,它发生在我身上。
此外,您在视图中有2个IF命令,为什么没有其他命令?它的工作方式完全相同,它会减轻服务器上的压力。
同样在您的示例中,您不是将数据作为数组发送,而是将其作为html发送。
答案 1 :(得分:0)
对于简单的基于ajax的解决方案:
在初始加载时,发送有限的历史记录。 (最后X条消息)。
跟踪每个用户的最后一条消息的日期。会话变量等。
对比该日期更新的邮件进行轮询,并附加到现有内容。我像这样使用jQuery:
$("#messages").append("New content.");
更新上一条消息日期。冲洗,重复。