2019前端必會黑科技之PWA

一、背景

從2018年到現在,作為號稱下一代web應用模型的PWA,逐漸成為了一個各大前端廠商爭先恐后進行涉足,布局的一個新的技術, 其主要的對標物Native app,作為現在最主流的mobile端應用,它的安全,性能,用戶體驗的確明顯領先于其他互聯網載體,但是原生App始終有一些缺點,比如

1. 昂貴開發成本

2. 軟件上線,版本更新都需要發布到不同的商店,并通過審核

有些APP你可能使用頻率特別少,但是你還是不得不去商店中下載龐大安裝包,或者可能一段時間不使用以后,隨著版本的更新,你也不得不去重新更新并安裝

PWA技術的作為web應用,其天生優勢能很好的解決以上的問題。

二. 什么是PWA

PWA是Progressive Web App的英文縮寫, 翻譯過來就是漸進式增強WEB應用, 是Google 在2016年提出的概念,2017年落地的web技術。目的就是在移動端利用提供的標準化框架,在網頁應用中實現和原生應用相近的用戶體驗的漸進式網頁應用。

引用官方介紹:


Reliable - Load instantly and never show the downasaur, even in uncertain network conditions.Fast - Respond quickly to user interactions with silky smooth animations and no janky scrolling.Engaging - Feel like a natural app on the device, with an immersive user experience.

即是:

1. 可靠——即時加載,即使在不確定的網絡條件下也不會受到影響。
當用戶從主屏幕啟動時,service work可以立即加載漸進式Web應用程序,完全不受網絡環境的影響。service work就像一個客戶端代理,它控制緩存以及如何響應資源請求邏輯,通過預緩存關鍵資源,可以消除對網絡的依賴,確保為用戶提供即時可靠的體驗。

?

可靠

2. 快速
據統計,如果站點加載時間超過 3s,53% 的用戶會放棄等待。頁面展現之后,用戶期望有平滑的體驗,過渡動畫和快速響應。

?

快速

3. 沉浸式體驗—— 感覺就像設備上的原生應用程序,具有沉浸式的用戶體驗。
漸進式Web應用程序可以安裝并在用戶的主屏幕上,無需從應用程序商店下載安裝。他們提供了一個沉浸式的全屏幕體驗,甚至可以重新與用戶接觸的Web推送通知。

?

沉浸式體驗

Web應用程序中,可以通過manifest.json控制應用程序的顯示方式和啟動方式,指定主屏幕圖標、啟動應用程序時要加載的頁面、屏幕方向,甚至可以指定是否顯示瀏覽器Chrome。
根據官方的介紹,不難看出,pwa的目標直指原生app,那接下來我們就來了解下PWA到底是個怎么樣的何方神圣。

三. 核心功能

PWA并不是單指某一項技術,你更可以把它理解成是一種思想和概念,目的就是對標原生app,將Web網站通過一系列的Web技術去優化它,提升其安全性,性能,流暢性,用戶體驗等各方面指標,最后達到用戶就像在用app一樣的感覺。

PWA中包含的核心功能及特性如下:

  1. Web App Manifest
  2. Service Worker
  3. Cache API 緩存
  4. Push&Notification 推送與通知
  5. Background Sync 后臺同步
  6. 響應式設計

四. PWA如何彌補和原生App的差距

性能差異

PWA使用app Shell架構模型

1. 快速加載
2. 盡可能使用較少的數據
3. 使用本機緩存中的靜態資產
4. 將內容與導航分離開來
5. 檢索和顯示特定頁面的內容(HTML、JSON 等)
6. 緩存動態內容 App Shell 可保證 UI 的本地化以及從 API 動態加載內容,但同時不影響網絡的可鏈接性和可檢測性。 用戶下次訪問您的應用時,應用會自動顯示最新版本。無需在使用前下載新版本。
為了保證首屏的加載,在內容請求完成之前,可以優先保證 App Shell 的渲染,做到和 Native App 一樣的體驗,App Shell 是 PWA 界面展現所需的最小資源。

無法離線使用

Service Worker + HTTPS +Cache Api + indexedDB 等一系列web技術實現離線加載和緩存

數據更新

Background Sync 后臺同步技術

無法實現推送

Push&Notification 實現推送與通知

