javascript - textarea中不断写入数据,然后浏览器非常卡,求解决方案。
天蓬老师
天蓬老师 2017-04-11 12:01:25
[JavaScript讨论组]

我用了websocke框架,不断接收服务端传过来的数据放在textarea中。数据量比较多的时候,感觉整个浏览器都有一定的卡顿,过一会又好了。大家分析下有啥好的办法呢?不甚感激。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
巴扎黑

这是因为webSocket频繁地接收信息而频繁地操作dom导致的,解决办法可以是设计一个信息队列。每当webSocket接收到信息的时候先放到信息队列中,然后按照一定的时间间隔来将信息队列中的队首信息放在textarea中。
实现参考如下:

var msgQueue = [],
    $textarea = $("textarea"),
    timestamp = 1000;

function checkMsg() {
    if (msgQueue.length > 0) {
        var msg = msgQueue.shift();
        var oldMsg =  $textarea.html();
        $textarea.html(oldMsg+msg);
    }
}


websock.onmessage = function(e) {
    msgQueue.push(e.data);
}

setInterval(checkMsg, timestamp);

另外,当信息太多的时候,也就是dom中的节点内容太多时,也会导致卡顿,这时候可以考虑将旧的数据从dom中转移到javascript的变量存储中。

PS:评论中有一个更好的解决方法。

高洛峰

分成多个框呢,可能是一个框占用的太多造成的吧.

伊谢尔伦

留下一定数量,之前的的清除;

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号