精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

ElementPlus 被發現重大 BUG!可能會讓頁面崩掉!

開發 前端
一開始,我也沒有懷疑這種高 Star 的開源組件,覺得肯定是我寫的代碼有問題。為了追查到底,我主要用了?ElDialog?組件,封裝成了一個命令式的?Dialog組件,避免頻繁使用?v-model參數。然后,我就把懷疑的目光投向了?ElDialog。

前端開發者們注意啦,今天給大家帶來一個關于Element-plus組件的內存泄漏問題,經過測試,以下組件存在內存泄漏的現象:

  • el-carousel
  • el-select + el-options
  • el-descriptions
  • el-tag
  • el-dialog
  • el-notification
  • el-loading
  • el-result
  • el-message
  • el-button
  • el-tabs
  • el-menu
  • el-popper

以下是我在 Vue 3.5.13 和 Element Plus 2.9.7 版本下的排查環境:

  • Vue版本:3.5.13
  • Element Plus版本:2.9.7
  • 操作系統:Windows 10
  • 瀏覽器:Edge 134.0.3124.85 (正式版)
  • 構建工具:Webpack

排查過程

一開始,我也沒有懷疑這種高 Star 的開源組件,覺得肯定是我寫的代碼有問題。為了追查到底,我主要用了 ElDialog 組件,封裝成了一個命令式的 Dialog組件,避免頻繁使用 v-model參數。然后,我就把懷疑的目光投向了 ElDialog

結果,經過測試,果然,Dialog組件在關閉和銷毀時,會導致內存使用飆升。特別是當 Dialog 中包含各種表單組件時,一旦打開,就會創建大量的 Element 元素,導致內存泄漏。為了解決這個問題,我用了 FinalizationRegistry類追蹤 Dialog 組件實例的銷毀,代碼如下:

const finalizerRegistry = new FinalizationRegistry((heldValue) => {
  console.log('Finalizing instance: ',heldValue);
});


// 在創建處監聽
const heldValue = Symbol(`DialogCommandComponent_${Date.now()}`);
finalizerRegistry.register(this, heldValue);
console.log(`Constructed instance:`,heldValue);

通過測試,發現Dialog組件的銷毀過程沒有產生銷毀信息,這意味著它沒有正確地釋放資源。于是,我決定進一步分析,是否是Dialog組件內部的引用問題導致元素未能銷毀。我嘗試用純el-dialog組件進行測試,結果同樣發現內存泄漏。

圖片圖片

擴展測試

為了進一步驗證其他組件是否也存在類似問題,我編寫了一段代碼,檢查了多個 Element-plus 組件的內存占用情況。以下是相關代碼:

<template>
  <div>
    <el-button @click="fn2">Reset</el-button>
</div>
<el-dialog v-model="model" destroy-on-close @closed="fn1" append-to-body v-if="destroyDialogModelValue"></el-dialog>
<el-button @click="fn0" v-if="!button" primse>Click</el-button>
<div class="weak" v-if="!button">xxx</div>
<el-input v-if="!button" />
<el-border v-if="!button" />
<el-select v-if="!button">
    <el-option>1111</el-option>
</el-select>
<el-switch v-if="!button" />
<el-radio v-if="!button" />
<el-rate v-if="!button" />
<el-slider v-if="!button" />
<el-time-picker v-if="!button" />
<el-time-select v-if="!button" />
<el-transfer v-if="!button" />
<el-tree-select v-if="!button" />
<el-calendar v-if="!button" />
<el-card v-if="!button" />
<el-carousel height="150px" v-if="!button">
    <el-carousel-item v-for="item in 4" :key="item">
      <h3 class="small justify-center" text="2xl">{{ item }}</h3>
    </el-carousel-item>
</el-carousel>
<el-descriptions title="User Info" v-if="!button">
    <el-descriptions-item label="Username">kooriookami</el-descriptions-item>
</el-descriptions>
<el-table style="width: 100%" v-if="!button">
    <el-table-column prop="date" label="Date" width="180" />
    <el-table-column prop="name" label="Name" width="180" />
    <el-table-column prop="address" label="Address" />
</el-table>
<el-avatar v-if="!button" />
<el-pagination layout="prev, pager, next" :total="50" v-if="!button" />
<el-progress :percentage="50" v-if="!button" />
<el-result icon="success" title="Success Tip" sub-title="Please follow the instructions" v-if="!button">
    <template #extra>
      <el-button type="primary">Back</el-button>
    </template>
