又来请教前端大佬们了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
supuwoerc
V2EX    问与答

又来请教前端大佬们了

  •  
  •   supuwoerc 2020-12-08 16:08:56 +08:00 2131 次点击
    这是一个创建于 1850 天前的主题,其中的信息可能已经有所发展或是发生改变。

    小弟今天接到一个性能优化的任务,任务如下:

    vue+element-ui 的项目,里面有一个表格,表格是树状可展开的,展示的是组织架构。

    数据接口在后端的高强度优化下已经到了 1 秒左右,前端递归处理数据格式也优化过了,但是现在页面还是十分卡顿,从 dom 分析看来是 dom 太多导致的,浏览器在任务管理器面板看占的内存达到了 3.4G 。

    谷歌了相关方案,大多数是插件和虚拟列表的思路来处理,插件我 github 找了俩,尝试过发现内存依旧不变,并且有别的问题,遂放弃,虚拟滚动思路我看了几篇文章也清楚了,但是问题是我的页面是树状的,并非一个单纯的列表。

    虚拟列表的思路:监听滚动位置,根据滚动量在数据中切割出应该显示的部分数据再放到模板里面来渲染,貌似不适用 =。=||

    遂来到 V2 请求大伙的帮助。

    感谢大家~~

    11 条回复    2020-12-08 19:34:53 +08:00
    SilentDepth
        1
    SilentDepth  
       2020-12-08 16:27:50 +08:00
    如果每个节点的高度相同,把整个树看作是一个由节点组成、每个节点的 margin-left 不同的列表,也许可以再尝试应用 DOM 复用的模式?

    或者直接渲染成 Canvas (
    3dwelcome
        2
    3dwelcome  
       2020-12-08 16:52:50 +08:00
    用 SSR 啊,学 memcache 做中间层缓冲,用 websocket 实时响应客户端的树状结构点击展开事件,然后把 DIFF 部分塞入 DOM 返回给前端。
    直接无脑把 3.4G 的数据放到客户端,不卡才怪。
    fishlium
        3
    fishlium  
       2020-12-08 16:56:19 +08:00
    数据不要放到 data 里面,或者试下 object.freeze(),虚拟滚动的问题你可以把树展平,通过样式去展示成树
    kop1989
        4
    kop1989  
       2020-12-08 17:09:24 +08:00
    我想了想,从你的内存看,数据量确实有点太大了。

    1 、业务上有没有妥协的余地?比如改成分页取数,或者退一步,数据一次获取,但页面分页滚动的形式。(总体上就是在可控的情况下削减数据量+dom 渲染数量)。

    2 、根据树的展开情况+滚动位置,动态添加删除 dom (也就是你说的“虚拟滚动”)。我思考了一下,好像树状也不影响动态 dom 控制,只不过相对比单纯的 list 逻辑复杂一些。(要考虑树的展开状态与滚动条高度之间的逻辑关系,以及处理好展开、合并时的显示逻辑)
    codermagefox
        5
    codermagefox  
       2020-12-08 17:13:14 +08:00   1
    这东西就不该在前端优化。
    做成异步获取才是正道。
    NMmmm
        6
    NMmmm  
       2020-12-08 17:26:32 +08:00
    element 的 tree 不是有动态加载嘛
    waiaan
        7
    waiaan  
       2020-12-08 17:27:29 +08:00
    试试懒加载,dom 太多了,要展示的才加载 dom 。
    codepark
        8
    codepark  
       2020-12-08 17:52:51 +08:00
    先展示主干, 自己想看哪个分支再点哪个分支多好~
    Vipcw95
        9
    Vipcw95  
       2020-12-08 18:50:10 +08:00
    应该是数据太多。用 pl-table 这个库。可以动态加载数据
    gy134340
        10
    gy134340  
       2020-12-08 19:26:02 +08:00
    给我打款 500,我来帮你优化
    echol
        11
    echol  
       2020-12-08 19:34:53 +08:00 via iPhone
    #1 已经说了
    这是设计问题
    允许的话节点的展开做成下钻
    数据异步是另一方面的问题了,变化不大
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2273 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 10:30 PVG 18:30 LAX 02:30 JFK 05:30
    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