漫谈Google的Native Client(NaCl)技术
Native Client簡介
Native Client是Google在瀏覽器領域推出的一個開源技術,它允許在瀏覽器內編譯Web應用程序,并執行原生的編譯好的代碼。Native Client有以下幾個優勢(參考Google官方英文介紹):
- 為Web提供更多的圖形,音頻以及其他功能:可以直接在web上執行了原生的2D,3D圖形渲染程序(對Web游戲很有用),播放音視頻,響應鼠標鍵盤事件,多線程執行代碼等等,而這一切,不需要瀏覽器安裝任何插件。
- 良好的可移植性:一個Web程序,只需要開發一份代碼,即可以在所有平臺(包括Windows,linux,Mac等)運行。
- 高安全性:安裝不被信任的桌面程序一級瀏覽器插件,可能帶來很高的安全風險(如程序攜帶木馬,病毒)。而Native client使用了雙層沙盒(sandbox)設計來保護用戶的本地資源。Native Client的架構可以保證web要應用的安全性,并且取得和原聲代碼相同或相近的性能。
- 方便從桌面遷移:很多開發廠商之前花了大力氣開發桌面程序,隨著云計算的到來,越來越多的程序會被移植到互聯網上,由于NaCl支持直接執行C/C++/Java等代碼,Native Client技術可以簡化移植過程,減少移植成本。
- 高性能:Native Client可以讓web應用已接近桌面程序的性能運行,這就為在瀏覽器內運行性能苛刻的程序提供了基礎,如大型3D游戲。
Native Client技術概要
有人說,Native Client技術是抄襲ActiveX的,個人不以為然,ActiveX主要是基于COM的,是操作系統提供一套可重用的接口給web應用,而NaCl則是獨立于操作系統的。說實話,感覺這技術更像是抄襲Adobe的Alchemy技術,Achemy技術主要目的是解決Flash的低性能,這和Native Client是接近的,并且,這兩種技術都采用了LLVM技術,具體可以看這篇文章http://yjrl.iteye.com/blog/320665。
LLVM?是 Low Level Virtual Machine 的簡稱,這個庫提供了與編譯器相關的支持,能夠進行程序語言的編譯期優化、鏈接優化、在線編譯優化、代碼生成。簡而言之,可以作為多種語言編譯器的后端來使用。而基于LLVM ,開源社區開發出了Clang,一個C++ 編寫、基于 LLVM、發布于 LLVM BSD 許可證下的 C/C++/Objective C/Objective C++ 編譯器,其目標(之一)就是超越 GCC。
Google 的Native Client的關鍵技術就是PNaCl(Portable Native Client Executables),而PNaCl實現的一個關鍵就是LLVM。下面是整個PNaCl結構示意圖:?
在PNaCl中,開發者通過一些前端編譯器將C/C++/Fortan源代碼用對應的編譯器前端編譯成LLVM的中間字節碼,并且進行優化以及鏈接(這一整套流程可以在Google提供的SDK中完成)。之后,服務器將鏈接好的字節碼進行分發,在客戶端,通過LLVM的后端將字節碼翻譯成本地的二進制對象文件,并且和本地的相關庫鏈接,最終執行完成(這些功能應該是集成在瀏覽器中的)。
另外,為了保證安全性,NaCl采用了沙盒技術,具體可以看這篇論文:《Native Client: A Sandbox for Portable, Untrusted x86 Native Code》。
參考:
http://www.lingcc.com/2010/06/02/10955/
http://nativeclient.googlecode.com/svn/data/site/pnacl.pdf
總結
以上是生活随笔為你收集整理的漫谈Google的Native Client(NaCl)技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web本地计算发展史
- 下一篇: C++数据内存分布