上午下载试用了一下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就再也不担心这个问题了,是否意味着以后大量的运算逻辑可放在浏览器端了呢?期待!!!