这几天程序嵌入谷歌浏览器,各种坑,不容易,记录之。。。希望到此为止
1. 开了多进程模式之后,渲染进程RenderProcess断点没有进入。
只有在单进程模式(CefSingleProcess为true)下调试,渲染进程的断点才会进入。如果开多进程模式,那么渲染进程是在另外一个进程,不是主进程,当前调试进程是主进程,所以就没法进入渲染进程的断点,但是实际上,渲染进程的RenderProcessHandler的方法还是会被触发的。
2. 在渲染进程操作浏览器进程没有效果。
渲染进程(RenderProcess)和浏览器进程(BrowserProcess)之间的通讯必须通过进程间通讯才可以,直接调用是没有效果的。不管是在多进程模式下还是在单进程模式下。
3. 多进程模式下进程间通讯传接口地址失败。
多进程模式下,进程不在同一个地址空间,不能直接传地址,只能传值类型。
4. 在多进程模式下,有的情况会出现子进程无法退出的问题。
修改CefShutDown的时机,不要在finalization里面做,而是移到程序退出前,在释放了所有的Browser后就直接调用退出操作。
5. 快速打开很多页面时整个程序会卡死。
猜测是GPU合成的问题,关闭后就没有这个现象了。GPU也会新开一个进程的,关闭GPU就会减少一些进程创建。
6. 每开一个Tab都会创建一个进程。
参考下面的说明,根据需求开启不同的进程模型。
- Process-per-site-instance:就是你打开一个网站,然后从这个网站链开的一系列网站都属于一个进程。这是Chrome的默认模式。
- Process-per-site:同域名范畴的网站放在一个进程,比如www.google.com和www.google.com/bookmarks就属于一个域名内(google有自己的判定机制),不论有没有互相打开的关系,都算作是一个进程中。用命令行--process-per-site开启。
- Process-per-tab:这个简单,一个tab一个process,不论各个tab的站点有无联系,就和宣传的那样。用--process-per-tab开启。
- Single Process:这个很熟悉了吧,传统浏览器的模式,没有多进程只有多线程,用--single-process开启。
7. 没有了