喜愛自由、自然、自在。

2009-01-10

閒談 Google Chrome(一)

我使用 Google Chrome Browser 作為預設 browser 已超過兩星期,可以寫一點總結了。
精確一點說,我不是用 Google Chrome,其實是用 Chromium,它是 Google Chrome 的 community 版,因為這是個由 Google 發起的 open-source project。理論上兩者是一樣的,Chromium 只是更新較快但可能較不穩定。
Google Chrome 不是 another browser,它是一件革命性的產品,要詳細了解,可以看一看官方的漫畫.

使用一件革命性的東西,我們要預期使用經驗會有很大的改變,我們自己亦要改變一些習慣去適應。

一般人知道它採用和 Apple 的 Safari 一樣的 WebKit rendering engine,以為是相似的東西,亦拿它們的效能相比較。當然它們是完全不同的東西,rendering engine 只是負責把內容排版顯示的元件,我們可以預期兩者顯示的網頁框架排位、字型大小風格之類的表面東西是一樣的,但是內部如何處理網頁的資料,卻是完全不同,這個不同正是 Google Chrome 為何會出現在世上的道理。
它第一個革命,是每個 browser window 成為一個獨立的 process。在用 IE 或其衍生的 Maxthon 時,我幾乎每天都會遇到在下載一個複雜和緩慢的頁面時,其餘所有 browser windows 都掛著不動,甚麼也不能做直至那個頁面完成,而當有一個頁面產生錯誤而遭系統強制關閉時,所有browser windows中的工作也一齊失去。這是因為向來的 browser (包括 FireFox, Opera) 都採用一個 process 處理所有頁面的架構。Google Chrome 的新架構改變了現況,將來的對手也可能會跟隨 (據說IE8 也會這樣做了)。為甚麼要改變呢? 因為今天我們使用 browser 已經不僅是用來 browse,而是用來做大量 mission-critical 的工作了 -- 亦即所謂 Web-App,是故每個 browser window 的穩定性變得十分重要。
新的架構有優點亦當然有代價,每個 process 在系統中需要有獨立的 process control block,耗用額外的系統資源,是理所當然的。如果有些所謂測試在亂搞一亂之後才發現這件事,並且拿來作為攻擊的理據,我會懷疑這些人有沒有讀過 Computer Science,或者考試有沒有合格。
在我使用的兩個多星期,再沒有出現過整個 browser 被一個頁面拖死的事了。出現過一次有頁面掛了而被我殺掉的事件,而其他頁面完全不受影響。
第二個革命是全新設計的 V8 引擎,它是一個 Javascript execution engine。除了最簡單只有字和圖片顯示的網頁 (像我在1995年就開始學寫的那種personal homepage),任何有點互動的網頁也避開不了 Javascript 了,所以這東西的執行效率很重要。一直以來 Javascript 都以 interpreter(*1) 的方式運行,這種方法的效率很差,是當年假設了網頁所需的互動都是些簡單輕便的操作,才會用這種設計,今時今日當然又不是事實了。
V8 Engine,是一個 JIT (Just-In-Time) 的 Compiler(*2) and Executor,在第一次遇到一段 Javascript 的程式時,便會 compile 成 machine code 並暫存起來以備重覆使用。所以運行有複雜互動的網頁服務時,速度是快很多的,這在實際使用經驗中,是明顯感受得到的。
很明顯,這種架構的代價,是要花時間來 compile 和花空間暫存 machine code,如果網頁是很簡單和不會有重覆使用的程式碼,就不會有得益。這些架構問題,不用測試就可以預測得到的。
第三個革命是採用了十分嚴格的權限架構,這個叫 sandbox 的架構和兩層權限(取消了微軟慣用的中間權限)的設計,會增加了安全性。而一定會同時出現的是,某些利用了中間權限的特性的網頁程式亦會失效。為了維持這種安全性,現時是不容許第三方 plugin 的開發,官方稱正在研究這種計劃,我就不知會如何實行了。
討論完內部的東西,下文討論使用者介面方面的事。

(*1) Interpreter 是一個 Virtual Machine,它讀取人們寫的像英文的程式碼,分析它們,並即時執行它們,當然CPU是只能執行0101的機器碼,所以Interpreter每執行一句程式碼,都要執行一連串複雜的 "翻譯" 動作才執行,它是不理上文下理逐句處理的。
(*2) Compiler 是把整段原始程式碼,一次過編譯成CPU需要的二進制機器碼,並儲存起來,以待日後使用,在編譯過程中,亦可以分析上文下理而作對機器碼作出優化。我們日常在電腦上使用的軟件,都是這種架構。

No comments:

Post a Comment