在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

未來可期之PWA漸進式Web應用

張康康 ? 2019-07-29 18:27 ? 次閱讀

作者 | 極鏈科技Video++前端Team子昂

整理 | 包包

前端技術這幾年發展迅速,其中就有PWA,全名Progressive Web APP即漸進式Web應用程序,在2016年,Google I/O 大會上提出的一個 Next Web Generation 概念。PWA是專門應對手機web開發提出來的,它可以將 web 和 app 各自優勢結合到一起:漸進式、離線加載等實現趨近于App的交互,實時更新、可推送、可安裝等,達到一個當我們使用Web應用時體驗可以像一款原生App一樣。特別說明一下,很多人以為PWA是一種新技術,然而并不是,它是應用多項Web技術的一個集合,其中核心技術即 “Service Worker”,我們把它放在后面說。

目前我們使用Web應用和很多國內SPA一樣,通常都是在打開一個頁面的時候發起請求來獲取數據,在離線的情況一般就不可用了。而PWA是旨在改善Web的體驗,將網絡的優勢與應用的優勢融合起來,給用戶更優的體驗。PWA具有的特點分別是:

  • 可靠即使在不穩定的網絡環境下(包括無網絡的情況),也可以立即加載并展現。

  • 響應快速用戶交互響應迅速,有平滑流暢的動畫進行響應。

  • 粘性像設備上原生應用一樣,具有逼真的用戶體驗,同時用戶還可以將其添加到桌面。

  • 漸進式適用于使用任何瀏覽器的用戶,因為它的核心是以漸進式增強。

  • 自適應任何形式上都可使用:桌面設備、移動設備等。

  • 安全通過HTTPS,防止窺探以及保障內容不會被篡改。

  • 可發現因為W3C清單和服務工作注冊范圍,可以讓搜索引擎找到它,將其識別為“應用程序”。

  • 可安裝用戶再去app store去下載,可以直接將應用添加到主屏幕從而保留進行使用。

  • 可鏈接可以通過url地址分享應用程序,省去了復雜的安裝。

我們在其中選擇幾點著重解釋一下:

(1)可安裝

它是指在設備的主屏幕上像原生APP一樣留有圖標。要實現這特點首先需要提供Web app manifest(web應用程序清單),manifest是一個json文件,它里面描述的是應用程序的圖標如何在主屏幕顯示以及點擊后跳轉到的頁面是什么,我們可以直接在html中引用它“”,它的格式如下圖:

f743d4a91edd4087b2ccae9fbc327f18


其中幾個屬性代表的意思是:

? start_url 設置跳轉的地址

? icons 讓我們設置頁面的圖標

? background_color 設置背景顏色, 應用啟動后會立即使用此顏色,這一顏色將保留在屏幕上,直至網絡應用首次呈現

? theme_color 會設置主題顏色

? display 設置是否啟動狀態

這里的display設置的是網絡應用是否隱藏瀏覽器的UI,當display的值為"standalone"時,網絡應用隱藏瀏覽器的UI;當display的值為"browser"時,則顯正常顯示。


關于manifest.json里字段更加具體的含義,感興趣的同學可以去谷歌開發者文檔里探索一下啦。

(2)這是一個非常diao的特性:可離線使用即在沒有網絡環境的情況下也能打開應用程序,實現這一強大功能的幕后大佬是:Service worker(服務人員)。

Service worker其實是一段腳本,我們平時緩存都是session、localStorage、CacheStorage這些,PWA通過Service worker訪問CacheStorage實現緩存及離線開發。

這里簡單講一下Service worker的概念,通常瀏覽器加載頁面運行的是主JavaScript線程,而Service worker作為一個獨立的線程,可以理解為在瀏覽器身后默默無聞運行的一個線程。

正因為這個特性,Service worker無論如何都不會阻塞我們的主線程,意味著不會使我們的瀏覽器頁面卡頓等。在使用Service worker時要注意,我們使用的協議必須是https,當然如果想在本地開發弄一個https是很讓人頭疼的,幸運的是Service worker允許在本地hostlocalhost或者127.0.0.1也可以跑起來。

我們來看一下,如何注冊Service worker?

首先,我們要判斷當前使用的瀏覽器是否支持Service worker,支持我們才能繼續進行下去,如果支持,那么在頁面加載的時候注冊位于/sw.js的Service worker,看下面的代碼:

4e443fe283514610b9d91e33eaa5e2f2


每次頁面加載成功后,就會調用 register() 方法,瀏覽器將會判斷 Service Worker 線程是否已注冊并做出相應的處理。

register 方法的 scope 參數是可選的,用于指定你想讓 Service Worker 控制的內容的子目錄。本 demo 中服務工作線程文件位于根網域, 這意味著服務工作線程的作用域將是整個來源。

關于Service Worker更加詳細的介紹,感興趣的同學可以參考MDN文檔。

對啦,Service worker也是有生命周期的,它的詳細介紹可以參考下圖:

fa02542b561142808d8e2540ddba79ac


說了這么多,那我們開發者如何了解一個網頁是否具備了 PWA 的一些特點呢?

我們可以通過谷歌開發工具,在其中找到Audits面板,它可以檢測出頁面是否具備PWA的特點:

c074863701fb45d2bda98d71b17c29a7


下面我們來看一個簡單的demo,看一下PWA在離線時依然能夠快速加載應用。

首先我們將加載loading直接顯示出來,確保用戶在打開網頁可以立即看到,讓用戶知道此時頁面在加載中:


此時我們將html頁面中引用的js的注釋取消,將我們寫的虛假數據加載出來:


那么如何實現緩存呢?即在離線的環境下加載出來數據,此時將網絡環境調成Offline,頁面無法加載:

這里就要應用到上面我們說的Service worker服務工作線程來實現。

先來檢查一下瀏覽器是否支持Service worker:

90ab65473d7049e28f0c99a53e21f0e8


如果瀏覽器支持,就會注冊服務工作線程,當用戶第一次打開頁面時就會觸發安裝事件從而將緩存所需的內容。

下圖為核心代碼,實現了真正的離線緩存:

96d411faaa134a55943a637513034477


首先,我們需要通過 caches.open() 打開緩存并提供一個緩存名稱。提供緩存名稱可讓我們對文件進行版本控制,或將數據與 App Shell 分開,以便我們能輕松地更新某個數據,而不會影響其他數據。

我們在install偵聽器下面添加activate事件偵聽器,因為activate事件會在Service worker啟動時觸發,圖中activate事件里面的代碼可以確保文件更改的時候更新緩存

最后我們需要從緩存中提取我們需要的內容,就是下面這段代碼:

0fe7d54c60b04209b4bcebc32d44343c


caches.match() 會由內而外對觸發抓取事件的網絡請求進行評估,并檢查以確認它是否位于緩存內。它隨即使用已緩存版本作出響應,或者利用 fetch 從網絡獲取一個副本,response 通過 e.respondWith() 傳回至網頁。

現在來看一下我們在離線的時候頁面是否會加載呢?


如圖,在Offline的網絡環境下,我們的應用成功加載出來了。

這個小demo就到這里啦!

目前Progressive Web App仍處于初級階段,國內普及度還不夠,但是不可忽視其背后的的技術,以及對前端全新的定位,或許它會像十年前的AJAX那樣重新改變前端的生態。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
收藏 人收藏

    評論

    相關推薦

    入門web安全筆記分享

    在計算機技術如日中天的今天,Web安全問題也接踵而來。但Web安全卻“入門簡單精通難”,涉及技術非常多且廣,學習阻力很大。 為此今天分享一份94頁的《Web Hacking 101》筆記,包含
    的頭像 發表于 12-03 17:04 ?306次閱讀
    入門<b class='flag-5'>web</b>安全筆記分享

    嵌入系統的未來趨勢有哪些?

    嵌入系統是指將我們的操作系統和功能軟件集成于計算機硬件系統之中,形成一個專用的計算機系統。那么嵌入系統的未來趨勢有哪些呢? 1. 人工智能與機器學習的整合 隨著現代人工智能(AI)和機器學習
    發表于 09-12 15:42

    蘋果AI功能被曝將分階段緩慢推出

    據知名科技記者馬克·古爾曼的最新爆料,蘋果公司的AI戰略正采取分階段、漸進式的推出方式。他指出,Apple Intelligence目前尚處于發展初期,其初始版本將不可避免地面臨功能缺失的局限,尤其是在歐盟市場,初期將無法使用。
    的頭像 發表于 09-09 17:19 ?1187次閱讀

    微軟向Windows內部測試人員推送Windows 11 Build 26120.1330

    )更新。依據這篇博文中所述的細則,我們有理由擴充相關預覽版更新的主要內容。值得注意的是,其中相當大的更新幅度都是處于“漸進式推出階段”,目前尚未全面向所有用戶開放。
    的頭像 發表于 07-27 14:53 ?861次閱讀

    華納云:java web和java有什么區別java web和java有什么區別

    Java Web和Java是兩個不同的概念,它們在功能、用途和實現方式上存在一些區別,下面將詳細介紹它們之間的區別。 1. 功能和用途: – Java是一種編程語言,它提供了一種用于開發各種應用程序
    的頭像 發表于 07-16 13:35 ?851次閱讀
    華納云:java <b class='flag-5'>web</b>和java有什么區別java <b class='flag-5'>web</b>和java有什么區別

    鴻蒙ArkTS聲明組件:Web

    提供具有網頁顯示能力的Web組件,[@ohos.web.webview]提供web控制能力。
    的頭像 發表于 07-04 15:35 ?720次閱讀
    鴻蒙ArkTS聲明<b class='flag-5'>式</b>組件:<b class='flag-5'>Web</b>

    谷歌Chromebook引入徽標功能,支持網頁快速安裝PWA應用

    5 月 22 日報道,谷歌于近期的 I / O 2024 大會上發布了“Add to Chromebook”標記。該標記讓開發者能夠植入相應的 API 代碼至其網頁中,從而使得ChromeBook用戶只需按下按鈕即可快速安裝各類PWA應用至個人設備。
    的頭像 發表于 05-22 11:10 ?449次閱讀

    手機QQ首個基于NT架構的正式版發布

    早在 2020 年,QQ 開發團隊便啟動了這項重大的架構升級工程。面對業務復雜和代碼體積龐大的挑戰,他們采取了分階段、漸進式的策略來推動架構升級。
    的頭像 發表于 05-16 16:19 ?1016次閱讀

    HarmonyOS開發案例:【Web組件實現抽獎】

    基于ArkTS的聲明開發范式的樣例,主要介紹了Web組件如何加載本地和云端H5小程序。
    的頭像 發表于 05-09 18:31 ?1412次閱讀
    HarmonyOS開發案例:【<b class='flag-5'>Web</b>組件實現抽獎】

    微軟將控制面板“字體”功能移至Win11設置

    微軟一直以來采用漸進式遷移策略,將控件面板的功能分散至設置,現階段并無全面消除控件面板之意。Win11 的設置現已具備與控件面板相當的現代字體管理界面,而控件面板內的’字體‘功能仍可通過搜索功能開啟(Control Panel》Appearance and Personalization》Fonts)。
    的頭像 發表于 04-22 11:37 ?500次閱讀

    邊緣Web智能網關是什么?邊緣Web智能網關的功能

    邊緣Web智能網關是一種新型的物聯網設備,主要在物聯網(IoT)設備與云計算服務之間建立連接,實現數據的收集、處理和傳輸。 邊緣Web智能網關就是邊緣計算網關,通過WEB端進行網關的配置、管理 邊緣
    的頭像 發表于 04-07 14:42 ?477次閱讀

    鴻蒙OS開發實例:【Web網頁】

    HarmonyOS平臺通過Web控件可支持網頁加載展示,Web在中是作為專項參考的。 本篇文章將從Android和iOS平臺研發角度出發來實踐學習API功能
    的頭像 發表于 03-28 21:47 ?1924次閱讀
    鴻蒙OS開發實例:【<b class='flag-5'>Web</b>網頁】

    一文讀懂芯片混合鍵合工藝流程

    在封裝史上,最后一次重大范式轉變是從引線鍵合到倒裝芯片。從那時起,更先進的封裝形式(例如晶圓級扇出和 TCB)一直是相同核心原理的漸進式改進。
    發表于 02-27 09:24 ?3631次閱讀
    一文讀懂芯片混合鍵合工藝流程

    能理解、能設計!建筑行業AI大模型未來可期

    中經過訓練和優化的行業大模型,更專注于某個特定領域的知識和技能。領域專業性更強,輸出質量更高,特定任務效果更好。 ? 建筑行業AI 大模型未來可期 ? 在建筑行業中,AI大模型的應用已經越來越廣泛。廣聯達科技股份有限公司副總
    的頭像 發表于 01-26 09:04 ?4448次閱讀
    能理解、能設計!建筑行業AI大模型<b class='flag-5'>未來</b><b class='flag-5'>可期</b>

    web前端開發和前端開發的區別

    Web前端開發和前端開發是兩個相似但略有不同的概念。本文將詳細討論這兩者之間的區別。 定義和范圍: Web前端開發是指開發和維護Web應用程序前端部分的過程。Web前端開發通常涉及使用
    的頭像 發表于 01-18 09:54 ?3610次閱讀
    主站蜘蛛池模板: 色偷偷男人天堂| 欧美精品一二区| 99热网站| 午夜宅男在线| 特黄特色大片免费视频播放| 色综合久久综合欧美综合网| 色多多在线观看播放| 欧美精品 在线播放| 黄色免费大全| 77成人| 涩色影院| 国产69精品久久久久9牛牛| 婷婷丁香五月中文字幕| 亚洲一区二区影视| 资源种子在线观看| 色多多在线观看高清免费| 美女黄视频免费| 俺要色| 久操青青| 亚洲一区二区欧美| 在线人成精品免费视频| 色视视频| 狠狠色噜噜狠狠狠狠米奇7777| 99色吧| 国产小视频在线观看免费| dy888午夜秋霞影院不卡| 一区二区三区电影| 日本黄色大片免费看| 国产高清色播视频免费看| 天天看夜夜操| 好骚综合在线| 亚洲婷婷影院| 免费激情网站| 亚洲精品网站日本xxxxxxx | 色四月婷婷| 国模谢心2013.05.06私拍| 婷婷视频网| 1024手机看片你懂得的 日韩欧美| 禁h粗大太大好爽好涨受不了了| 色婷婷影院| 成年黄网站免费大全毛片|