人这一辈子,大部分都在平淡中度过,这些时间,即使记录下来,可能也会沦为流水账。但是也会有那么一些日子,让人痛苦,快乐,难忘,久久地存在你的记忆里,成为你生命中的一部分。过去的四月于我而言,就是这么一段时间。
我是3月份换工作的,离开自己熟悉的小程序开发,开始接触客户端的开发。本以为会很快上手,确没有想到,自己来到的是一个全新的世界。以海贼王的伟大航路来比喻的话,之前写跑在浏览器中的代码,可以认为是伟大航路的前半段,又叫乐园;后面开始接触客户端,可以当作伟大航路的后半段,又叫新世界。
这一个月来接触和了解了许多新东西,抛开各种环境,hive,kinaba这些跟我工作关系不大的东西不谈,也不说redmine,git这些工作流,单单谈谈传统web开发和客户端开发的区别
在伟大航路后半段,称为新世界。伟大航路的地磁、天象、海流、气流都是一片混乱,连确认自己的位置都很困难,更不用说寻找岛屿。以往的航海技术和经验都靠不住,只有记录指针和永久指针是值得信赖的。
客户端给我的感觉也是这样,我们在平时web开发时,一个chrome devtools包含了诸多功能,无论是html视图,css样式,还是js的断点调试,报错堆栈,请求分析,无不清晰明了,让人可以快速定位到那里除了问题,这正是chrome浏览器和devtools给我们营造的“乐园”。
接下来我们谈谈新世界--客户端开发,看看我们要掌握什么样的知识,才能不让自己翻船。
- 网络协议
在web开发中,我们可以通过devtools查看http的请求头和请求体,但是在客户端开发中,尤其是main进程,比较难以直观的观察请求。更何况,如果main进程和c++ 的native模块通信,可能不会使用http这样的协议,而是直接借助net模块,基于tcp进行通信。于是,又要看看3次握手了。。如果想直观的看到通信过程,可以用抓包工具,比如wireshark进行抓包。这样,我们从协议上来到新世界http -> tcp
- 多进程
即便是刚接触electron的新手,也会知道electron的两个进程,main 和 render进程,于是一个新的名词出现了--ipc。上面已经提到ipc的一种方式,tcp
- log
main进程的log一般是写到文件里面的,这样出错的时候,可以拉下来,看哪里出了问题。如果希望console.log生效,可以设置这个环境变量,
set ELECTRON_ENABLE_LOGGING=true
- 断点调试
remote-debugging-port,如文档中所说,我们可以开启远程调试,然后在chrome中调试main进程。它是基于CDP协议的,可以实现断点调试,但是不能查看main进程中的网络请求
在chrome地址栏打开chrome://inspect,然后点击下图中的 Open dedicated DevTools for Node即可。
- 错误捕获
有时候,我们代码没有执行,log,命令行里面都没报错。那十有八九是出错了,但是没有catch到,在网页里面,我们可以看到类似于下面的报错信息,
但是在主进程里,你自己没有捕获的话,可能就拿不到这么贴心的报错了
6. 其他