</el-result>
<el-skeleton v-if="!button" />
<el-tag v-if="!button" />
<el-timeline v-if="!button" />
<el-tree v-if="!button" />
<el-avatar v-if="!button" />
<el-segmented size="large" v-if="!button" />
<el-dropdown v-if="!button">
    <span class="el-dropdown-link">
      Dropdown List
      <el-icon class="el-icon--right">
        <arrow-down />
      </el-icon>
    </span>
    <template #dropdown>
      <el-dropdown-menu>
        <el-dropdown-item>Action 1</el-dropdown-item>
        <el-dropdown-item>Action 2</el-dropdown-item>
        <el-dropdown-item>Action 3</el-dropdown-item>
        <el-dropdown-item disabled>Action 4</el-dropdown-item>
        <el-dropdown-item divided>Action 5</el-dropdown-item>
      </el-dropdown-menu>
    </template>
</el-dropdown>
<el-menu class="el-menu-demo" mode="horizontal" v-if="!button">
    <el-menu-item index="1">Processing Center</el-menu-item>
    <el-sub-menu index="2">
      <template #title>Workspace</template>
      <el-menu-item index="2-1">item one</el-menu-item>
      <el-menu-item index="2-2">item two</el-menu-item>
      <el-menu-item index="2-3">item three</el-menu-item>
      <el-sub-menu index="2-4">
        <template #title>item four</template>
        <el-menu-item index="2-4-1">item one</el-menu-item>
        <el-menu-item index="2-4-2">item two</el-menu-item>
        <el-menu-item index="2-4-3">item three</el-menu-item>
      </el-sub-menu>
    </el-sub-menu>
    <el-menu-item index="3" disabled>Info</el-menu-item>
    <el-menu-item index="4">Orders</el-menu-item>
</el-menu>

<el-steps style="max-width: 600px" active="0" finish-status="success" v-if="!button">
    <el-step title="Step 1" />
    <el-step title="Step 2" />
    <el-step title="Step 3" />
</el-steps>

<el-tabs class="demo-tabs" v-if="!button">
    <el-tab-pane label="User" name="first">User</el-tab-pane>
    <el-tab-pane label="Config" name="second">Config</el-tab-pane>
    <el-tab-pane label="Role" name="third">Role</el-tab-pane>
    <el-tab-pane label="Task" name="fourth">Task</el-tab-pane>
</el-tabs>

<el-alert title="Success alert" type="success" v-if="!button" />
<el-drawer title="I am the title" v-if="!button">
    <span>Hi, there!</span>
</el-drawer>

<div v-loading="model" v-if="!button"></div>

<el-popconfirm confirm-button-text="Yes" cancel-button-text="No" icon-color="#626AEF"
    title="Are you sure to delete this?" v-if="!button">
    <template #reference>
      <el-button>Delete</el-button>
    </template>
</el-popconfirm>

<el-popover class="box-item" title="Title" content="Top Center prompts info" placement="top" v-if="!button">
    <template #reference>
      <div>top</div>
    </template>
</el-popover>

<el-tooltip class="box-item" effect="dark" content="Top Left prompts info" placement="top-start" v-if="!button">
    <div>top-start</div>
</el-tooltip>
</template>

<script setup>
import { ref } from"vue";
import { ElMessage, ElMessageBox, ElNotification } from"element-plus";

const model = ref(false);
const destroyDialogModelValue = ref(false);
const button = ref(false);

