编前语:小编的知识背景是MFC的开发(很多年前了)+JAVA的SSH的开发(也有很多年了)+了解python,没有做过node.js的开发,因此对于electron可以说是纯小白了。
本周小编按照上次的学习步骤,学习了Electron的 中文文档(
https://www.w3cschool.cn/electronmanual/)。
几点笔记供同样的小白学习时参考:
1.Electron 使用 web 页面作为它的 GUI,所以你能把它看作成一个被 JavaScript 控制的,精简版的 Chromium 浏览器。
这一点,应该来学习electron的小白应该都知道了,简单来说就是理论上,浏览器能做的,electron都能做,浏览器不让做的,electron也让做,想想都有点激动!当然,怎么做好才是关键!!!
2.主进程 & 渲染进程
主进程和渲染进程是electron中的核心概念。文档中有这么一句话
“由于 Electron 使用 Chromium 来展示页面,所以 Chromium 的多进程结构也被充分利用。每个 Electron 的页面都在运行着自己的进程,这样的进程我们称之为渲染进程”
看来electron的理解并不简单,一上来就整多进程了,想想当年windows开发要到很后面才考虑多进程的事情,一般不搞大动作,基本都可以不用考虑多进程的事情。web开发都不管进程,就更不用考虑多进程了。
继续阅读文档对electron进程的描述:“一个 Electron 应用总是有且只有一个主进程” ,“主进程使用 BrowserWindow 实例创建页面。每个 BrowserWindow 实例都在自己的渲染进程里运行页面。当一个 BrowserWindow 实例被销毁后,相应的渲染进程也会被终止“,”每个渲染进程都是独立的,它只关心它所运行的 web 页面。”
我们再结合实际来理解这些话。自己还没有做过electron应用,可以看看chrome,前面说了electron做出来的就是定制的chrome。我们来看看chrome的进程,打开一个简单的页面“竟然”启动了9个进程,每开一个页面,就添加了一个进程。原来chrome相当于主进程,我们的页面相当于一个渲染进程。原来其实我们做web开发一直在用进程,只是我们感受不到而已。
在来看看小编之前包的一个electron应用,原来也是一个多进程的应用,看来小编不知不觉竟然写了一个多进程的应用。想想又觉得electron高大上一些了
再继续看文档:“在 Electron,我们提供用于在主进程与渲染进程之间通讯的ipc模块。并且也有一个远程进程调用风格的通讯模块remote。”
原来electron为我们封装了一些进程间通信的模块,难怪之前小编在用electron的时候,完全没有感受到多进程的存在。不过理解主进程和渲染进程之间是通过进程间通讯来实现数据传递的概念,对我们理解electron应该蛮重要,后面在实践中要多注意去理解这个概念了。
3.“ 一些组件只可以在主进程中使用,一些只可以在渲染进程中使用,但是也有部分可以在这2种进程中都可使用。”“ GUI模块或者系统底层的模块只可以在主进程中使用”
前面半句很容易理解,不同的进程肯定是有分工的,目的也不一样,所以可以用的组件不一样很自然,后面实践中进一步熟悉即可。后面半句就有点晕了,GUI不是渲染进程干的活吗,怎么在主进程中使用了,而且还只能在主进程中使用。
回头看官网(http://www.electronjs.org/docs/tutorial/application-architecture#main-and-renderer-processes
)“在页面中调用与 GUI 相关的原生 API 是不被允许的,因为在 web 页面里操作原生的 GUI 资源是非常危险的,而且容易造成资源泄露。如果你想在 web 页面里使用 GUI 操作,其对应的渲染进程必须与主进程进行通讯,请求主进程进行相关的 GUI 操作。”
这一下更晕了,前面不是说了web页面就是electron应用的GUI吗?赶紧继续看文档,啊哈,看主进程的组件时看到了几个熟悉的“menu 模块、MenuItem 模块、dialog 模块
",看来上面说的GUI应该不是指web页面,而是指这些和系统相关的GUI。不过menu跟主进程相关可以理解,毕竟不可能每个页面都搞一个menu,不过dialog为什么放到主进程呢?有为什么会造成资源泄露呢,这个要慢慢去理解了
4.调试
“浏览器窗口的开发工具仅能调试渲染器的进程脚本(比如 web 页面)。为了提供一个可以调试主进程的方法,Electron 提供了 --debug 和 --debug-brk 开关”
代码的调试还是很重要的,在windows开发过程中,单步调试对初学者来说还是很有帮助的,这里electron还提供了调试的方法,不过从文档来看,类似于linux的gdb的调试了。小编还是习惯直接用日志的方式来调试了,就不去琢磨这个调试方法了
5.看了一圈文档下来,发现electron是在node.js之上的,看来还是很有必要补充一下node.js的知识,因此也就很有必要补充一下JavaScript的知识了。如果,以mfc来做一个类比的话,感觉基本上就是
C/C++---------------javaScript
库函数-----------------node.js
MFC------------------electron
因此,electron的门槛还是有一些的,不过如果有了node.js的基础,学习起来应该就不难了,关键还是如何做好。
文档中还有很多内容,需要通过实践,小编就一一列举了。后面,小编将开始进入electron的实践环节,通过实践来学习electron的各个组件,理解electron的原理。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8