手機現(xiàn)在是互聯(lián)網(wǎng)的最大入口。根據(jù)《中國互聯(lián)網(wǎng)報告》[1],手機網(wǎng)民已經(jīng)超過8億,人均每天上網(wǎng)三個多小時。 毫不奇怪,手機應(yīng)用軟件(mobile application,簡稱 mobile App)的開發(fā)工程師供不應(yīng)求,一直是 IT 招聘的熱門。 如果你開始學(xué)習(xí)手機 App 開發(fā),就一定會聽到 H5 這個詞。它是目前的主流開發(fā)技術(shù)之一,容易上手,開發(fā)周期短、成本低、兼容傳統(tǒng) Web 開發(fā)。但是,很少有文章詳細介紹,H5 到底是什么技術(shù),有什么原理,跟其他技術(shù)的差異在哪里。 本文就是 H5 的入門教程,今天是第一篇,介紹基本概念。內(nèi)容盡量通俗,不過本來也沒有太復(fù)雜的東西。我希望這篇文章可以幫助新手入門,也可以供熟練開發(fā)者回顧和整理知識點。
一、H5 的含義表面上看,手機 App 都是同樣的東西,就是手機上的應(yīng)用程序,點擊圖標就能運行,但是它們的底層技術(shù)不一樣。按照開發(fā)技術(shù),App 可以分成三大類。
這三類 App 的技術(shù)模型都不一樣,各有優(yōu)缺點。企業(yè)一般會選擇其中一種作為主要技術(shù)棧,構(gòu)建自己的手機 App。 H5 這個詞,可以理解成就是混合 App 模型,只不過它特指混合 App 的前端部分。因為混合 App 的前端就是 HTML5 網(wǎng)頁,所以簡稱 H5。這個詞是國內(nèi)獨有的,基本上都是前端程序員在用,國外不用這個詞,就直接叫混合 App。 真正理解 H5 開發(fā),需要先搞清楚什么是原生 App、什么是 Web App,因為混合 App 是在它們的基礎(chǔ)上誕生的。 二、原生應(yīng)用2.1 概念原生 App 是專門為特定手機平臺開發(fā)的應(yīng)用程序,無法在其他平臺運行。一個手機軟件如果要同時支持蘋果手機和安卓手機,就需要為它們各寫一個原生 App。 歷史上,原生 App 最早出現(xiàn),跟智能手機系統(tǒng)一起誕生。2007年6月 iPhone 誕生,2008年9月安卓誕生,就同時發(fā)布了自家平臺的原生 App 開發(fā)方法。 原生 App 使用與手機操作系統(tǒng)相同的語言。iOS 的原生 App 使用 Objective-C 語言或 Swift 語言,安卓使用 Java 語言或 Kotlin 語言。由于跟底層系統(tǒng)的語言和技術(shù)模型一致,所以原生 App 的性能和用戶體驗都很好。 2.2 優(yōu)點原生 App 的優(yōu)點主要是兩個:(1)較好的性能和體驗;(2)可以使用系統(tǒng)的所有硬件和軟件 API,比如 GPS、攝像頭、麥克風、加速計、通知推送等等,能充分發(fā)揮系統(tǒng)的潛力。 2.3 缺點原生 App 的缺點主要是成本,每個手機平臺都要建立一個獨立的開發(fā)團隊,大公司一般都有 iOS 和安卓兩個開發(fā)團隊。如果出現(xiàn)第三個平臺(以前的 Windows Phone,也許將來的華為鴻蒙 OS),就要組建第三個團隊,成本就更高。 第二個缺點是,原生 App 使用底層操作系統(tǒng)的語言,都是很重的編譯型語言,開發(fā)和調(diào)試成本相對較高,時間周期長。 第三個缺點是,原生 App 必須下載安裝才能使用,只要升級版本,就必須重新下載安裝。用戶往往不愿意更新版本,廠商被迫不得不長期支持很久以前的舊版本。 三、Web 應(yīng)用3.1 概念Web App 是使用網(wǎng)頁做的應(yīng)用程序,必須在瀏覽器中使用。比如,你在瀏覽器中收發(fā)郵件,就是在使用 Web App。 Web App 主要使用網(wǎng)頁技術(shù),即 HTML、JavaScript 和 CSS。2008年,w3c 組織發(fā)布了 HTML 第5版,簡稱 HTML 5,該版本大大增強了網(wǎng)頁的功能,使得網(wǎng)頁可以當作應(yīng)用程序使用,而不僅僅是展示文字和圖片,這就是 Web App 的由來。 3.2 優(yōu)點和缺點Web App 的優(yōu)點是:(1)不需要下載安裝,打開瀏覽器就能使用,而且總是使用最新版本;(2)對于開發(fā)者來說,Web App 寫起來比較快,調(diào)試容易,不需要應(yīng)用商店的批準就能發(fā)布。 Web App 的主要缺點有兩個。首先,瀏覽器提供的 API(即 Web API)很有限(目前只有相機、GPS、電池等少數(shù)幾個),大部分系統(tǒng)硬件都不能通過網(wǎng)頁訪問,也無法直接讀取硬盤文件,所以 Web App 無法充分利用平臺的硬件。 第二個缺點是,網(wǎng)頁通過瀏覽器渲染,性能不如原生 App,不適合做性能要求較高的頁面。 3.3 Web App 的劣勢Web App 需要打開瀏覽器才能使用,這意味著,用戶必須記住如何導(dǎo)航到它,要么直接輸入網(wǎng)址,要么翻找書簽。這使得進入 Web App,遠不如原生 App 方便。這點很致命,事實表明,用戶偏好原生 App。 谷歌曾經(jīng)調(diào)查了原生 App 和 Web App 各一千個,發(fā)現(xiàn) Web App 可以覆蓋更多的用戶(1100萬 vs 400萬),但是原生 App 的用戶使用時間(188分鐘)遠超 Web App(9分鐘)。 另一項調(diào)查發(fā)現(xiàn),用戶87%的時間用在原生 App,13%的時間用在 Web App。由于這個原因,企業(yè)很少開發(fā) Web App,都把原生 App 當作首選。 但是,Web App 也不是毫無競爭力。根據(jù)調(diào)查,普通用戶每月平均使用27個原生 App,但訪問了100多個手機網(wǎng)站。這意味著,用戶的 App 使用時間都被頭部 App 占據(jù)了,小公司的 App 使用頻率非常低,獲客成本極高,最終變成僵尸 App。因此,小公司開發(fā) Web App 更劃算,不僅成本低,而且可以服務(wù)更多的用戶,以及更好地宣傳自己(可以被搜索引擎收入)。 3.4 PWA為了推廣 Web App,谷歌公司的 Chrome 瀏覽器團隊做了很多努力。他們認為,Web App 足以滿足大多數(shù) App 的需求,但是三大缺陷阻礙它的推廣。
為了解決這些問題,Chrome 團隊開發(fā)了新技術(shù)“漸進式 Web App”(Progressive Web App,縮寫 PWA)。它可以把網(wǎng)站緩存在手機里面,供離線時使用,還能在手機首屏生成圖標,直接點擊進入,并且有通知推送能力,也不帶有瀏覽器的地址欄和狀態(tài)欄,跟原生 App 的使用體驗非常接近。 但是,PWA 需要瀏覽器訪問一次網(wǎng)站,才能在首屏生成圖標,并且目前 iOS 系統(tǒng)的支持還不夠理想,所以還只是一項探索性質(zhì)的技術(shù),迄今為止缺乏足夠的成功案例。 四、混合應(yīng)用4.1 概念混合 App (hybrid App)顧名思義就是原生 App 與 Web App 的結(jié)合。它的殼是原生 App,但是里面放的是網(wǎng)頁。可以理解成,混合 App 里面隱藏了一個瀏覽器,用戶看到的實際上是這個隱藏瀏覽器渲染出來的網(wǎng)頁。 混合 App 的原生外殼稱為“容器”,內(nèi)部隱藏的瀏覽器,通常使用系統(tǒng)提供的網(wǎng)頁渲染控件(即 WebView 控件),也可以自己內(nèi)置一個瀏覽器內(nèi)核。結(jié)構(gòu)上,混合 App 從上到下分成三層:HTML5 網(wǎng)頁層、網(wǎng)頁引擎層(本質(zhì)上是一個隔離的瀏覽器實例)、容器層。 4.2 API Bridge混合 App 里面的網(wǎng)頁不同于普通網(wǎng)頁,可以調(diào)用底層系統(tǒng)所有的 API。奧秘就在于外層容器提供了 API Bridge,充當?shù)讓?API 的中介,允許內(nèi)部的網(wǎng)頁調(diào)用底層。 所謂 API Bridge 就是容器在底層接口和網(wǎng)頁之間,建立一座橋梁,讓雙方通信。容器一旦接到網(wǎng)頁的請求,就根據(jù)請求去調(diào)用底層系統(tǒng)的 API,然后再返回結(jié)果給網(wǎng)頁。API Bridge 往往以 JavaScript 語言提供,方便網(wǎng)頁調(diào)用,這時又稱為 JSbridge。 不同容器的 API Bridge 是不一樣的。為某個容器寫的網(wǎng)頁,不能放在另一個容器使用,也無法在瀏覽器使用,除非網(wǎng)頁腳本做了兼容處理。 容器提供的 API Bridge 必須跟著平臺更新。比如,iOS 發(fā)了新版本,有了新的硬件 API,容器也必須跟著推出新版的 API Bridge。如果容器沒有跟上,開發(fā)者為了使用新的硬件,就只能想辦法自己來寫缺失的 API Bridge。 4.3 優(yōu)點混合 App 同時具有原生 App 和 Web App的優(yōu)點,又可以避免它們的一些缺點。具體來說,可以總結(jié)為三點。 (1)跨平臺 Web 技術(shù)是跨平臺的,開發(fā)者只寫一次頁面,就能支持多個平臺。也就是說,混合 App 只需要一個團隊就夠了,開發(fā)成本較低。 (2)靈活性 混合 App 的靈活性大,很容易集成多種功能。一方面,混合 App 很容易加載外部的 H5 頁面,實現(xiàn) App 的插件結(jié)構(gòu);另一方面,Web 頁面可以方便地調(diào)用外部的 Web 服務(wù)。 (3)開發(fā)方便 Web 頁面的調(diào)試和構(gòu)建,遠比原生控件簡單省時。頁面的更新也容易,只要在服務(wù)器上發(fā)布新版本,觸發(fā)容器內(nèi)更新就可以了。另外,Web 開發(fā)人員也比較容易招聘,傳統(tǒng)的前端程序員可以承擔開發(fā)任務(wù)。 4.4 缺點混合 App 的主要缺點是,由于存在網(wǎng)頁引擎的中間層,所以性能比較欠缺,不僅不如原生 App,而且由于 WebView 不是全功能瀏覽器,可能比 Web App 都要慢一些。 另一個缺點是,由于頁面跨平臺,就無法使用只有特定平臺提供的功能,導(dǎo)致體驗不如純的原生 App。舉例來說,早期的時候,安卓有物理的后退按鈕,iPhone 沒有,頁面設(shè)計不得不考慮這一點。 上圖是 iOS 頁面。 上面是安卓頁面,左上角的后退按鈕,跟系統(tǒng)的后退按鈕重復(fù)了。 4.5 小程序最后,再來談?wù)勎⑿判〕绦颉?/p> 所謂小程序,可以看作是針對特定容器的 H5 開發(fā)。微信本身是一個容器,開放自己的接口(JSbridge),外部開發(fā)者使用規(guī)定的語法,編寫頁面,容器可以動態(tài)加載這些頁面。 小程序?qū)τ谖⑿殴俜降暮锰幨?,擴展了功能和應(yīng)用場景,吸引外部開發(fā)者加入,繁榮了生態(tài)。對于外部開發(fā)者的好處是,有了流量入口,可以直接調(diào)用微信的各種功能(比如支付)。 今天對于 H5 相關(guān)概念的介紹,就到這里為止,下一篇文章將介紹 H5 相關(guān)開發(fā)工具和框架。 (正文完) 騰訊課堂推薦課程《你不知道的 Vue.js 性能優(yōu)化》當今時代,IT 教育蓬勃發(fā)展,各種課程層出不窮,知識唾手可得。你可能經(jīng)常領(lǐng)取到海量的前端開發(fā)資料包,往往收藏起來就再也沒看過。 Vue.js 就是這種情況,作為前端的主流框架之一,國內(nèi)有著廣泛應(yīng)用,市場招聘需求大。前端培訓(xùn)機構(gòu)幾乎一定有它的課程,而且都是重點推廣,每個學(xué)員都會拿到一大堆學(xué)習(xí)資料。 怎樣才能做出有特色的 Vue.js 教程呢?北京的京程一燈現(xiàn)在就推出了一個專項課程 《你不知道的Vue.js 性能優(yōu)化》。他們是騰訊課堂前端培訓(xùn) TOP 機構(gòu)之一,專注培養(yǎng)年薪40萬的高級前端工程師,目前和騰訊課堂聯(lián)合運營,畢業(yè)生平均薪水可以達到25.5K。 為了與市場上其他課程區(qū)隔,保證輸出優(yōu)質(zhì)內(nèi)容,讓學(xué)員真正有收獲,本次專題課深度講解 Vue.js 性能優(yōu)化,以及 Vue3.0 那些值得關(guān)注的新特性。高級前端崗位面試中,性能優(yōu)化是一個必問的知識點,本課程通過對 Vue 面試核心知識點的拆解,帶你解鎖 Vue.js 性能優(yōu)化,目標是幫助學(xué)員拿到大廠 offer。下面是課程部分內(nèi)容。
購課之后,還將贈送價值196元的《Webpack 從入門到精通》全系列教程。 References
|