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