早在2015年,設(shè)計(jì)師弗朗西斯·貝里曼和Google Chrome的工程師亞歷克斯·羅素提出“PWA(漸進(jìn)式網(wǎng)絡(luò)應(yīng)用程序)”概念,將網(wǎng)絡(luò)之長(zhǎng)與應(yīng)用之長(zhǎng)相結(jié)合,其核心目標(biāo)就是提升 Web App 的性能,改善 Web App以媲美Native的流暢體驗(yàn)。
PWA 不是一個(gè)框架或工具集,而是一個(gè)概念,是開發(fā)人員需要在應(yīng)用程序中實(shí)現(xiàn)的一組功能,以便將應(yīng)用程序的用戶體驗(yàn)提升到一個(gè)新的水平上。如果說某網(wǎng)站在某種程度上是 PWA,那它滿足的 PWA 功能清單中的特性越多,它就越接近這個(gè)概念。
PWA是一類Web應(yīng)用程序的統(tǒng)稱,通過高級(jí)Web功能使Web應(yīng)用程序的行為和表現(xiàn)像本地應(yīng)用程序一樣。PWA 可以通過一個(gè)代碼庫(kù)在多個(gè)平臺(tái)和多個(gè)設(shè)備上運(yùn)行,像一個(gè)特定平臺(tái)的應(yīng)用程序那樣,可以安裝在設(shè)備上,可以離線和在后臺(tái)運(yùn)行,并且可以與設(shè)備和其他已安裝的應(yīng)用程序集成。
PWA能夠重用現(xiàn)有代碼以提供服務(wù)體驗(yàn)。基于其他的跨平臺(tái)技術(shù),往往需要一次性將適配于各種設(shè)備和平臺(tái)的應(yīng)用程序部署到所有商店,PWA與之有極大的不同,本質(zhì)上是提供類似于原生應(yīng)用程序的用戶體驗(yàn)的網(wǎng)站。PWA受歡迎的原因之一是它能夠滿足所有面向移動(dòng)網(wǎng)絡(luò)的設(shè)備需求,同時(shí)節(jié)省了應(yīng)用創(chuàng)建和維護(hù)的投資成本。
簡(jiǎn)單而言,一個(gè) PWA 應(yīng)用首先是一個(gè)網(wǎng)頁(yè), 是通過 Web 技術(shù)編寫出的一個(gè)網(wǎng)頁(yè)應(yīng)用,隨后通過App Shell 架構(gòu)添加上 Manifest 實(shí)現(xiàn)添加至設(shè)備主屏幕, 在通過 Service Worker 來實(shí)現(xiàn)離線緩存和消息推送等功能。
圖片
歸納而言,PWA 應(yīng)用中有兩項(xiàng)關(guān)鍵技術(shù):基于Manifest的App Shell 架構(gòu)和Service worker運(yùn)行機(jī)制。
App Shell 架構(gòu)是構(gòu)建 PWA 應(yīng)用的一種方式,能即時(shí)可靠且地將PWA加載到用戶屏幕上,從而與本機(jī)應(yīng)用相似。
作為一種PWA的構(gòu)建方式,App Shell架構(gòu)提供了一個(gè)最基本的 Web App 框架,包括應(yīng)用的頭部、底部、菜單欄等結(jié)構(gòu)。App Shell 架構(gòu)通常使用JavaScript框架(如React或Angular)來實(shí)現(xiàn),可以是一種構(gòu)建單頁(yè)面應(yīng)用(SPA)的方法,它將邏輯與實(shí)際內(nèi)容分離開來。
App Shell 架構(gòu)涉及緩存靜態(tài)資源,然后使用JavaScript動(dòng)態(tài)加載實(shí)際內(nèi)容,是一個(gè)能夠支持用最小化HTML/CSS/JS用戶界面集合的可緩存UI框架。如果有離線緩存,可確保在用戶重復(fù)訪問時(shí)提供即時(shí)、可靠的良好性能。這樣一來,用戶重復(fù)打開應(yīng)用時(shí)就能迅速地看到 Web App 的基本界面,只需要從網(wǎng)絡(luò)中請(qǐng)求、加載必要的內(nèi)容。這也意味著并不是每次用戶訪問時(shí)都要從網(wǎng)絡(luò)加載 App Shell,而只需要從網(wǎng)絡(luò)中加載必要的內(nèi)容。???App Shell 是通過瀏覽器中的Web runtime?完成的web 應(yīng)用與當(dāng)前設(shè)備平臺(tái)的交互,尤其是在當(dāng)前設(shè)備的屏幕上增加應(yīng)用的啟動(dòng)入口。?Web Application Manifest,即通過一個(gè)清單文件向?yàn)g覽器暴露 web 應(yīng)用的元數(shù)據(jù),包括名稱、icon 的 URL 等,以備瀏覽器使用,比如在添加至主屏或推送通知時(shí)暴露給操作系統(tǒng),從而增強(qiáng) web 應(yīng)用與操作系統(tǒng)的集成能力。Manifest就是一個(gè)json文件,一個(gè)簡(jiǎn)單示例如下:
{ "name": "Progressive web app sample", "short_name": "pwa sample", "start_url": "/index.html", "display": "standalone", "theme_color": "#FFDF01", "background_color": "#FFDF01", "icons": [ { "src": "homescreen.png", "sizes": "168x168", "type": "image/png" }, { "src": "homescreen-124.png", "sizes": "124x124", "type": "image/png" } ]}
當(dāng)用戶第一次訪問PWA應(yīng)用程序時(shí),瀏覽器會(huì)按照manifest.json文件的內(nèi)容對(duì)應(yīng)用程序進(jìn)行注冊(cè)與安裝,以便隨時(shí)在離線狀態(tài)下訪問。
對(duì)于使用包含大量 JavaScript 的架構(gòu)的單頁(yè)面應(yīng)用來說,基于Manifest 的 App Shell 適用于在沒有網(wǎng)絡(luò)的情況下將一些初始 HTML 快速加載到屏幕上。
圖片
Service worker是 web技術(shù)中worker 的一種,那么,什么是worker呢?
由于Javascript 的單線程特性,任何“重量”操作都會(huì)阻塞主線程。為了提升性能和體驗(yàn),現(xiàn)代瀏覽器使用worker 作為一種多線程機(jī)制,把原本的單線程應(yīng)用變成多線程運(yùn)行。現(xiàn)代瀏覽器中提供了 3 種 Worker,分別是:
關(guān)于service worker 的主要內(nèi)容,下圖給出了核心提示:
圖片
在Service Worker安裝期間預(yù)加載文件。對(duì)于SPA,這通常包括我們之前討論的“應(yīng)用程序外殼”,而簡(jiǎn)單的靜態(tài)網(wǎng)站可能會(huì)選擇預(yù)加載所有HTML、CSS和JavaScript,以確保離線時(shí)基本功能得到維護(hù)。處理推送通知,類似于本機(jī)應(yīng)用程序。這意味著網(wǎng)站可以獲得用戶的許可來發(fā)送通知,然后依靠Service Workers接收消息并執(zhí)行消息,即使瀏覽器關(guān)閉。.
目前,不同的瀏覽器廠商使用了不同的Push Service,chrome使用了自家的FCM,firefox也是使用自家的服務(wù),不同push服務(wù)遵循共同的Web Push協(xié)議,具有標(biāo)準(zhǔn)的調(diào)用方式。
圖片
其中,“UA”就是我們的用戶客戶端,也就是瀏覽器;“Application Server”是后端服務(wù);“Push Service”作為中間代理商,扮演著核心角色。Push Service接收客戶端的消息訂閱,維護(hù)管理“客戶端url-公鑰”對(duì)的列表,并將訂閱和私鑰信息發(fā)送給服務(wù)器進(jìn)行存儲(chǔ);此外,它后續(xù)還得接收服務(wù)端的推送消息,校驗(yàn)并發(fā)送給對(duì)象的客戶端進(jìn)行展示。
Push Service還有一個(gè)非常重要的功能:當(dāng)用戶離線時(shí),可以幫我們保存消息隊(duì)列,直到用戶聯(lián)網(wǎng)后再發(fā)送給他們。
Notification通知的功能與消息push類似,但更為簡(jiǎn)單,只要設(shè)置好通知消息,調(diào)用service worker的相同通知接口即可,甚至可以可以帶操作,
后臺(tái)同步也是Service Worker的一個(gè)子功能,用于在終端弱網(wǎng)或無王情況下同步后臺(tái)的數(shù)據(jù)或繼續(xù)前端的請(qǐng)求消息由于service worker在瀏覽器關(guān)閉后仍然運(yùn)行著,所以即使用戶沒有網(wǎng)絡(luò)或關(guān)閉客戶端,service worker仍會(huì)存儲(chǔ)相應(yīng)的請(qǐng)求,并在有可用網(wǎng)絡(luò)連接時(shí)發(fā)起數(shù)據(jù)同步。
Google 給出的 PWA 應(yīng)用特性如下:
PWA 應(yīng)用主要功能特點(diǎn)如下:
漸進(jìn)式web應(yīng)用程序(PWA)框架簡(jiǎn)單可靠,開發(fā)人員可以使用不同的來開發(fā)PWA,常見的開發(fā)工具框架如下:
對(duì)于軟件生態(tài)而言,PWA確實(shí)對(duì)一些傳統(tǒng)的應(yīng)用軟件和開發(fā)方式帶來了一定的沖擊和改變。
對(duì)于一些開發(fā)商而言,PWA技術(shù)的出現(xiàn)意味著需要考慮在Web端進(jìn)行應(yīng)用開發(fā),并為用戶提供更好的Web應(yīng)用體驗(yàn)。但同時(shí),PWA的開發(fā)方式也使得他們可以更加靈活地進(jìn)行應(yīng)用開發(fā),并且減少了一些原生應(yīng)用的開發(fā)和發(fā)布成本。
PWA技術(shù)的出現(xiàn)可能會(huì)對(duì)應(yīng)用商店造成一定的沖擊,因?yàn)镻WA可以通過瀏覽器直接訪問,不需要下載和安裝,這可能會(huì)導(dǎo)致一些應(yīng)用商店用戶流失。但是,應(yīng)用商店也可以通過采取措施,例如推出PWA應(yīng)用、提供更好的應(yīng)用變現(xiàn)機(jī)會(huì)等來應(yīng)對(duì)這種變化。
對(duì)于用戶而言,PWA技術(shù)的出現(xiàn)可能會(huì)提供更好的Web應(yīng)用體驗(yàn),例如離線訪問、桌面快捷方式、推送通知等功能,同時(shí)也可以減少一些應(yīng)用的下載和安裝成本。但是,用戶也需要考慮PWA應(yīng)用在一些方面可能相對(duì)于原生應(yīng)用和小程序存在的較多局限性和不足。
PWA技術(shù)對(duì)于應(yīng)用軟件開發(fā)商、應(yīng)用商店和用戶都可能會(huì)產(chǎn)生一定的影響,但是它并不會(huì)完全顛覆原有的開發(fā)和使用方式。PWA的優(yōu)點(diǎn)和缺點(diǎn)都是相對(duì)的,不同的應(yīng)用場(chǎng)景和開發(fā)需求會(huì)影響開發(fā)者對(duì)PWA和原生應(yīng)用的選擇。如果應(yīng)用的功能、性能和用戶體驗(yàn)要求較高,可以考慮原生應(yīng)用;如果希望對(duì)開發(fā)和維護(hù)成本進(jìn)一步降低,但又擁有app的一些特征,可以考慮使用PWA。
各種類型的小程序都或多或少地繼承或借鑒了PWA的技術(shù)理念,可以認(rèn)為PWA是各種小程序的源頭之一。
圖片
依托于超級(jí)App,微信、百度、支付寶等公司都推出了各自的小程序。歸納而言,小程序采用了輕量級(jí)的框架和組件,加載速度快,用戶可以迅速打開應(yīng)用程序。小程序能夠與設(shè)備的硬件功能(如攝像頭、定位、陀螺儀等)進(jìn)行原生集成,提供更豐富的功能和用戶體驗(yàn)。通過應(yīng)用商店進(jìn)行分發(fā),用戶可以方便地搜索、發(fā)現(xiàn)和安裝小程序。小程序開發(fā)使用統(tǒng)一的開發(fā)工具和語(yǔ)言,在一定程度上減少了開發(fā)者的學(xué)習(xí)成本。另外小程序可以共享用戶數(shù)據(jù),提供更便捷的登錄和數(shù)據(jù)傳輸。
PWA可以在幾乎所有現(xiàn)代瀏覽器上運(yùn)行,具有廣泛的設(shè)備和平臺(tái)支持。開發(fā)者可以充分利用現(xiàn)有的Web開發(fā)知識(shí)和工具,龐大的開發(fā)者社區(qū)來提供豐富的資源、工具和支持。小程序可以通過超級(jí)App作為流量入口,也可以運(yùn)行在企業(yè)自有App中,任何企業(yè)的App只需要通過集成小程序運(yùn)行時(shí)SDK,即可獲得小程序運(yùn)行能力,讓小程序擁有了更多分發(fā)渠道。小程序生態(tài)系統(tǒng)提供了數(shù)據(jù)分析和統(tǒng)計(jì)工具,幫助開發(fā)者了解用戶行為、應(yīng)用性能和使用情況。開發(fā)者可以通過這些工具獲取關(guān)鍵指標(biāo)和數(shù)據(jù),進(jìn)行數(shù)據(jù)驅(qū)動(dòng)的優(yōu)化和改進(jìn)。這些工具提供了可視化的報(bào)表和圖表,幫助開發(fā)者更好地理解用戶行為和應(yīng)用運(yùn)行情況。
圖片
PWA和小程序都是當(dāng)前移動(dòng)應(yīng)用開發(fā)領(lǐng)域的熱門技術(shù)方案,各具特色。從開發(fā)者的角度來看,PWA具有廣泛的瀏覽器支持、跨平臺(tái)能力和成熟的Web開發(fā)生態(tài)系統(tǒng)。小程序則在流量入口、應(yīng)用商店支持和與硬件集成方面表現(xiàn)突出。
PWA 是一種先進(jìn)的理念和技術(shù)探索,但理念并不能直接演變成競(jìng)爭(zhēng)優(yōu)勢(shì)。現(xiàn)在是2023年了,推廣和應(yīng)用成本更低的PWA仍然活在小程序陰影下,看起來仍然沒法撼動(dòng)應(yīng)用開發(fā)的現(xiàn)狀。除了國(guó)內(nèi)各平臺(tái)的強(qiáng)勢(shì)影響力和平臺(tái)審核因素外,PWA仍然存在一些明顯缺點(diǎn)。PWA是一個(gè)基于瀏覽器的web端技術(shù),相較于native APP的各項(xiàng)系統(tǒng)級(jí)功能明顯不足,比如無法做硬件層面的調(diào)用;在動(dòng)畫、渲染等方面性能也明顯弱于native APP;大計(jì)算量處理和音視頻方面也都是弱項(xiàng)。
那么,如果PWA 要獲得更加廣泛的應(yīng)用,優(yōu)先級(jí)最高的突破點(diǎn)在哪里呢?
本文鏈接:http://www.www897cc.com/showinfo-26-5721-0.html穿上App外衣,保持Web靈魂——PWA溫故
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com
上一篇: 提升Go的HTTP路由器的提案
下一篇: 提高虛擬機(jī)游戲性能指南