http://blog.csdn.net/milado_nju
PPAPI的提出是因為NPAPI的可移植性和效能存在比較大的問題,特別是針對跨進程的外掛程式,特別是外掛程式需要2D和3D繪圖,聲音等問題時候就更為棘手。早期的時候就是要解決這些問題,同時為了贏得外掛程式廠商的支援,儘可能的使用原來NPAPI的介面。現在,隨著PPAPI的不斷髮展,介面不斷髮生改變。後來,PPAPI也被用在Native Client技術中,之後也被逐漸的修改,直到現在的樣子,完整的列表可以查看連結http://code.google.com/p/ppapi/w/list。
那麼為什麼PPAPI能夠提供較高效能的繪圖和聲音等問題呢?前面我們提到,在現在的NPAPI外掛程式系統中,通常的做法是,當網頁需要顯示該外掛程式的時候或者需要更新的時候,它會發送一個失效(Invalidate)的通知,讓外掛程式來繪製它們。而在PPAPI外掛程式機制,它引入了一個叫做保留(retained)模式,其含義是瀏覽器始終保留一個後端儲存空間用來表示上一次繪製完的地區。這個很有用,因為PPAPI外掛程式通常是跨進程的,所以瀏覽器可以繪製網頁而不需要鎖,與此同時外掛程式進程能夠在後台繪製新的結果。
PPAPI外掛程式有兩種運行模式,受信(trusted)外掛程式和非受信(untrusted)外掛程式。對於受信的PPAPI外掛程式,它可以在Renderer進程中運行,也可以跨進程運行。對於新版本的實現中,架構設計都是基於IPC來設計的。而對於非受信的PPAPI外掛程式則使用NativeClient技術來安全運行它們。對於受信外掛程式,它們是平台相關的,那麼可能調用平台相關的介面。而對於非受信外掛程式而言,它們是平台無關的代碼,它們調用NativeClient提供的有限介面,而不能調用任意介面,這個後面再介紹。
NativeClient,也簡稱為NaCl,是一種沙箱技術,它能夠提供給平台無關的不受信本地代碼一個安全運行環境,它是針對那些計算密集型的需求,例如遊戲引擎,可視化計算,大資料分析,3D圖形渲染等方面的需求,它們指需要訪問有限的一些本地介面,這樣不需要通過網路服務來計算它們,以免佔用額外的頻寬資源。它同WebGL,WebAudio這樣的技術所解決的問題相似,但是途徑不同,因為它們是標準,而NativeClient技術是Google提出的,使用NativeClient能夠將很多本地庫的能力輕易的提供給網頁使用,而不需要複雜的移植過程,給重用帶來很大的方便。
本身PPAPI和NativeClient沒有必然聯絡,兩者解決的是不同方面的問題,只是目前NativeClient是基於PPAPI介面來實現的,其實之前NativeClient也曾經基於NPAPI介面來實現的,所以能夠在Firefox,Safari和Opera瀏覽器中運行。
因為NativeClient使用PPAPI來提供一個安全的運行環境,本身它也是一個PPAPI外掛程式,就是Chrome瀏覽器中一個PPAPI外掛程式-NativeClient。同其它的PPAPI外掛程式不一樣,它是一個在Renderer進程中啟動並執行外掛程式,圖中的”Type: PPAPI(in-process)”。
Chromium的擴充(Extension)機制(為了避免跟通用的“JavaScript擴充機制”產生名字上的混淆,後面一律稱為Chromium Extension機制)原先是Chromium推出的一項技術,該機制能夠擴充協助瀏覽器的能力,例如筆者使用的一個擴充執行個體名為“switchy proxy”,它可以協助使用者方便的切換Chromium瀏覽器的代理。為了但是也就僅此而已。本質上,它其實就是瀏覽器能力的簡單擴充,而對於一些本地的功能,例如書籤,USB,藍芽,電源管理等,它並沒有這方面的能力。
一個Chromium Extension的執行個體其實就是一個網頁加上JavaScript代碼和CSS,當然,在Extension中,開發人員也可以使用NPAPI外掛程式和PPAPI及NaCl機制技術來擴充網頁能力,所以它同這些技術沒有衝突,相反,Extension可能需要這些技術以達到提供一定的功能。
當然,Chromium Extension機制的目標遠不只這麼簡單,擴充瀏覽器功能的Extension只是其中一個很小的功能。隨著該機制的不斷髮展,Extension機制已經被用來支援Web應用程式,也就是使用HTML5、JavaScript、CSS技術來開發應用程式,使用Chromium瀏覽器來運行,當然獲得使用者體驗同本地應用程式非常接近。Chromium打造為一個依賴於Web的運行平台,使用擴充機制的網頁已經可以稱之為Web應用。如果你認為功能還不夠,也可以理解為初級階段,但是它實實在在將網頁擴充到web應用的範疇。在Google的Web Store中,讀者可以發現其中有兩個類別,包括傳統的Extension和Web應用。這裡面,從使用者的角度看,普通擴充和Web應用的區別在於普通外掛程式只是在Extension在當前視窗運行(當然也不是絕對的,但是工作機制的確是不一樣),而Web應用是一個獨立的視窗。
是Chrome瀏覽器中已經安裝的Extensions(Google Docs)和Web應用(Cut theRope),讀者可以通過在地址欄輸入chrome://extensions/來查看它們。
1. http://www.chromium.org/developers/design-documents/pepper-plugin-implementation
2. http://www.chromium.org/nativeclient
3. http://www.chromium.org/developers/design-documents/extensions
by yongsheng@chromium.org