上午下載試用了一下Google chrome,讓我眼前一亮的是它的多進程功能。每打開一個頁面,chrome都會開啟一個新的進程,這可以通過“任務管理器”看出來。這樣的優勢就是各個頁面之間不會互相影響,因此不會出現IE中瀏覽Ajax泛濫的網頁的時候出現的整個瀏覽器假死的情況,極端情況下,當一個頁面中的chrome崩潰的時候其他頁面不會受影響。
我嘗試分析chrome的實現機理,一開始我認為每個頁面就是一個進程窗口,只不過chrome將這些窗口通過SetParent這樣的方式展示到一個父窗口中而已。但是使用Spy++進行探測后我大吃一驚,每個頁面以及主窗口頁面的ProcessId是同一個,也就是顯示界面還是一個進程。因此我猜測chrome只是把每個頁面對應的運行引擎放到單獨的進程了,渲染和交互的界面還是同一個進程。
看來Google chrome還是受限于界面只能是一個進程、線程的約束,啥時候操作系統圖形引擎能夠支持每個子Window都可以運行在不同的進程、線程中就好了,呵呵。
給chrome來個暴力測試:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>TestMe</title>
<meta http-equiv="content-type" content="text/html; charset=GBK">
</head>
<body>
<script>
function ok()
{
while(true)
{
}
}
</script>
<button onclick="javascript:ok()">ok</button>
</body>
</html>
上面的HTML頁面在IE、FF中運行都會提示“會消耗系統資源,是否繼續”,一旦繼續瀏覽器就死掉了,其他頁面也無法打開,而用chrome就沒有這個問題,其他頁面照樣跑的歡。我以前試用一些復雜的網頁游戲的時候,這些游戲中使用JavaScript進行的AI運算如果非常耗時,那么IE就會彈出討厭的“會消耗系統資源,是否繼續”提示,有了chrome就再也不擔心這個問題了,是否意味著以后大量的運算邏輯可放在瀏覽器端了呢?期待!!!