轉載請註明原文地址:http://blog.csdn.net/milado_nju
git
注:鑑於這一領域很是熱,本身也投身其中,會單獨開闢一個專題介紹Web應用和Web運行環境。github
## 概述web
Web已經從web網頁向web應用(web application)方向發展,這一推進須要加入大量現有操做系統提供的能力,例如各個傳感器的功能已經經過JavaScript接口提供給了web應用,文件或者存儲系統,用戶交互,網絡鏈接,應用的生命週期,安裝和卸載等管理。這些方面有些已經成熟,可是還有更多的在制定過程當中。雖然標準化組織在不斷加入新標準,可是如今還有不少缺失的地方須要補上。
瀏覽器
支撐HTML5的框架也已經從瀏覽器向Web運行平臺轉變,這是一重大轉變。由於以前瀏覽器只是運行網頁,而Web運行平臺能夠管理和運行Web應用,因此對於上面提到的全部功能都須要支持,而有些瀏覽器並不須要支持。雖然如今不少web運行平臺是從瀏覽器基礎上開發的,可是這並不意味這二者是同一回事。
安全
## Web應用服務器
根據W3C規範的定義,能夠將Web應用分紅兩種類型,第一種稱爲Packaged Application,也就是該應用包含了自身所須要的全部資源。第二種稱爲Hosted Application,不是Packaged Application類型的應用都屬於此類,因此也就是它包含了一些外部的資源。爲何會有如此劃分?主要是由於需求和安全方面的考慮,後面會介紹到。網絡
在一些應用場景下須要PackagedApplication,第一是由於應用市場的須要,不少市場須要審覈應用使用哪些權限,而不是無限制的使用任何平臺提供的能力,這點對於安全性尤其重要。第二是由於開發者的須要,使用Web和HTML5技術開發並不意味着須要提供服務器並把Web應用佈置在服務器上。像本地應用同樣,Web應用也可以獨立的工做。第三是由於用戶的須要,不少時候用戶但願可以離線狀況下仍然可以使用該應用,就像不少本地應用同樣,一旦離線狀況下不能使用,對於用戶體驗是個考驗。app
同普通網頁不一樣的是,一個Web應用一般包含一個稱爲清單(manifest)的文件,該文件的目的跟不少系統例如Android上的應用程序的清單文件相似,就是爲了定義該應用的一些信息。從此會作清單文件的詳細介紹。框架
## Web運行環境工具
Web應用須要支撐的運行環境纔可以工做,就像本地應用須要操做系統才能工做,可以支撐Web應用運行的平臺或者運行環境,稱爲Web運行環境(也能夠叫Web平臺)。那麼一個Web運行環境包含哪些功能或者特性呢?
描述了Web運行平臺的功能及同Web應用關係。首先固然可以支持衆多HTML5功能,包括基本功能如CSS,JavaScript,Canvas2D等等,也包括設備的能力,包括如設備能力,如Device Info,Geolocation,Motion傳感器,攝像頭等等能力。
其次是對存儲的要求,由於Web應用須要可以訪問文件系統或者使用大量的存儲空間,特別是離線應用,這裏麪包括offline cache,File System, File API等方面的規範支持,這些對於應用特別重要。
再次是打包的支持,也就是將HTML/CSS/JavaScript文件和其它資源文件打包成必定格式的包,這裏面重要的一點就是對清單的支持。清單描述了Web應用的基本設置,這些設置對於網頁而言是不須要的,可是Web應用須要這些來定義它做爲一個應用程序的行爲,例如前面說的全屏,窗口大小,圖標等等。
而後是應用程序的運行模式,生命週期方面的支持。Web運行環境可以通知Web應用啓動,掛起,恢復和銷燬等狀態信息。
最後是可以啓動並運行Web應用,是的Web應用使用起來跟本地應用使用體驗相同或者相似,而不只僅網頁瀏覽的方式,這裏麪包括開啓應用,關閉應用,升級應用和管理應用等等。
按照Web運行環境的工做模式,目前能夠將它分紅三種類型:
第一是操做系統自己就是支持Web應用,因此一般稱爲Web操做系統,典型的例子如Tizen,Chrome OS,Firefox OS等等。由於整個操做系統就是爲了Web應用設計的,因此Web應用在系統中是第一等公民。
第二是瀏覽器或者其它相似的產品中包含支持Web應用的能力,典型的例子是Crosswalk的Tizen版(英特爾公司的開源項目),Chromium的桌面版和Pokki等。它的特性是Web應用都是由該運行環境管理,對於操做系統而言,它看不到Web應用的存在,並且每一個Web應用也不會變成一個本地應用。由於自己操做系統只是支持本地應用,因此Web應用對操做系統而言是透明的,對於操做系統而言,它看到的是多個運行環境的實例。
第三是以一個獨立的框架和本地應用存在於傳統的操做系統,自己該Web運行環境依賴與操做系統才能運行,而Web應用工做在該Web運行環境中的,典型的例子如Crosswalk(Android版)和Cordova(也就是PhoneGap使用的開源項目)。它同第二類型的區別在於,Web應用自己會被打包成本地應用,因此操做系統認爲每一個打包後的Web應用就是一個本地應用,每一個Web應用以後的啓動方式跟本地應用相同,固然,Web應用是由Web運行平臺這個本地應用啓動並運行的。## Crosswalk
Crosswalk項目是由英特爾公司發起的一個開源項目,該項目基於Blink和Chromium等開源項目,其目的是打造一個跨不一樣操做系統的Web運行環境,包括Android、Tizen、Linux、Windows、Mac等衆多平臺。如前面描述,主要是該Web運行環境可以做爲操做系統的一個獨立模塊或者說是本地應用,而Crosswalk自己不是一個操做系統,具體請讀者查看https://www.crosswalk-project.org/。不一樣於Cordova項目,Crosswalk不只僅是提供一些Web接口的擴展,不是簡單的基於系統缺省的嵌入式應用接口例如WebView,而是使用新Blink和Chromium的能力,增強對HTML5能力的支持,同時加入了Web做爲一個運行平臺的各類能力,從功能上看,它對Web應用的支持和規範的支持更加完整,下圖描述了Web應用在Crosswalk上的基本工做過程。
圖中能夠看到在Android系統和Tizen系統上二者是不同,這是由於Tizen自己是一個直接支持Web應用的操做系統,因此它支持直接將Web應用安裝到系統中而不須要額外的處理。當用戶須要啓動Web應用的時候,由Crosswalk加載Web應用的設置並使用運行環境來啓動該Web應用。
在Android系統上,那就是不一樣的故事,由於Android系統只是支持本地應用,爲此須要特殊的工具將Web應用轉換成Android系統的APK。這一工具固然須要知足Android上的特別需求,這裏有兩個目的:
第一是由於Web應用中有名稱,圖標,加載入口等等信息,這些信息須要設置到Android的AndroidManifest.xml中去,這樣,當用戶安裝該APK的時候,名稱和圖標等信息就會顯示在應用的列表中,跟其它本地應用看起來同樣。
第二是知足Android系統只能從Application和Activity類來啓動,不是Web應用。爲此,Crosswalk項目提供了一些代碼來讓Android系統啓動Crosswalk運行平臺,而該運行平臺根據Web應用的設置來啓動Web應用。開發者如但願使用Crosswalk來打包Web應用到Android APK,能夠從https://github.com/crosswalk-project/crosswalk上根據文檔來實現。對於Crosswalk的詳細介紹,筆者會在今逐步展開來。
參考資料
1. http://www.w3.org/TR/runtime/
2. https://www.crosswalk-project.org/
3. https://github.com/crosswalk-project/crosswalk
by yongsheng@chromium.org