Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.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 Ajax聊天页面冻结浏览器窗口_Javascript_Php_Ajax_Chat_Freeze - Fatal编程技术网

Javascript Ajax聊天页面冻结浏览器窗口

Javascript Ajax聊天页面冻结浏览器窗口,javascript,php,ajax,chat,freeze,Javascript,Php,Ajax,Chat,Freeze,我有一个网站。我用jQueryAjax编写了聊天页面。有3个ajax调用 AJAX请求发送新聊天文本 检测用户输入的AJAX请求 用于检测新消息的AJAX请求 我使用JSON发送和接收用于聊天的低级数据。我使用了最好的AJAX聊天技术,但当我在输入框中键入消息或在聊天历史中上下滚动时,网页会冻结。我不明白这页为什么冻结了 首先,我获取所有聊天记录。我更改了它,这样它只会在有新消息的情况下获取新消息,但这并没有解决我的问题 其次,我尝试设置async=true或false-这并不能解决我的问题。它

我有一个网站。我用jQueryAjax编写了聊天页面。有3个ajax调用

  • AJAX请求发送新聊天文本
  • 检测用户输入的AJAX请求
  • 用于检测新消息的AJAX请求
  • 我使用JSON发送和接收用于聊天的低级数据。我使用了最好的AJAX聊天技术,但当我在输入框中键入消息或在聊天历史中上下滚动时,网页会冻结。我不明白这页为什么冻结了

    首先,我获取所有聊天记录。我更改了它,这样它只会在有新消息的情况下获取新消息,但这并没有解决我的问题

    其次,我尝试设置
    async=true
    或false-这并不能解决我的问题。它必须在不冻结的情况下正常工作,但会冻结

    截图如下


    您是否正在对AJAX请求排队

    如果使用jQuery,可以使用
    $.Deferred
    ,也可以使用
    .queue()
    ,或者直接将AJAX函数按顺序放置在函数中。或者,您可能需要在函数上设置/调整
    setTimeout


    一个非常棒的开发人员(不是我),能够很好地处理这些事件。一个有效的JSFIDLE示例是。

    根据您的需求,我可以想象在实现上有两个可能的问题

  • 您有一个用户正在键入功能,这意味着您必须绑定一个键事件(向上键、向下键、按下键)。如果您没有解除事件处理程序的锁定,则会对键入的每个字符发出请求,并可能冻结浏览器。对于jQuery的解盎司函数,有一些易于使用的插件。这里有一个例子
  • DOM操作在所有浏览器中都非常耗时。与Angular和React不同,jQuery没有为您优化它。您必须尽量减少添加/更新/删除DOM元素。假设您获取消息,在DOM树中执行任何操作之前,检查每个消息是否有任何更改/它们是否存在

  • $.ajax()
    async
    选项默认为true,具体取决于。您不需要自己添加它。

    发布相关代码