function fn0() {
  model.value = true;
  destroyDialogModelValue.value = true;
  ElMessage("This is a message.");
  ElMessageBox.alert("This is a message", "Title");
  ElNotification({
    title: "Title",
    message: "This is a reminder",
  });
}
function fn1() {
console.log("closed");
  destroyDialogModelValue.value = false;
  button.value = true;
}
function reset() {
  model.value = false
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

每次點擊“Click”按鈕后,我關閉所有彈窗,再點擊“Reset”按鈕,然后重復上述操作,發現內存占用一直在上漲。經過反復操作,最終確定了Element-plus的多個組件存在內存泄漏問題。

未能解決

面對這個問題,我也查找了大量的資源,包括 Element-plus的GitHub issues和相關論壇,但現有的解決方法基本無效。經過思考,以下是我想到的幾種可能的解決方案:

  • 是否可以為有泄漏的組件手動實現銷毀機制?
  • ElDialog是否只在全局使用一兩個實例?
  • 是否能將所有路由都打成單頁面應用(SPA)?
  • 是否需要修改源碼?

目前,這些方案都沒有給我帶來太大突破,但仍在繼續研究中。如果大家有類似的經驗或解決方法,歡迎在評論區討論。

責任編輯:武曉燕 來源: 前端之神
相關推薦

2025-06-16 08:51:09

2025-06-20 08:14:55

2016-12-27 18:43:33

iOS 10.2iPhone蘋果

2021-04-20 10:31:29

WhatsAppAndroid惡意軟件

2020-07-06 07:48:16

MySQL細節SQL

2019-07-01 09:10:00

前端開發技術

2014-09-26 09:22:35

2018-09-03 15:20:29

2018-07-10 11:05:18

開發者技能命令

2009-04-08 15:35:18

LinuxWindows文件系統

2012-07-27 08:53:06

Windows 8微軟

2017-03-23 16:03:01

2018-07-10 10:45:00

規范Commit項目

2012-12-10 10:19:01

Google NowChrome

2014-02-18 09:24:34

2023-05-31 09:48:01

開源AI

2015-09-28 10:03:29

2019-09-09 10:08:05

邊緣計算網絡物聯網

2022-06-01 08:00:58

KubernetesCPULinux

2021-02-22 10:01:16

人工智能黑客網絡安全
點贊
收藏

51CTO技術棧公眾號

欧美激情18p| 制服丝袜在线91| 欧美性色黄大片人与善| 综合久久中文字幕| 亚洲人metart人体| 精品国产91亚洲一区二区三区婷婷| www.中文字幕在线| 调教视频免费在线观看| 成人动漫一区二区三区| 国产精品久久久久久久久久小说| 免费一级黄色大片| 奇米亚洲欧美| 欧美成人午夜电影| 国产免费又粗又猛又爽| 3344国产永久在线观看视频| 欧美激情一区二区三区四区| 国产精品二区三区| 亚洲最大成人av| 国产精品毛片| 欧美精品午夜视频| 九九热免费在线| 给我免费播放日韩视频| 欧美高清性hdvideosex| 99精品免费在线观看| 天堂8中文在线| 国产精品午夜在线| 久久亚洲免费| 黄色av网址在线| 国内精品伊人久久久久影院对白| **欧美日韩vr在线| 免费一级a毛片夜夜看| 色综合久久网| 国产午夜精品视频免费不卡69堂| www.17c.com喷水少妇| 91精品麻豆| 在线看国产一区| 青青草原av在线播放| 男女在线视频| 亚洲激情图片一区| 在线观看福利一区| caoporn国产精品免费视频| 99精品桃花视频在线观看| 91在线精品观看| 国产美女免费视频| 黄网站免费久久| 国产裸体写真av一区二区| 六月丁香婷婷综合| 99亚洲视频| 欧美激情视频播放| 天天干中文字幕| 综合激情在线| 欧美日韩成人黄色| 欧美成人片在线观看| 久久精品影视| 欧美日韩不卡合集视频| 成人免费毛片东京热| 中文字幕一区二区三三| 久久97精品久久久久久久不卡| 成人免费黄色小视频| 亚洲国产一区二区三区在线播放| 久久精品国产91精品亚洲| 老司机福利在线观看| 97精品国产| 久久九九热免费视频| 91精品国产闺蜜国产在线闺蜜| 91精品91| 久久人人爽人人| 日本一级淫片色费放| 国产欧美亚洲一区| 日本精品在线视频 | 在线成人直播| 欧美理论电影在线播放| 日韩免费一级片| 欧美亚洲自偷自偷| 国产欧美va欧美va香蕉在| 91成人在线免费| 国产成人综合精品三级| 精品高清视频| 国产视频第一页在线观看| 国产精品久久看| 天堂а√在线中文在线| 岛国在线视频网站| 91久久精品午夜一区二区| 性刺激的欧美三级视频| 欧美2区3区4区| 日韩大陆毛片av| 国产伦理片在线观看| 一本到12不卡视频在线dvd| 久久久久九九九九| 在线观看污污网站| 韩国理伦片一区二区三区在线播放 | 国产一区二区导航在线播放| 国产精品综合久久久久久| 日本天堂在线| 一区二区三区欧美日韩| 欧美成人精品欧美一级乱| 伊人久久大香| 亚洲男人天堂古典| 污软件在线观看| 国产精品日韩| 51成人做爰www免费看网站| 欧美香蕉爽爽人人爽| 综合av第一页| 成人3d动漫一区二区三区| 精品视频91| 亚洲人在线视频| 免费网站看av| 精品制服美女久久| 久久久久久草| 亚洲小说区图片| 欧美在线999| 屁屁影院国产第一页| 亚洲区综合中文字幕日日| 日本中文字幕不卡免费| 高潮毛片7777777毛片| 国产精品盗摄一区二区三区| 九色在线视频观看| 国产乱码精品一区二区三区亚洲人| 亚洲免费电影一区| 久久精品久久国产| 国产在线精品一区二区 | 久久精品青草| 国产精品日韩专区| 极品白浆推特女神在线观看 | av一区二区三区| 好色先生视频污| 成人黄色免费观看| 精品在线小视频| 亚洲精品在线观看av| 国产一区二区三区久久久 | 欧美亚洲综合在线| 捆绑凌虐一区二区三区| 欧美日韩亚洲一区| 亚洲综合第一页| 老司机午夜在线| 精品视频一区二区不卡| 免费网站在线高清观看| 噜噜噜躁狠狠躁狠狠精品视频| 国产精品av一区| 蜜臀av在线播放| 亚洲成人精品视频| 久久久久久久久久久久久久免费看 | 成人精品久久久| 777电影在线观看| 色av成人天堂桃色av| 久久丫精品国产亚洲av不卡| 99精品国产在热久久婷婷| 国产91亚洲精品一区二区三区| 在线观看男女av免费网址| 欧美一区二区在线看| 欧美视频www| 国产成人8x视频一区二区| 免费日韩在线观看| 6080亚洲理论片在线观看| 欧美大片免费观看在线观看网站推荐| 国产wwwxxx| 亚洲一区欧美一区| 稀缺小u女呦精品呦| 最新亚洲一区| 久久综合毛片| 色老太综合网| 少妇高潮久久久久久潘金莲| 一级黄色片免费看| 亚洲欧美激情视频在线观看一区二区三区| 久久精品一卡二卡| 亚洲国产精品一区| 久久国产日韩欧美| 99re久久| 欧美成人精品在线| 四季av日韩精品一区| 欧美性xxxx极品高清hd直播| 免费视频91蜜桃| 久久99精品国产.久久久久| 法国空姐在线观看免费| 经典三级久久| 38少妇精品导航| 午夜免费福利在线观看| 日韩欧美国产精品| 国产小视频在线免费观看 | 激情小说中文字幕| 久久亚洲一级片| 91 视频免费观看| 亚洲三级免费| 亚洲一区精彩视频| 精品久久对白| 国产日韩在线观看av| av理论在线观看| 亚洲乱码av中文一区二区| 亚洲天天综合网| 亚洲va韩国va欧美va精品| 亚洲天堂岛国片| 国产成人啪午夜精品网站男同| 国产精品免费观看久久| 久久久久久久久久久久久久| 久久久久久久久久码影片| 91精品亚洲一区在线观看| 91精品国产91久久| 黄色网在线免费看| 亚洲欧美日韩国产中文| 国产日韩免费视频| 色婷婷香蕉在线一区二区| 久久国产高清视频| 久久综合精品国产一区二区三区| 97超碰人人看| 日本vs亚洲vs韩国一区三区| 久操网在线观看| 久久久9色精品国产一区二区三区| 久久精品午夜一区二区福利| 精品午夜视频| 国产精品无av码在线观看| 成人三级高清视频在线看| 久久影视电视剧免费网站清宫辞电视| 青青草免费在线视频| 欧美mv日韩mv国产网站| 一本色道久久综合熟妇| 日韩欧美在线字幕| 国产小视频在线看| 日韩毛片视频在线看| www在线观看免费视频| 国产麻豆午夜三级精品| 国产精品第12页| 亚洲伦伦在线| 精品无码av无码免费专区| 五月精品视频| 亚洲午夜激情| 成人羞羞动漫| 日韩中文字幕一区| 蜜桃一区二区| 久久久一本精品99久久精品| xvideos.蜜桃一区二区| 动漫精品视频| 日本精品一区二区三区在线观看视频| 国产日韩av高清| 巨胸喷奶水www久久久| 日韩av电影院| 大胆人体一区二区| 欧美一二三视频| 一级毛片久久久| 青青草成人在线| 综合另类专区| 国产91精品最新在线播放| 国产精品伦理| 国产成人精品在线| 91精品影视| 国产美女主播一区| 九九热这里有精品| 91天堂在线观看| 成人综合日日夜夜| 成人激情综合网| 日韩激情精品| 国产二区不卡| 青青操综合网| 欧洲精品一区色| 日韩a一区二区| 99精品一级欧美片免费播放| 亚洲无中文字幕| www.男人天堂网| 亚洲精品女人| 国产a视频免费观看| 蜜臀久久久99精品久久久久久| 五月激情婷婷在线| 国产一区二三区| 国产精品扒开腿做爽爽爽a片唱戏 亚洲av成人精品一区二区三区 | 国产中文字幕一区二区| 91麻豆精品一区二区三区| 摸摸摸bbb毛毛毛片| 中文字幕五月欧美| 18精品爽视频在线观看| 欧美日韩国产一区中文午夜| 无码人妻丰满熟妇精品区| 欧美三级乱人伦电影| 国产女人18毛片18精品| 亚洲电影成人av99爱色| 欧美美女搞黄| 播播国产欧美激情| 暖暖在线中文免费日本| 日本不卡免费高清视频| 日韩黄色三级| 国产精品裸体一区二区三区| 蜜桃a∨噜噜一区二区三区| 不卡中文字幕在线| 精品999网站| 亚欧在线免费观看| 国产一区在线精品| 一区二区视频观看| 国产精品国产三级国产有无不卡| 劲爆欧美第一页| 91成人在线观看喷潮| 国产偷拍一区二区| 亚洲精品小视频| 粗大黑人巨茎大战欧美成人| 538国产精品一区二区免费视频| 欧美爱爱视频| 久久久福利视频| 亚洲综合中文| 中文字幕一区二区三区四区在线视频| 国产精品性做久久久久久| 中文字幕成人动漫| 亚洲一区在线看| 亚洲一区二区视频在线播放| 亚洲成人网在线| av网站在线免费| 国产精品黄视频| 极品尤物一区| 美国av在线播放| 日本强好片久久久久久aaa| 一边摸一边做爽的视频17国产 | 亚洲人成在线电影| 国产丝袜精品丝袜| 国产深夜精品福利| 美女毛片一区二区三区四区| 你真棒插曲来救救我在线观看| 精品一区二区三区av| 国产又粗又猛又爽视频| 激情懂色av一区av二区av| jlzzjlzzjlzz亚洲人| 综合av色偷偷网| 偷拍精品精品一区二区三区| 国产专区一区二区| 欧美精品三级| 午夜免费福利网站| 国产精品久久久99| 性高潮视频在线观看| 亚洲欧洲视频在线| 校园春色亚洲| 国产一区二区在线网站| 欧美黄色精品| 亚洲国产日韩在线一区| 中文字幕一区二区三区不卡在线| 欧美日韩 一区二区三区| 精品视频久久久久久| 678在线观看视频| 国产精品一区视频网站| 国产字幕视频一区二区| 亚洲AV成人精品| 亚洲激情欧美激情| 国产手机精品视频| 精品国产一区av| vam成人资源在线观看| 中文字幕一区二区三区在线乱码 | 日本久久精品电影| 青青青草原在线| 国产成+人+综合+亚洲欧美丁香花| 色天下一区二区三区| 六月激情综合网| 91麻豆国产香蕉久久精品| 日本系列第一页| 亚洲精品之草原avav久久| 中国色在线日|韩| 欧美日韩一区在线播放| 日本不卡在线视频| gv天堂gv无码男同在线观看| 欧美色图在线观看| 一区二区三区视频在线观看视频| 91免费人成网站在线观看18| 一区二区三区午夜视频| 国产精品一区二区无码对白| 午夜成人免费电影| 蜜桃视频在线观看网站| 国产精品第一第二| 日韩欧美网址| 永久看看免费大片| 精品色蜜蜜精品视频在线观看| 青梅竹马是消防员在线| 国产精品精品国产| 久久久久久久久久久9不雅视频| 又大又长粗又爽又黄少妇视频| 欧美日韩国产麻豆| 韩国中文字幕2020精品| 91夜夜揉人人捏人人添红杏| 在线免费观看欧美| 欧洲美一区二区三区亚洲| 欧美精品xxxxbbbb| 男人添女人下部高潮视频在线观看| 久久综合福利| 激情综合网激情| 日韩精品人妻中文字幕| 在线日韩欧美视频| 欧美专区视频| 黑人糟蹋人妻hd中文字幕| 国产精品久久三区| 肥臀熟女一区二区三区| 国产精品久久久av久久久| 综合在线一区| 国产偷人妻精品一区| 欧美情侣在线播放| 91探花在线观看| 亚洲欧洲精品在线| 99久久综合色| 国产在成人精品线拍偷自揄拍| 欧美激情a在线| 尤物tv在线精品| 又黄又爽又色的视频| 91精品91久久久中77777| 欧美videosex性欧美黑吊| 欧美中日韩免费视频| 国产.欧美.日韩| 中文字幕av免费观看| 97视频在线观看网址| 国产精品精品国产一区二区|