亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

PWA 程序開發實踐

2019-11-06 09:57:33
字體:
來源:轉載
供稿:網友

本文開源實驗室原創,轉載請以鏈接形式注明地址:https://kymjs.com/code/2017/02/18/01

題外話:寫給所有移動端開發的同學:PWA(PRogressive Web Apps) 一定是將來的移動開發趨勢,且學且珍惜。 手機端可在我公眾號【技術實驗室】的歷史推送文章查看。

已經公開章節: 第一篇 · Service Worker:讓網頁無網絡也能訪問 第二篇 · PWA 程序開發實踐 GitHub 演示項目 · PWAblog

介紹

這里再介紹一下 Progressive Web Apps 是結合了 web 和 原生應用中某些功能的一種體驗(本質上還是 web 應用)。但是作為一個 web 應用,它可以 斷網使用、推送消息、發送通知、從桌面啟動,當然還包括 Web 應用的優勢:免安裝、快速開發、依賴瀏覽器跨平臺(支持包括Edge在內的各種主流PC/手機瀏覽器)。

fetch 攔截請求

之前講述了 PWA 最重要的組件:Service Worker,沒有看過的可以先看看:https://kymjs.com/code/2017/02/04/01/。今天繼續來看他的一些高級屬性。 今天要說的高級屬性已經寫在了我的Service Worker里,可查看:開源實驗室防盜鏈fetch事件。 fetch是一個很有意思的事件,它可以攔截一個網絡請求數據,決定是從緩存返回還是去網絡請求。

self.addEventListener('fetch', function(e) { var allDataUrl = filesToCache; var requestIsDataApi = false; for (dataurl in allDataUrl){ if (e.request.url.indexOf(dataurl) > -1 ) { requestIsDataApi = true; e.respondWith( caches.open(dataCacheName).then(function(cache) { return fetch(e.request).then(function(response){ cache.put(e.request.url, response.clone()); return response; }); }) ); break; } } if (!requestIsDataApi){ e.respondWith( caches.match(e.request).then(function(response) { return response || fetch(e.request); }) ); }});

這里,我將所有請求的 URL 做了個判斷,如果是緩存URL,直接從本地緩存中返回;反之如果是不屬于緩存 URL,就攔截請求,使用fetch()發請求,將結果保存到緩存并返回。 可以攔截請求這一點讓fetch事件可以玩出花來,下一篇我們繼續講 PWA 時再看它的黑科技。

應用程序外殼(App Shell)

如果你按照上一篇博客的講述,自己動手實現了博客斷網訪問。在欣喜的同時一定也會發現,博客沒法更新了。 當博客內容更改的時候,如果之前用戶已經訪問過這篇博客,他再次訪問依舊是之前緩存過的內容,而不是新內容。 這就涉及到 PWA 的一個名詞:應用程序外殼(App Shell)。 一個 web 應用分為 應用程序外殼應用數據, 應用外殼的結構分為應用的核心基礎組件和承載數據的 UI。所有的 UI 和基礎組件都使用一個 service worker 緩存在本地,因此在后續的加載中 Progressive Web App 僅需要加載需要的數據,而不是加載所有的內容。 這就類似 Android 應用,下載安裝的是外殼,只需要下載一次,接口API請求的數據是實時變化的。 因此,之前我們是把整個博客當成了APP Shell,除非版本變更,否則當然不會再發生變化。

設計 App Shell

還是以 開源實驗室 來做例子,首先看看效果圖。

開源實驗室PWA

一個移動應用,應該是包括 ActionBar(StatusBar)、ContentBottomBar(FooterBar)三部分構成。ActionBar 和 BottomBar 基本是固定的不會有大變化,這部分用 html 很容易實現,最主要的是 Content 部分,這部分內容是動態改變的,不包括在 App Shell 中,因此這里我們先不管他。

