Vue 中元素拖动优化?

2022-01-07 18:04:59 +08:00
 thinkershare

这个问题我之前提过 原问题 , 本来最初以为解决了, 现在上了生产环境, 发现还是有性能问题, 看看大家有没有什么优化意见, 代码大概如下所示, box 内有 1000 个左右的设备组件, 需要鼠标点击时拖动 box, box 目标使用了相对定位, 然后使用 3d 变形来实现移动元素, device 组件都绝对定位, 他们都有自己的 x,y 坐标位置, 发现即便使用 3D, device 太多的时候, 整个拖动会导致 CPU 100%, 然后就会明显的不跟手, 我研究了几天, 发现各种优化方案都不行, 最后决定在拖动时候隐藏所有 device 组件, v-show 的隐藏仍然会卡, v-if 的隐藏不会卡顿, 但是 v-if 在隐藏后重新显示却需要消耗 2s, 这样体验就会特别差, 想问问大家的建议

<div class="box">
	<device v-for="device in devices" :data="device" :key="device.id" />
</div>
974 次点击
所在节点    问与答
8 条回复
KouShuiYu
2022-01-07 18:27:37 +08:00
你需要添加一个复现的 DEMO
https://codepen.io/
thinkershare
2022-01-07 18:46:13 +08:00
@KouShuiYu 嗯, 我晚上回去试一试, 可能有点麻烦, 要 100%重现, 因为 device 这个组件非常复杂, 否则我就直接迁移到 canvas 上去了
walpurgis
2022-01-07 19:13:44 +08:00
能上虚拟列表么
thinkershare
2022-01-07 20:14:32 +08:00
@walpurgis 不能的哦, 因为这是地图, 大小是 8000*8000 像素左右, 需要监控所有设备
walpurgis
2022-01-07 20:51:36 +08:00
地图啊,可以考虑使用点聚合方案
参考百度地图实现 https://lbsyun.baidu.com/index.php?title=jspopular3.0/guide/conflux
learnshare
2022-01-07 21:16:37 +08:00
8000px^2 ,以及 1000 个独立设备,估计 DOM 渲染性能跟不上
Canvas 渲染肯定很有效,但做起来更复杂
thinkershare
2022-01-08 14:26:29 +08:00
[代码地址]( http://dlsmartlink.com/test.zip), 需要使用 npm install 安装下依赖, 然后 npm run dev 就可以了
thinkershare
2022-01-11 16:53:02 +08:00
@learnshare 我研究了几天, 发现和事件有关系, 不绑定事件 2000 个 device 拖动我明显丢帧, 看来只能抛弃组件, 使用观察者模式优化事件监听

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/826882

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX