郁闷了,miniblink的electron接口必须使用多进程模式了
作者:龙泉寺扫地僧
最近miniblink的electron模式开发本来一切顺利,但昨天遇到一个大坑。
electron里主进程和渲染进程是分开的,在miniblink的electron模式里是使用多线程模拟的,每个线程都有自己的v8 context。本来一切ok,但
在跑vscode的时候,发现一处大坑!
vscode的node_modules\gc-signals 模块,是个native 模块,vscode在导入一个文件夹的时候,会重启整个渲染进程,这样gc-signals 也会被重新加载一遍,重新在native层注册各种V8里的函数。这在多进程下没问题,每次重新加载时会重启一个新进程,重新注册v8函数。
而多线程模拟的就不行了。如果每次重新调用注册函数,gc-signals 里由于native代码用到了全局变量,全局变量是会被反复初始化的。这就尴尬了,有些如uv_mutex_t是不能重复初始化的。
目前想来想去,只能搞过架构大重构了,把之前精心设计、精巧简单的单进程多线程模式改造成多进程了,然而,多进程调试起来麻烦多了。
本人也在不断的学习和积累中,文章中有不足和误导的地方还请见谅,可以给我留言指正。希望和大家共同进步,共建和谐学习环境。
在Electron中,进程通过开发人员定义的“通道”与ipcMain模块和ipcRenderer模块进行通信。这些通道是任意的(您可以任意命名它们)和双向的(您...
Web浏览器是非常复杂的应用程序。除了显示网页内容的主要功能外,它们还有许多次要的职责,比如管理多个窗口(或标签)和加载第三方扩展。 在早期,浏览器通常使用一...
关于Electron这个框架我就不多介绍,它说白了就是Node和Chromium内核的一种封装。用它开发出来的桌面应用程序其实就是套壳浏览器的应用,这就是为什么...
mac 升级了系统之后,之前的 electron 项目打包出现了异常,无法生成安装包:
开发新版本 Vue 项目推荐你使用 Vite 脚手架构建开发环境,然而 Vite 脚手架更倾向于构建纯 Web 页面,而不是桌面应用,因此开发者要做很多额外的配...
经济学中的“有需求就有市场”,在技术领域也不例外,Electron 是应需求而生的,Electron 面世之后,非但满足了现有大部分的开发需求,还创造了大量的新...
最近手头的 electron 项目需要做一个报告导出的功能,导出时要弹出个页面,可让用户自行补全相应的字段。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内...
在上一节中我们介绍了如何升级 Electron 应用,现在我们已经介绍完了如何开发一个 Electron 应用以及如何把 Electron 应用分发给用户。如果...