溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

electron-vue開發(fā)環(huán)境內(nèi)存泄漏問題有哪些

發(fā)布時間:2021-08-02 15:06:03 來源:億速云 閱讀:95 作者:小新 欄目:web開發(fā)

這篇文章給大家分享的是有關(guān)electron-vue開發(fā)環(huán)境內(nèi)存泄漏問題有哪些的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

package.json

 "dependencies": {
  "vue": "^2.5.16"
 },
 "devDependencies": {
  "ajv": "^6.5.0",
  "babel-core": "^6.26.3",
  "babel-loader": "^7.1.4",
  "babel-plugin-transform-runtime": "^6.23.0",
  "babel-preset-env": "^1.7.0",
  "babel-preset-stage-0": "^6.24.1",
  "babel-register": "^6.26.0",
  "babili-webpack-plugin": "^0.1.2",
  "cfonts": "^2.1.2",
  "chalk": "^2.4.1",
  "copy-webpack-plugin": "^4.5.1",
  "cross-env": "^5.1.6",
  "css-loader": "^0.28.11",
  "del": "^3.0.0",
  "devtron": "^1.4.0",
  "electron": "3.0.0",
  "electron-builder": "^20.19.2",
  "electron-debug": "^1.5.0",
  "electron-devtools-installer": "^2.2.4",
  "file-loader": "^1.1.11",
  "html-webpack-plugin": "^3.2.0",
  "mini-css-extract-plugin": "0.4.0",
  "multispinner": "^0.2.1",
  "node-loader": "^0.6.0",
  "style-loader": "^0.21.0",
  "url-loader": "^1.0.1",
  "vue-html-loader": "^1.2.4",
  "vue-loader": "^15.2.4",
  "vue-style-loader": "^4.1.0",
  "vue-template-compiler": "^2.5.16",
  "webpack": "^4.15.1",
  "webpack-cli": "^3.0.8",
  "webpack-dev-server": "^3.1.4",
  "webpack-hot-middleware": "^2.22.2",
  "webpack-merge": "^4.1.3"
 }

electron測試版本3.0.0, 4.0.0, 4.2.6

問題描述

在開發(fā)環(huán)境中,修改主進(jìn)程保存后,每次保存會多出一到兩個electron進(jìn)程,根據(jù)群友反饋2.0.8也是存在這個問題的,只是出現(xiàn)的頻率較低

排查過程以及解決思路

1、 首先先看了webpack.main.config.js,然而并沒有發(fā)現(xiàn)有什么異樣的地方,配置了只啟動一個應(yīng)用程序,每次退出前也使用app.exit()強(qiáng)制退出,然而并沒有任何好轉(zhuǎn),遂新建一個項(xiàng)目,用來測試
2、 在創(chuàng)建完畢后(electron v4.0.0),發(fā)現(xiàn)每次保存并不是都會出現(xiàn)一個新的進(jìn)程,經(jīng)過多次測試后,發(fā)現(xiàn)問題出在保存完后,主進(jìn)程未生成成功,然后再次保存,于是進(jìn)程創(chuàng)建了多次,但是只殺死了最開始的進(jìn)程,造成內(nèi)存泄漏。
3、 在dev-runner.js中找到了關(guān)于殺死進(jìn)程的方法

   if (electronProcess && electronProcess.kill) {
    manualRestart = true
    process.kill(electronProcess.pid)
    electronProcess = null
    startElectron()

    setTimeout(() => {
     manualRestart = false
    }, 5000)
   }

4、 好吧他是直接通過調(diào)用process.kill來殺死進(jìn)程,然后造成這個問題,遂進(jìn)行了修改,修改后代碼如下,注意引入exec,然后將延時器刪除,感覺整個程序的運(yùn)行速度都快了不少,哈哈哈

   if (electronProcess && electronProcess.kill) {
    manualRestart = true
    const pid = electronProcess.pid
    exec(`TASKKILL /F /IM electron.exe`, function (err, data) {
     if (err) console.log(err)
     else console.log('kill pid: ' + pid + ' success!')
     electronProcess = null
     startElectron()
     manualRestart = false
    })
   }

感謝各位的閱讀!關(guān)于“electron-vue開發(fā)環(huán)境內(nèi)存泄漏問題有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI