当前位置: 首页 > 知识库问答 >
问题:

javascript - 为什么存在el-form的页面被切换之后还在占用内存?

嵇永望
2024-05-25

存在el-form的页面切换之后内存还在被占用,操作久了之后内存占用越来越大

一个vue3的两个页面都只含有el-form和el-table,无定时器和监听器,当操作久了之后发现内存一直在增长,然后去除掉table,发现只要含有el-form,页面频繁切换内存会增长且不会释放,不知道如何去释放这个被占用的内存,像echarts有dispose方法,但form没听说过,而且没有明白为什么form会造成内存一直占用。

补充问题,代码如下:
切换的页面就是InspectionReportVue、StatisticalReportVue、DefectReportVue这几个组件,这几个组件里只有form和table。另外index.vue也不是一个路由页面,它是嵌套在路由页面A里面的一个组件,同样也是被v-if来控制显示与否的。我不知道是不是我写的这个插槽有问题导致内存泄漏的

//index.vue<template>  <TableLayoutSelf title="XXX" :menuList="menuList">    <template v-slot="data">      <InspectionReportVue key="666" v-if="data.active === '1'" />      <StatisticalReportVue key="777" v-if="data.active === '2'" />      <DefectReportVue key="888" v-if="data.active === '3'" />    </template>  </TableLayoutSelf></template><script setup name="ReportForm">import TableLayoutSelf from '../components/TableLayoutSelf/index.vue'import InspectionReportVue from './inspectionReport.vue'import StatisticalReportVue from './statisticalReport.vue'import DefectReportVue from './defectReport.vue'import nav1 from './images/nav1.png'import nav2 from './images/nav2.png'import nav3 from './images/nav3.png'const menuList = ref([  {    id: '1',    img: nav1,    text: 'XXX',  },  {    id: '2',    img: nav2,    text: 'XXX',  },  {    id: '3',    img: nav3,    text: 'XXX',  },])</script><style scoped lang="scss"></style>
//TableLayoutSelf.vue<template>  <div class="layout">    <div class="aside">      <div class="title">{{ title }}</div>      <div class="menu">        <div class="item" v-for="item in menuList" :key="item.id" :id="item.id" @click="handleClick" :class="{'active': item.id === activeId}">          <img :src="item.img" :id="item.id" />          <span :id="item.id">{{ item.text }}</span>        </div>      </div>    </div>    <div class="content">      <slot :active="activeId"></slot>    </div>  </div></template><script setup name="TableLayoutSelfSelf">const props = defineProps({  title: String,  menuList: Array,})const { menuList } = toRefs(props)const activeId = ref('1')const handleClick = (e) => {  activeId.value = e.target.id}</script><style scoped lang="scss">.layout {  display: flex;  height: calc(100vh - vh(150));  .aside {    width: vw(240);    flex-shrink: 0;    .title {      line-height: vh(55);      text-align: center;      background: #2d3e5b;      color: #fff;      font-size: vw(17);    }    .menu {      .item {        line-height: vh(76);        border: 1px solid #22467e;        display: flex;        align-items: center;        padding-left: vw(25);        > img {          width: vw(36);          height: vh(38);        }        > span {          margin-left: vw(25);          font-size: vw(18);          color: #fff;        }      }      .item:hover,      .active {        background: linear-gradient(to right, #174a93, rgba(0, 0, 0, 0));      }      .item:not(:last-child) {        border-bottom: 0;      }    }  }  .content {    width: calc(100% - vw(240));  }}</style>

共有1个答案

昝宜
2024-05-25

先看看切换页面有没有使用<keep-alive>
如果无从入手,可以直接用开发者工具拍几个内存快照对比一下切换页面前后的内存变化,直接追踪堆中的对象引用

 类似资料:
  • 问题内容: 这最终会消耗我所有的可用内存,然后进程被杀死。我曾尝试将标签从更改为“较小”标签,但这并没有什么不同。 我在做什么错/如何处理这个大文件? 我可以轻松地将其切碎并以较小的块进行处理,但这比我想要的还要难看。 问题答案: 当遍历整个文件时,将构建一棵树,并且不会释放任何元素。这样做的好处是元素可以记住其父元素是谁,并且您可以形成引用祖先元素的XPath。缺点是它会消耗大量内存。 为了在解

  • 不管我怎么努力,页面都被缓存了。因此,php函数运行一次后,总是显示缓存的结果,直到您按下Shift F5 > 我禁用了奥普卡什(在 phpinfo()上不再有奥普卡切了) 我禁用了APC(phpinfo()上不再有APC) 我使用了标题 Cache-Control:no-store,no-cache,必须重新验证"); // HTTP/1.1标头(Cache-Control:post-check

  • 问题内容: 我有一小段代码每隔五分钟拍摄一次我的桌面的屏幕截图。但是,我对它占用的内存量有些困惑-通常它会爬升到200mb RAM,我敢肯定这是多余的…谁能告诉我a)减少内存占用空间的明智方法或b)它为什么涨 可言 ? 问题答案: 其他答案是正确的:Java将使用允许的尽可能多的内存,这时它将进行垃圾回收。要解决此问题,可以在JVM设置中指定较小的最大堆大小。您可以使用- Xmx设置来执行此操作。

  • 我的问题作为标题,通过搜索得到了一些知识: > Linux具有共享内存如何测量应用程序或进程的实际内存使用情况? JVM将保留在Xms中设置的内存量,对于堆内存,-Xms JVM是什么意思? 下面是我在Ubuntu12.04(64bit)JDK 1.7.0_04上的测试运行。和顶部显示如下:

  • 问题内容: 在下面的示例中(来自我的Coursepack),我们希望给该Square实例c1一些其他对象的引用p1,但前提是这两个对象是兼容类型的。 我在这里不明白的是,我们首先检查p1确实为Square,然后仍将其强制转换。如果是Square,为什么要投射? 我怀疑答案在于表观类型和实际类型之间的区别,但是我还是很困惑…… 编辑: 编译器将如何处理: Edit2: 是instanceof检查实际

  • 我想问为什么接口在 500 之后依然会进行跳转呢?难道不是 catch 然后弹窗报错了么?