electron-vue開發(fā)環(huán)境內(nèi)存泄漏問題匯總
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測(cè)試版本3.0.0, 4.0.0, 4.2.6
問題描述
在開發(fā)環(huán)境中,修改主進(jìn)程保存后,每次保存會(huì)多出一到兩個(gè)electron進(jìn)程,根據(jù)群友反饋2.0.8也是存在這個(gè)問題的,只是出現(xiàn)的頻率較低
排查過程以及解決思路
1、 首先先看了webpack.main.config.js,然而并沒有發(fā)現(xiàn)有什么異樣的地方,配置了只啟動(dòng)一個(gè)應(yīng)用程序,每次退出前也使用app.exit()強(qiáng)制退出,然而并沒有任何好轉(zhuǎn),遂新建一個(gè)項(xiàng)目,用來測(cè)試
2、 在創(chuàng)建完畢后(electron v4.0.0),發(fā)現(xiàn)每次保存并不是都會(huì)出現(xiàn)一個(gè)新的進(jìn)程,經(jīng)過多次測(cè)試后,發(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)程,然后造成這個(gè)問題,遂進(jìn)行了修改,修改后代碼如下,注意引入exec,然后將延時(shí)器刪除,感覺整個(gè)程序的運(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 }) }
總結(jié)
在解決了問題后,去看版本更新記錄,在2.0.8-3.0.0的版本更新記錄中并沒有發(fā)現(xiàn)那條更新記錄會(huì)導(dǎo)致這個(gè)問題,時(shí)間有限,也沒有去看到底在哪個(gè)版本后造成這個(gè)問題,技藝拙劣,始終沒有找到出現(xiàn)的原因
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue2自定義組件通過rollup配置發(fā)布到npm的詳細(xì)步驟
這篇文章主要介紹了vue2自定義組件通過rollup配置發(fā)布到npm,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03vue網(wǎng)絡(luò)請(qǐng)求方案原生網(wǎng)絡(luò)請(qǐng)求和js網(wǎng)絡(luò)請(qǐng)求庫
這篇文章主要為大家介紹了網(wǎng)絡(luò)請(qǐng)求方案原生網(wǎng)絡(luò)請(qǐng)求和js網(wǎng)絡(luò)請(qǐng)求庫的過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11vue.js過濾器+ajax實(shí)現(xiàn)事件監(jiān)聽及后臺(tái)php數(shù)據(jù)交互實(shí)例
這篇文章主要介紹了vue.js過濾器+ajax實(shí)現(xiàn)事件監(jiān)聽及后臺(tái)php數(shù)據(jù)交互,結(jié)合實(shí)例形式分析了vue.js前臺(tái)過濾器與ajax后臺(tái)數(shù)據(jù)交互相關(guān)操作技巧,需要的朋友可以參考下2018-05-05關(guān)于vue 結(jié)合原生js 解決echarts resize問題
這篇文章主要介紹了關(guān)于vue 結(jié)合原生js 解決echarts resize問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07vue3源碼剖析之簡(jiǎn)單實(shí)現(xiàn)方法
源碼的重要性相信不用再多說什么了吧,特別是用Vue 框架的,一般在面試的時(shí)候面試官多多少少都會(huì)考察源碼層面的內(nèi)容,下面這篇文章主要給大家介紹了關(guān)于vue3源碼剖析之簡(jiǎn)單實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2021-09-09axios?發(fā)?post?請(qǐng)求,后端接收不到參數(shù)的完美解決方案
這篇文章主要介紹了axios?發(fā)?post?請(qǐng)求,后端接收不到參數(shù)的解決方案,場(chǎng)景很簡(jiǎn)單,就是一個(gè)正常 axios post 請(qǐng)求,本文給大家分享問題原因分析及解決方案需要的朋友可以參考下2022-12-12vue19 組建 Vue.extend component、組件模版、動(dòng)態(tài)組件 的實(shí)例代碼
這篇文章主要介紹了vue19 組建 Vue.extend component、組件模版、動(dòng)態(tài)組件 的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04用Vue?Demi同時(shí)支持Vue2和Vue3的方法
這篇文章主要介紹了用Vue?Demi同時(shí)支持Vue2和Vue3的方法,實(shí)際開發(fā)中,同一個(gè)API在不同的版本中可能導(dǎo)入的來源不一樣,比如ref方法,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12