<!DOCTYPE html><html><head> <title>開源實驗室-kymjs張濤</title> <link rel="stylesheet" type="text/CSS" href="styles/inline.css"> </head><body> <header class="header"> <h1 class="header_title">開源實驗室</h1> <a ><button id="butAbout" class="headerButton" aria-label="about"></button></a> </header> <main class="main"> </main> <footer class="footer"> <button id="column1" class="button1">專欄</button> <button id="column2" class="button2 active">博客</button> <button id="column3" class="button3">作品</button> </footer> <script src="scripts/app.js" async></script></body></html>

APP Shell 已經完成了,接下來我們需要在 service-worker 中聲明他是一個不需要多次下載的頁面。

設計 Content

由于 Content 是變化的,所以我們只寫一個模板,讓 js 去根據數據改變這個模板內容。 先寫好將會放在 Content 區域的 item 模板(相當于 Android 中 ListView 的 item 先創建一個模板)。

<div class="post-list-body post-area"> <div class="list-item" hidden> <a id="blogLink"> <div class="post-list-item"> <font color="#aaaaaa" id="blogTime"></font> <h2><font color="#AE57A4" id="tag"></font> <font color="#333333" id="title"></font></h2> <p><font color="#666666" id="description"> description template </font></p> </div> </a> </div></div>

接著使用 Ajax 請求博客的內容數據,可以通過調用開源實驗室的 OpenAPI 獲取數據。