無法添加到桌面

通過manifest.json文件配置,使得可以直接添加到手機的桌面上。

天生優勢:

1. 無需安裝,無需下載,只要你輸入網址訪問一次,然后將其添加到設備桌面就可以持續使用。
2. 發布不需要提交到app商店審核
3. 更新迭代版本不需要審核,不需要重新發布審核
4. 現有的web網頁都能通過改進成為PWA, 能很快的轉型,上線,實現業務、獲取流量
5. 不需要開發Android和IOS兩套不同的版本

劣勢:

1. 游覽器對技術支持還不夠全面, 不是每一款游覽器都能100%的支持所有PWA
2. 需要通過第三方庫才能調用底層硬件(如攝像頭)
3. PWA現在還沒那么火,國內一些手機生產上在Android系統上做了手腳,似乎屏蔽了PWA, 但是相信當PWA火起來以后,這個問題就不會是問題

五. PWA的發展趨勢

2016年, PWA在google正式落地,基于 Chromium 的瀏覽器 Chrome 和 Opera 已經完全支持 PWA 了
隨著 iOS 11.3 的發布,iOS正式開始支持PWA
Windows Edge 支持PWA

隨著越來越多的游覽器大廠,相繼的對PWA做出了支持和優化,想必PWA的時代即將到來,

交流

接下來,我會分享如何使用
Vue + Vue CLI 3.x + ts + Quasar 來搭建并快速開發一個PWA



作者:偏羅
鏈接:https://www.jianshu.com/p/098af61bbe04
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249199.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249199.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249199.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Tcpdump抓包工具的使用

# Tcpdump抓包工具的使用## 簡介tcpdump是linux下最常用的命令行抓包工具,可以在線安裝## 安裝- sudo apt install tcpdump## 查看網卡- ip addr查看網卡名稱## 簡單的使用示例- sudo tcpdump -i enp032 抓取指定網卡的數據包,并- sudo tcpdump -i enp03…

Node.js異步庫async

async的使用需要安裝第三方包 1.串行無關聯 async.series 函數依次執行,后面不需要調前面步驟的結果 程序執行時間為所有步驟之和 2.并行無關聯 async.paraller 某步出錯不影響其他步驟執行 程序執行時間為最長的那個時間 3.串行有關聯 async.waterfall 函數依次執行,后面需要…

Java技術棧---語言基礎

基礎語法 面向對象 接口 容器 異常 泛型 反射 注解 I/O

Mongodb 查詢時間類型

$where: this.CreateDate.toJSON().slice(0,13) "2019-04-04T05"轉載于:https://www.cnblogs.com/kevin1988/p/10685075.html

vue prop不同數據類型(數組,對象..)設置默認值

vue prop 會接收不同的數據類型,這里列出了 常用的數據類型的設置默認值的寫法,其中包含: Number, String, Boolean, Array, Function, Object refAge: { type: Number, default: 0 }, refName: { type: String, default: }, hotDataLoading: { typ…

正則表達式——基礎

正則表達式的基本符號使用: 1。基本符號: a . 匹配任意單個字符,如:.000就可以匹配到1000,2000,3000,a000,b000等。 b | 匹配滿足其中一個條件,如: 1000|2000|3000 可以…

談一談并查集QAQ(上)

最近幾日理了理學過的很多oi知識。。。發現不知不覺就有很多的知識忘記了。。。 在聊聊并查集的時候順便當作鞏固吧。。。。 什么是并查集呢? ( Union Find Set ) 是一種用于處理分離集合的抽象數據結構類型。 具體一點: 當我們給出兩個元素的一個無序對(a,b&#…

vue的雙向綁定原理及實現

前言 使用vue也好有一段時間了,雖然對其雙向綁定原理也有了解個大概,但也沒好好探究下其原理實現,所以這次特意花了幾晚時間查閱資料和閱讀相關源碼,自己也實現一個簡單版vue的雙向綁定版本,先上個成果圖來吸引各位&a…

python后端將svc文件數據讀入數據庫具體實現

如何用python將svc文件的數據讀入到MySQL數據庫里,在此直接上代碼了,感興趣的朋友可以貼代碼測試: import pandas as pd import os from sqlalchemy import create_engine # 初始化數據庫連接,使用pymysql模塊 # MySQL的用戶&…

作業——8

這個作業屬于哪個課程C語言程序設計Ⅱ這個作業的要求在哪里C語言作業評價標準我在這個課程的目標是指針與字符串這個作業在哪個具體方面幫助我實現目標使用指針與字符串參考文獻指針和字符串(基礎知識)第七周作業 一 1 、使用函數刪除字符串中的字符 輸入…

Vue實現組件props雙向綁定解決方案

注意: 子組件不能直接修改prop過來的數據,會報錯 方案一: 用data對象中創建一個props屬性的副本 watch props屬性 賦予data副本 來同步組件外對props的修改 watch data副本,emit一個函數 通知到組件外 HelloWorld組件代碼如下…

統計詞頻問題

adict{} xinput().lower() #把單詞大寫字母改為小寫字母 for i in x:if i in [,,.,"",",!]:xx[:x.index(i)]x[x.index(i)1:] #把句子中的非字母字符用切片操作刪掉 asetset(x.split( )) #集合的好處在于不重復 alstx.split( ) for n in aset:tempdict{n:alst.…

正則表達式常用函數

<?php //preg_match("正則表達式","字符串")用于在字符串中查找匹配項 $email "987044391qq.com"; if (preg_match("/^([a-zA-Z0-9])([.a-zA-Z0-9_-])*([.a-zA-Z0-9_-])([.a-zA-Z0-9_-])([.a-zA-Z0-9_-])$/",$email)){ echo 匹…

利用js的閉包原理做對象封裝及調用方法

創建一個js文件&#xff0c;名為testClosure.js&#xff1a; ? 1 2 3 4 5 6 7 8 9 (function () { function a() { alert(i am a); } outFunc function () { a(); } })(); 這里不論寫多少個function,a b c d ...外面都調用不到&#xff0c;包括這里面va…

Flask系列06--(中間件)Flask的特殊裝飾器 before_request,after_request, errorhandler

一.使用 Flask中的特殊裝飾器(中間件)方法常用的有三個 app.before_request # 在請求進入視圖函數之前app.after_request # 在請求結束視圖函數之后 響應返回客戶端之前app.errorhandler(404) # 重定義錯誤信息before_request def func():passafter_request def func(ret): # …

Flask 中內置的 Session

Flask中的Session非常的奇怪,他會將你的SessionID存放在客戶端的Cookie中,使用起來也非常的奇怪 1. Flask 中 session 是需要 secret_key 的 from flask import session app Flask(__name__) app.secret_key "DragonFire" secret_key 實際上是用來加密字符串的,如果…

CSS像素、物理像素、邏輯像素、設備像素比、PPI、Viewport

最近看了很多這方面的文章&#xff0c;能搜到的基本看了個遍&#xff0c;但感覺還是似懂非懂&#xff0c;知道這個東西&#xff0c;很難說出這是個什么東西&#xff0c;先整理一些概念&#xff0c;慢慢消化&#xff0c;以后慢慢探索其中的原因。 1、PX(CSS pixels) 1.1 定義 …

【轉】10條你不可不知的css規則

10條你不可不知的css規則 Posted on 2006-12-20 10:33 雨中太陽 閱讀(343) 評論(1) 編輯 收藏 &#xff1a;【譯】10條你不可不知的css規則正文&#xff1a; Published December 6th, 2004 in CssStaff Tags: No Tags. 原文地址&#xff1a;Ten CSS Tricks You May not Know k…

Python 面向對象【1】

對象 屬性 方法面向對象特征&#xff1a;分裝 繼承 多態【不同對象對同一方法響應不同行動】類定義class xxx:........類對象類對象支持兩種操作&#xff1a;屬性引用和實例化 屬性引用 使用和 Python 中所有的屬性引用一樣的標準語法&#xff1a;類對象名.屬性名 類對象創建…

【前端面試】HTML5+CSS3初級面試1

最近剛好在看前端的面試&#xff0c;把看到的內容總結一下&#xff0c;方便大家一起學習。 1、簡單說一下對HTML5CSS3的了解。 HTML5和CSS3不僅是兩項新的Web技術標準&#xff0c;而且代表了下一代HTML和CSS技術。其未來的發展前景已經可以預見&#xff0c;那就是HTML5必將被越…