這幾天程序嵌入谷歌瀏覽器,各種坑,不容易,記錄之。。。希望到此為止
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. 沒有了