app.requestBlogList = function(){ //跨域請求會失敗,本地調試時先使用偽數據 // var url = "/download.json"; var url = "http://openapi.kymjs.com/oslab"; xmlhttp.onreadystatechange=function(){ if (xmlhttp.readyState == XMLHttpRequest.DONE && xmlhttp.status==200){ var response = JSON.parse(xmlhttp.response); var itemList = response.item; app.addContent(itemList); } }; xmlhttp.open("GET", url); xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;"); xmlhttp.send(); }

拿到數據了以后,調用addContent(),去根據模板動態生成內容。代碼就不貼了,具體可查看 github 倉庫 PWAblog。

配置 Service Worker

至此,整個應用就已經全部開發完成了,接下來我們只需要配置 service worker 讓應用程序外殼生效就 OK 了。 回顧上一篇文章,首先在 js 中判斷瀏覽器是否支持,如果支持就注冊。 監聽 install 事件,緩存 url。 監聽 activate事件,移除過期緩存,保證應用更新版本后可以升級。 最后,通過fetch事件攔截網絡請求做訪問緩存邏輯處理。 這樣一個簡單的 PWA 程序就完成了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产三级精品网站| 欧美孕妇毛茸茸xxxx| 97国产成人精品视频| 成人综合国产精品| 亚洲国产97在线精品一区| 日韩精品免费综合视频在线播放| 久久久精品影院| 97色在线视频| 国产精品一区专区欧美日韩| 国产精品wwww| 亚洲影院污污.| 国产精品久久中文| 亚洲精选一区二区| 欧美精品在线第一页| 97人洗澡人人免费公开视频碰碰碰| 国产亚洲欧美日韩美女| 国产高清视频一区三区| 国产免费一区视频观看免费| 欧美日韩中文在线| 北条麻妃一区二区在线观看| 亚洲图片欧美日产| 91精品在线看| 欧洲中文字幕国产精品| 欧美激情精品久久久久久大尺度| 日韩大片免费观看视频播放| 亚洲淫片在线视频| 俺也去精品视频在线观看| 清纯唯美亚洲综合| 日韩综合中文字幕| 日本成人在线视频网址| 亚洲欧美www| 久久久视频精品| 色视频www在线播放国产成人| 亚洲石原莉奈一区二区在线观看| 欧美三级xxx| 欧洲美女7788成人免费视频| 国产午夜精品视频| 日韩av中文字幕在线播放| 亚洲成人动漫在线播放| 成人在线播放av| 福利视频导航一区| 欧美激情亚洲国产| 亚洲精品国精品久久99热| 亚洲男女自偷自拍图片另类| 久久99久国产精品黄毛片入口| 欧美成人激情在线| 国内精品久久久久久影视8| 日韩在线中文视频| 国产在线98福利播放视频| 国产精品男人的天堂| 91av视频导航| 日韩天堂在线视频| 久久精品视频在线观看| 亚洲欧美国产日韩中文字幕| 亚洲综合精品一区二区| 亚洲国产成人爱av在线播放| 亚洲黄页视频免费观看| 国内偷自视频区视频综合| 性视频1819p久久| 国产在线精品一区免费香蕉| 欧美高清电影在线看| 91国在线精品国内播放| 国产精品激情自拍| 91网站免费观看| 欧美精品国产精品日韩精品| 国产精品一区专区欧美日韩| 成人亚洲欧美一区二区三区| 亚洲va男人天堂| 91久久精品视频| 午夜精品福利视频| 成人444kkkk在线观看| 久久精品国产亚洲一区二区| 欧美成人激情在线| www.久久撸.com| 91亚洲精品一区二区| 色偷偷亚洲男人天堂| 欧美日韩一二三四五区| 久久久免费精品视频| 国产精品日韩欧美大师| 日韩成人av在线播放| 97免费中文视频在线观看| 九九热精品视频国产| 国产欧美日韩专区发布| 久久人人爽人人爽人人片av高请| 久久久国产精品免费| 中文字幕亚洲欧美日韩高清| 91亚洲国产成人久久精品网站| 亚洲国产天堂久久综合网| 欧美尺度大的性做爰视频| 欧美一级淫片aaaaaaa视频| 91国语精品自产拍在线观看性色| 亚洲天堂av图片| 欧美视频不卡中文| 久久噜噜噜精品国产亚洲综合| 亚洲福利视频在线| 97香蕉超级碰碰久久免费的优势| 欧美另类极品videosbest最新版本| 色中色综合影院手机版在线观看| 日韩精品视频三区| 在线视频精品一| 91精品国产高清久久久久久| 亚洲九九九在线观看| 亚洲在线第一页| 少妇久久久久久| 国产亚洲欧美另类中文| 九色精品美女在线| 国产精品99久久久久久人| 日韩欧美综合在线视频| 亚洲欧洲第一视频| 日韩经典中文字幕| 国产亚洲人成网站在线观看| 久热精品视频在线观看一区| 亚洲人成免费电影| 欧美在线性视频| 久久人人爽人人爽爽久久| 精品人伦一区二区三区蜜桃免费| 国产午夜精品全部视频播放| 深夜成人在线观看| 欧美亚洲午夜视频在线观看| 91视频免费在线| 日韩欧美一区二区三区| 亚洲第一网中文字幕| 亚洲美女免费精品视频在线观看| 91日本视频在线| 91中文在线视频| 国产欧美精品一区二区三区-老狼| 欧美激情手机在线视频| 一色桃子一区二区| 在线看欧美日韩| 一个人看的www欧美| 国产日产欧美精品| 国产成人精品久久二区二区91| 91av在线免费观看视频| 国产精品激情自拍| 国产成人久久久精品一区| 国产精品一区二区久久久| 国产精品美女免费看| 国产精品伦子伦免费视频| 国产成人一区三区| 亚洲国产精品视频在线观看| 热久久免费视频精品| 97国产在线视频| 国产精品精品久久久久久| 91视频国产高清| 在线精品高清中文字幕| 狠狠色狠狠色综合日日五| 91精品久久久久久久久久久| 日韩有码在线观看| 日韩av中文字幕在线免费观看| 亚洲欧美综合区自拍另类| 国产精品美女久久久久久免费| 国产精品高潮视频| 2019中文字幕在线观看| 欧美激情国产日韩精品一区18| 亚洲性视频网址| 日韩美女写真福利在线观看| 亚洲白拍色综合图区| 久久精品福利视频| 国产精品美女在线观看| www.99久久热国产日韩欧美.com| 日韩欧美在线视频日韩欧美在线视频| 亚洲丁香久久久| 欧美国产日韩二区| 亚洲xxx自由成熟|