vue3+three内存泄漏问题

目录

前言

问题

解决方案


前言

        前端展示3d是一件非常炫酷的事情,现在不少前端小伙计都在自己项目上使用three,来满足在线看房、智慧校园、大屏展示等业务,但是呢,不知道你们有没有留意过,当你们浏览完three展示的页面之后,跳转到其他页面会变得非常卡顿,如果你场景中添加的模型少还好,万一需要加载的模型很多的时候,浏览器就会变得非常卡顿,就比如我目前接触的这个项目:三维展示人体器官...

先展示基本需要:

(我寻思这模型数量夺少?) 

问题

不少小伙伴不知道问题出在哪里,下面呈上浏览器内存图片...

 (跳转到three展示页面之前的内存快照)

 

(这个是跳转到three之后,然后返回之前的页面的内存) 

        不少小伙伴可能不知道问题出在哪里,我先说明一下,当我们浏览完three展示页面之后,返回其他页面,内存增加了,打开浏览器内存选项卡你会发现three场景中,scene等对象并没有释放,如果只是一个静态的three场景还好,但我的业务是:每个病人都有自己的模型,这意味着我的用户是这样使用我的系统的:点开管理系统页面,看到病人列表,点击一个病人查看他的器官情况,然后回退病人列表页面,之后再看另外一个病人...用户点击多次之后,内存当中的有关three的对象就会越堆越多,模型文件也会越来越多,然后......客户就打回重做了.......

解决方案

    //清楚动画帧id
    cancelAnimationFrame(animationID)
    //将每个模型释放
    group.traverse(function (v) {
        if (v.type === 'Mesh') {
            v.geometry.dispose()
            v.material.dispose()
        }
        v = null
    })
    // memoryManager.dispose()
    scene.remove(group)
    renderer.forceContextLoss()
    renderer.dispose()
    renderer.domElement = null
    renderer = null
    scene.clear()
    scene = null
    camera = null


    THREE.Cache.clear();

        这段代码放入到页面离开时候的生命周期函数就好(当然,你得对好你的变量...)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值