浏览器下使用 websocket.onmessage 不断的往 textarea 里添加内容,模拟终端下的 tail -f logfile 滚动效果,有几个问题请教一下 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rrfeng

浏览器下使用 websocket.onmessage 不断的往 textarea 里添加内容,模拟终端下的 tail -f logfile 滚动效果,有几个问题请教一下

  •  
  •   rrfeng 2014 年 5 月 15 日 3087 次点击
    这是一个创建于 4363 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 如何使 textarea 的滚动条自动滚动呢?最好的效果是:滚动条触底则自动滚动;

    选用 textarea 呈现数据是因为数据里很多空格和 TAB 开头,其他元素内这些都不会被渲染(除非用 js 转换成   …… )

    2. 假设服务器发送速度稍快的话,浏览器就会很卡……何解……
    第 1 条附言    2014 年 5 月 16 日
    测试发现,使用 textarea.value += data 来更新数据,textarea.value 会越变越大,然后就会耗费大量的 CPU 资源。在我的电脑上 700 行日志出现后就基本假死了,Chrome 进程 CPU 50%+

    使用添加节点的方式来增加数据就不卡了,每次增加一个 <span>text</span>,增加到 10000+ 行左右是才能发觉略有卡顿……

    显示数据并自动滚动的代码发出来给大家看下

    ------------------------------------------------------------------------------------
    socket.Onmessage= function(event) {

    var ta = document.getElementById('rollingLog');

    if ( window.scrollY + document.body.clientHeight == document.body.scrollHeight){
    at_bottom = true;
    }
    else{
    at_bottom = false;
    }
    data = event.data.replace("\t","    ")
    tmp = document.createElement("span");
    tmp.innerHTML = data + "<br>";
    ta.appendChild(tmp);

    if ( at_bottom ) { window.scrollTo(0,document.body.scrollHeight - document.body.clientHeight) }

    };

    ---------------------------------------------------------------------------------

    不会写 js ,边请教边 Google 弄出来的,尽情吐槽(指点)

    现在还有一个问题:
    当页面很长的时候,假如滚动条不在底部,此时手动拖动滚动条到底部是很困难的……于是就不能『拖到底部又开始自动滚动了』,显示数据少的时候很好用。
    如何解决?
    span class="gray">4 条回复    2014-05-15 19:22:37 +08:00
    66beta
        1
    66beta  
       2014 年 5 月 15 日
    1. 滚到底
    var e = document.getElementById('box');
    e.scrollTop = e.scrollHeight;
    $("#box").scrollTop($("#box").scrollHeight);

    2. 没玩过websocket,不懂,但不是说是异步的么,除非同时开启了好多的进程
    zzNucker
        2
    zzNucker  
       2014 年 5 月 15 日
    你慢点触发onmessage事件嘛,更改DOM要消耗的。
    rrfeng
        3
    rrfeng  
    OP
       2014 年 5 月 15 日
    @zzNucker
    意思是一次多发数据,少操作 DOM ?
    rrfeng
        4
    rrfeng  
    OP
       2014 年 5 月 15 日
    @66beta
    滚动的问题解决了,现在就是卡的问题

    刷 700 行进去就开始卡了,CPU 爆高……
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2785 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 13:09 PVG 21:09 LAX 06:09 JFK 09:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86