【问题标题】:improve perfomance in chat application提高聊天应用程序的性能
【发布时间】:2014-02-25 21:07:31
【问题描述】:

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

我发送这个是因为我认为问题来自这里,有谁知道如何解决这个问题?如果您需要查看其他代码,请告诉我并展示它们。

【问题讨论】:

  • 每次点击按钮时,您都会获取所有对话,而不仅仅是新消息......可以修复
  • 好的,我尝试更改代码以仅获取新消息而不是所有消息,谢谢
  • 现在真的不应该将 MySql 用于聊天系统!应该使用 Node.js 和 Socket.io
  • @mario - true,因为 node.js 和 socket.io 是持久存储。哦,等等..
  • @N.B.这不是进行这种对话的地方,他想要一个更快的系统,我在评论部分提出了不同的解决方案。我不会阻止任何人在 php+mysql 中发布一个好的答案。

标签: javascript php mysql yii


【解决方案1】:

我不确定你的方法是最好的。

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

如果你有很多用户,MySQL 很快就会被聊天请求淹没,尝试通过使用 memcache 或 APC 来缓存聊天行以加快访问速度。

如果您在显示聊天行之后执行某种 jquery,则浏览器本身可能会变慢。上下滚动查看它是否变慢。将 50 种产品添加到购物车后,我发生了这种情况。

另外你在视图中有 2 个 IF 命令,为什么没有一个 else?它的工作原理完全相同,并且对服务器的压力会更小。

此外,在您的示例中,您不是将数据作为数组发送,而是将其作为 html 发送。

【讨论】:

    【解决方案2】:

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

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

    跟踪每个用户的最后一条消息的日期。会话变量等。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      相关资源
      最近更新 更多