摘要:開始這是一個(gè)純練手的小項(xiàng)目,旨在練習(xí)使用相關(guān)技術(shù)構(gòu)建一個(gè)網(wǎng)絡(luò)應(yīng)用。中一個(gè)很重要的點(diǎn)就是利用攔截?cái)r截客戶端請求,如果請求命中緩存中的數(shù)據(jù),則無需訪問網(wǎng)絡(luò),直接返回。
開始
這是一個(gè)純練手的小項(xiàng)目,旨在練習(xí)使用PWA(Progressive Web Apps)相關(guān)技術(shù)構(gòu)建一個(gè)網(wǎng)絡(luò)應(yīng)用。
項(xiàng)目地址:https://github.com/bjw1234/ne...
預(yù)覽地址:https://bjw1234.github.io/new...
手機(jī)端截屏:
主頁面
詳情頁
PWA(Progressive Web Apps)漸進(jìn)式網(wǎng)絡(luò)應(yīng)用,結(jié)合了 Web 和 原生應(yīng)用中最好功能的一種體驗(yàn)。對于首次訪問的用戶它是非常有利的, 用戶可以直接在瀏覽器中進(jìn)行訪問,不需要安裝應(yīng)用。隨著時(shí)間的推移當(dāng)用戶漸漸地和應(yīng)用建立了聯(lián)系,它將變得越來越強(qiáng)大。它能夠快速地加載,即使在比較糟糕的網(wǎng)絡(luò)環(huán)境下,能夠推送相關(guān)消息, 也可以像原生應(yīng)用那樣添加至主屏,能夠有全屏瀏覽的體驗(yàn)。
Service WorkerPWA中一個(gè)很重要的點(diǎn)就是利用Service Worker攔截?cái)r截客戶端請求,如果請求命中緩存中的數(shù)據(jù),則無需訪問網(wǎng)絡(luò),直接返回。
注冊Service Workerif("serviceWorker" in navigator){ navigator.serviceWorker.register("./news_sw.js").then(reg => { console.log("ServiceWorker registration successful with scope:" + reg.scope); }).catch(err => { console.log("ServiceWorker registration fail:",err); }); }Service Worker詳情
news_sw.js,在這個(gè)文件中我們需要去監(jiān)聽三件事情,Service Worker的安裝,激活以及fetch事件。
// 安裝事件,在這里將一些初始化或者`app shell`資源加入緩存列表 self.addEventListener("install", event => { event.waitUntil( // xxx ); }); // 激活事件,在這個(gè)函數(shù)中處理資源的更新 self.addEventListener("activate", event => { event.waitUntil(( //xxx ); }); // fetch事件,在這個(gè)函數(shù)中攔截并處理用戶的請求 self.addEventListener("fetch", event => { event.respondWith( caches.match(event.request,{ ignoreSearch: true }).then( response => { if(response){ // 緩存命中直接返回 } // 向服務(wù)器請求資源 // 出錯(cuò)則返回 // response ok // 添加到緩存列表 }); ); });客戶端發(fā)起請求
function requestData(url) { fetch(url,{ method:"GET" }).then(result => { if(result){ return result.json(); } }).then(data => { console.log(data); buildWebPage(data.latestNews); }); }解析URL
當(dāng)用戶在首頁點(diǎn)擊不同的新聞,需要跳轉(zhuǎn)到新聞詳情頁。所以在article.js中去解析URL判斷給用戶呈現(xiàn)什么內(nèi)容。
// 解析url function queryParameter(url){ let obj = {}; url.replace(/([^?&=]+)=([^?&=]+)/g,($0,$1,$2) => { obj[$1] = $2; }); return obj; } // 獲取地址欄的url let param = queryParameter(document.location.href);每一條新聞的數(shù)據(jù)結(jié)構(gòu)
模擬來自服務(wù)器端的json數(shù)據(jù)。
{ "id": 0, "image":"./images/0.jpg", "title": "中方回應(yīng)馬來西亞將取消新隆高鐵項(xiàng)目", "desc": "有記者問:據(jù)報(bào)道,馬來西亞總理昨天宣布將取消新隆高鐵項(xiàng)目......", "time":"兩分鐘前", "read":"2344評", "type":"國內(nèi)" } ...manifest.json配置
{ "name": "news web app", "short_name": "hello news", "start_url": "./index.html", "theme_color": "#00ff8b", "background_color": "#00ff8b", "display": "standalone", "icons": [ { "src": "./images/news-144.png", "sizes": "144X144", "type": "image/png" }, { "src": "./images/news-192.png", "sizes": "192X192", "type": "image/png" } ] }CSS實(shí)現(xiàn)多行文本超出省略號顯示
overflow : hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;是否支持webp格式的判斷
// 在serviceWorker中攔截請求 self.addEventListener("fetch",event => { if(/.jpg$|.png$/.test(event.request.url)){ let supportWebp = false; // 判斷是否支持webp文件 if(event.request.headers.has("accept")){ supportWebp = event.request.headers.get("accept").includes("webp"); } if(supportWebp){ var req = event.request.clone(); var returnUrl = "http://localhost/sunset.jpg"; console.log(returnUrl); event.respondWith( fetch(returnUrl,{ mode:"no-cors" }) ); } } }); // 在window中判斷 function isSupportWebp(){ var isSWebp = !![].map && document.createElement("canvas").toDataURL("image/webp"). indexOf("data:image/webp") == 0; return isSWebp; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/107873.html
摘要:前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn)分為新聞熱點(diǎn)開發(fā)教程工程實(shí)踐深度閱讀開源項(xiàng)目巔峰人生等欄目。 前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn);分為新聞熱點(diǎn)、開發(fā)教程、工程實(shí)踐、深度閱讀、開源項(xiàng)目、巔峰人生等欄目。歡迎關(guān)注【前端之巔】微信公眾號(ID:frontshow),及時(shí)獲取前端每周清單;本文則是對于...
摘要:前端每周清單第期支付寶前端構(gòu)建工具發(fā)展用加快網(wǎng)頁響應(yīng)速度餓了么升級實(shí)踐前端前端每周清單前端每周清單專注前端領(lǐng)域內(nèi)容,分為新聞熱點(diǎn)開發(fā)教程工程實(shí)踐深度閱讀開源項(xiàng)目巔峰人生等欄目。 前端每周清單第 12 期:支付寶前端構(gòu)建工具發(fā)展、LinkedIn用Brotli加快網(wǎng)頁響應(yīng)速度、餓了么PWA 升級實(shí)踐 為InfoQ中文站特供稿件,首發(fā)地址為這里;如需轉(zhuǎn)載,請與InfoQ中文站聯(lián)系。從屬于筆...
摘要:前置知識儲備是網(wǎng)絡(luò)上談?wù)撟疃嗟募夹g(shù)變革之一,在界從業(yè)者中獲得了前所未有的勢頭。如果你是為構(gòu)建的,我相信是添加到你的工作詞匯中的最新流行語。在這篇文章中,我想要以一個(gè)簡單的案例來教會各位如何起步。 showImg(https://segmentfault.com/img/bVbd3uj?w=1850&h=1042); 前置知識儲備 PWA ( Progressive Web Apps )...
摘要:新聞熱點(diǎn)國內(nèi)國外,前端最新動態(tài)就開源許可證風(fēng)波進(jìn)行回復(fù)數(shù)周前,基金會決定禁止旗下項(xiàng)目使用,因?yàn)槠湓跇?biāo)準(zhǔn)的許可證之外添加了專利聲明此舉引發(fā)了社區(qū)的廣泛討論,希望能夠更新其開源許可證。 showImg(https://segmentfault.com/img/remote/1460000010777089); 前端每周清單第 27 期:React Patent License 回復(fù),Sho...
摘要:在該版本發(fā)布之后,開發(fā)團(tuán)隊(duì)并不會繼續(xù)發(fā)布新的特性,而會著眼于進(jìn)行重大的錯(cuò)誤修復(fù)。發(fā)布每六個(gè)星期,團(tuán)隊(duì)就會創(chuàng)建新的分支作為發(fā)布通道,本文即是對新近發(fā)布的版本進(jìn)行簡要介紹。 showImg(https://segmentfault.com/img/remote/1460000013229009); 前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn);分為新聞熱...
閱讀 3156·2023-04-25 18:22
閱讀 2390·2021-11-17 09:33
閱讀 3307·2021-10-11 10:59
閱讀 3237·2021-09-22 15:50
閱讀 2809·2021-09-10 10:50
閱讀 859·2019-08-30 15:53
閱讀 448·2019-08-29 11:21
閱讀 2908·2019-08-26 13:58