electron-vue开发环境内存泄漏问题汇总


Posted in Javascript onOctober 10, 2019

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

问题描述

在开发环境中,修改主进程保存后,每次保存会多出一到两个electron进程,根据群友反馈2.0.8也是存在这个问题的,只是出现的频率较低

排查过程以及解决思路

1、 首先先看了webpack.main.config.js,然而并没有发现有什么异样的地方,配置了只启动一个应用程序,每次退出前也使用app.exit()强制退出,然而并没有任何好转,遂新建一个项目,用来测试
2、 在创建完毕后(electron v4.0.0),发现每次保存并不是都会出现一个新的进程,经过多次测试后,发现问题出在保存完后,主进程未生成成功,然后再次保存,于是进程创建了多次,但是只杀死了最开始的进程,造成内存泄漏。
3、 在dev-runner.js中找到了关于杀死进程的方法

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

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

4、 好吧他是直接通过调用process.kill来杀死进程,然后造成这个问题,遂进行了修改,修改后代码如下,注意引入exec,然后将延时器删除,感觉整个程序的运行速度都快了不少,哈哈哈

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
    })
   }

总结

在解决了问题后,去看版本更新记录,在2.0.8-3.0.0的版本更新记录中并没有发现那条更新记录会导致这个问题,时间有限,也没有去看到底在哪个版本后造成这个问题,技艺拙劣,始终没有找到出现的原因

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 单引号 传递方法
Jun 22 Javascript
用Javascript实现锚点(Anchor)间平滑跳转
Sep 08 Javascript
Jquery 类网页微信二维码图块滚动效果具体实现
Oct 14 Javascript
JavaScript中的Math.atan2()方法使用详解
Jun 15 Javascript
几种经典排序算法的JS实现方法
Mar 25 Javascript
jQuery实现Select左右复制移动内容
Aug 05 Javascript
微信小程序使用第三方库Underscore.js步骤详解
Sep 27 Javascript
Bootstrap的基本应用要点浅析
Dec 19 Javascript
JS简单实现自定义右键菜单实例
May 31 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
Jul 11 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
Nov 27 Javascript
vue基于mint-ui实现城市选择三级联动
Jun 30 Javascript
Vue使用NProgress的操作过程解析
Oct 10 #Javascript
使用 Element UI Table 的 slot-scope方法
Oct 10 #Javascript
使用vscode快速建立vue模板过程详解
Oct 10 #Javascript
浅谈vue3中effect与computed的亲密关系
Oct 10 #Javascript
JavaScript如何把两个数组对象合并过程解析
Oct 10 #Javascript
Node使用Selenium进行前端自动化操作的代码实现
Oct 10 #Javascript
Vue 开发必须知道的36个技巧(小结)
Oct 09 #Javascript
You might like
PHP备份/还原MySQL数据库的代码
2011/01/06 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
PHP UTF8中文字符截断函数代码
2012/09/11 PHP
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
2013/11/07 PHP
php读取excel文件示例分享(更新修改excel)
2014/02/27 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
php 变量引用与变量销毁机制详细介绍
2016/12/05 PHP
Prototype使用指南之dom.js
2007/01/10 Javascript
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
js 表格隔行颜色
2009/12/02 Javascript
javascript:void(0)是什么意思示例介绍
2013/11/17 Javascript
JS小功能(checkbox实现全选和全取消)实例代码
2013/11/28 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
对Vue table 动态表格td可编辑的方法详解
2018/08/28 Javascript
基于nodejs的雪碧图制作工具的示例代码
2018/11/05 NodeJs
vue webpack打包后图片路径错误的完美解决方法
2018/12/07 Javascript
vuex如何重置所有state(可定制)
2019/01/17 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
javascript实现一款好看的秒表计时器
2020/09/05 Javascript
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
如何在 Vue 中使用 JSX
2021/02/14 Vue.js
分享Python字符串关键点
2015/12/13 Python
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
Tensorflow之Saver的用法详解
2018/04/23 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
传统HTML页面实现模块化加载的方法
2018/10/15 HTML / CSS
数据库面试要点基本概念
2013/10/31 面试题
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
问卷调查计划书
2014/01/10 职场文书
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
2016年秋季开学典礼新闻稿
2015/11/25 职场文书