我嘗試分析chrome的實(shí)現(xiàn)機(jī)理,一開始我認(rèn)為每個(gè)頁面就是一個(gè)進(jìn)程窗口,只不過chrome將這些窗口通過SetParent這樣的方式展示到一個(gè)父窗口中而已。但是使用Spy++進(jìn)行探測后我大吃一驚,每個(gè)頁面以及主窗口頁面的ProcessId是同一個(gè),也就是顯示界面還是一個(gè)進(jìn)程。因此我猜測chrome只是把每個(gè)頁面對應(yīng)的運(yùn)行引擎放到單獨(dú)的進(jìn)程了,渲染和交互的界面還是同一個(gè)進(jìn)程。
看來Google chrome還是受限于界面只能是一個(gè)進(jìn)程、線程的約束,啥時(shí)候操作系統(tǒng)圖形引擎能夠支持每個(gè)子Window都可以運(yùn)行在不同的進(jìn)程、線程中就好了,呵呵。
給chrome來個(gè)暴力測試:
<!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中運(yùn)行都會(huì)提示“會(huì)消耗系統(tǒng)資源,是否繼續(xù)”,一旦繼續(xù)瀏覽器就死掉了,其他頁面也無法打開,而用chrome就沒有這個(gè)問題,其他頁面照樣跑的歡。我以前試用一些復(fù)雜的網(wǎng)頁游戲的時(shí)候,這些游戲中使用JavaScript進(jìn)行的AI運(yùn)算如果非常耗時(shí),那么IE就會(huì)彈出討厭的“會(huì)消耗系統(tǒng)資源,是否繼續(xù)”提示,有了chrome就再也不擔(dān)心這個(gè)問題了,是否意味著以后大量的運(yùn)算邏輯可放在瀏覽器端了呢?期待!!!