Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 提高聊天应用程序的性能_Javascript_Php_Mysql_Yii - Fatal编程技术网

Javascript 提高聊天应用程序的性能

Javascript 提高聊天应用程序的性能,javascript,php,mysql,yii,Javascript,Php,Mysql,Yii,我为我的朋友(程序员也是)制作了一个聊天应用程序,以便在我们之间传递代码和链接,但在发送了一些消息后,聊天似乎需要很长时间才能发送消息并在用户进入聊天时加载日志。当创建新会话时,我使用wamp作为主机,yii适用于php框架和jquery适用于javascript框架,我也使用mysql存储用户和聊天室,我不知道为什么即使是在同一台服务器上加载有时也需要很长时间,可能是因为我从php发送聊天日志数组,下面是我接收它的方式: <?php foreach ($chat as $data): ?

我为我的朋友(程序员也是)制作了一个聊天应用程序,以便在我们之间传递代码和链接,但在发送了一些消息后,聊天似乎需要很长时间才能发送消息并在用户进入聊天时加载日志。当创建新会话时,我使用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; ?>

我发这个是因为我认为问题来自这里,有人知道如何解决这个问题吗?。如果您需要查看其他代码,请告诉我,我会给您看。

我不确定您的方法是否最佳

您每次都在加载整个聊天历史记录,您应该只加载新行,而不是每次加载所有内容。每次打开页面时,都会创建一个哈希。该页面应始终使用该特定哈希请求新行。服务器知道他上次向该散列发送了什么,并且只能发送新消息(不能再次发送所有消息)。尝试使用json来发送聊天信息,而不是整个html结构,这也会加快速度

如果你有很多用户,MySQL很快就会被聊天请求淹没,试着通过使用memcache或APC缓存聊天线路来提高它的访问速度

如果在显示聊天行之后执行某种jquery,那么浏览器本身可能会变慢。向上和向下滚动以查看速度是否减慢。这件事发生在我向购物车添加50种产品之后

此外,视图中有2个IF命令,为什么不使用else?它的工作原理完全相同,对服务器的压力更小


同样,在您的示例中,您不是以数组的形式发送数据,而是以html的形式发送数据。

对于一个简单的基于ajax的解决方案:

在初始加载时,发送有限的历史记录。(最后X条消息)

按用户记录最后一封邮件的日期。会话变量之类的

轮询比该日期更新的邮件,并附加到现有内容。我像这样使用jQuery:

$("#messages").append("New content.");

更新最后消息日期。冲洗,重复。

每次按下按钮,您都会获取所有对话,而不仅仅是新消息……这是可以解决的。好的,我会尝试更改代码,只获取新消息,而不是所有消息,谢谢您最近真的不应该将MySql用于聊天系统!应该使用Node.js和Socket。io@mario-true,因为node.js和socket.io是持久存储。哦,等等…@N.B.这里不是进行此对话的地方,他想要一个更快的系统,我在评论部分建议了一个不同的解决方案。我不会阻止任何人在php+mysql中发布一个好的答案。
$("#messages").append("New content.");