PWA初體驗,效果拔群

白屏以及離線不可用笆呆,是Web App最大的體驗問題请琳。據(jù)說,PWA是解決這兩大問題的曙光赠幕。

那么俄精,就很有必要來了解試用一下這玩意兒。

OK, 程序員的好習慣之一是使用Github榕堰,搜索"pwa demo"

按照md來進行安裝和部署之后竖慧,按照要求來試玩(因為下載不到chrome canary版本嫌套,暫用普通的Chrome來測試):

Step 1: Go offline.(切離線環(huán)境)
Step 2: Register BG Sync from above register button.(點擊頁面上注冊按鈕)
Step 3: Enter a git username and click add.(輸入github用戶名)
Step 4: Go online and sync will be triggered when user is gets connectivity and card will be updated.(切上線環(huán)境以后刷新)

試用以后并不能work.

因此簡單修改步驟:

Step 1: 線上環(huán)境首先搜索一個github用戶名。
Step 2: 獲得結(jié)果以后切離線環(huán)境圾旨。
Step 3: 點擊注冊按鈕踱讨。
Step 4: 離線環(huán)境下搜索同一個用戶名,正常來說無法訪問砍的,但是同樣可以獲得正確結(jié)果痹筛。

為何如此神奇呢?



上圖是HTTP Response頭部信息廓鞠,看起來這個serviceWorker是重點

先看一段定義

一個 service worker 是一段運行在瀏覽器后臺進程里的腳本帚稠,它獨立于當前頁面,提供了那些不需要與web頁面交互的功能在網(wǎng)頁背后悄悄執(zhí)行的能力床佳。在將來滋早,基于它可以實現(xiàn)消息推送,靜默更新以及地理圍欄等服務(wù)砌们,但是目前它首先要具備的功能是攔截和處理網(wǎng)絡(luò)請求馆衔,包括可編程的響應(yīng)緩存管理。

接著看代碼:


//Adding `fetch` event listener
self.addEventListener('fetch', (event) => {
  console.info('Event: Fetch');

  var request = event.request;

  //Tell the browser to wait for newtwork request and respond with below
  event.respondWith(
    //If request is already in cache, return it
    caches.match(request).then((response) => {
      if (response) {
        return response;
      }

      //if request is not cached, add it to cache
      return fetch(request).then((response) => {
        var responseToCache = response.clone();
        caches.open(cacheName).then((cache) => {
            cache.put(request, responseToCache).catch((err) => {
              console.warn(request.url + ': ' + err.message);
            });
          });

        return response;
      });
    })
  );
});

可以看到怨绣,全局變量有一個監(jiān)聽器角溃,監(jiān)聽fetch事件,而這邊的fetch就是獲取API的工作篮撑,從上面(If request is already in cache, return it)可以看出如果命中了緩存中的request减细,就直接使用緩存,response同理赢笨。

從下面的代碼中可以看到未蝌,如果處于offline狀態(tài),請求參數(shù)會先存在localStorage中茧妒,然后sync事件會激活萧吠,從而再去發(fā)送請求

.catch(function (error) {
//If user is offline and sent a request, store it in localStorage
//Once user comes online, trigger bg sync fetch from application tab to make the failed request
localStorage.setItem('request', name);
spinnerElement.classList.remove('show'); //hide spinner
console.error(error);
});

self.addEventListener('sync', (event) => {
  console.info('Event: Sync');

  //Check registered sync name or emulated sync from devTools
  if (event.tag === 'github' || event.tag === 'test-tag-from-devtools') {
    event.waitUntil(
      //To check all opened tabs and send postMessage to those tabs
      self.clients.matchAll().then((all) => {
        return all.map((client) => {
          return client.postMessage('online'); //To make fetch request, check app.js - line no: 122
        })
      })
      .catch((error) => {
        console.error(error);
      })
    );
  }
});

這樣來看,必須了解一下serviceWorker的工作原理與使用方法了桐筏,閱讀文章大有收獲https://www.w3ctech.com/topic/866

根據(jù)以上文章可以在自己的Github Page中應(yīng)用Service Worker纸型,大家可以看看我的Blog,現(xiàn)已開啟服務(wù)https://ganchengyuan1990.github.io/blog/梅忌。

值得注意的是狰腌,目前只有HTTPS協(xié)議下可以使用Service Worker,而Github Page服務(wù)器上使用的就是HTTPS協(xié)議牧氮,所以最合適用來試驗琼腔。另外,如果所有第三方資源(包括圖片)最好也使用HTTPS協(xié)議踱葛,否則就會有報錯丹莲,無法正常顯示光坝。辦法之一就是把圖片資源都放在Github Page服務(wù)器上。

總體來說甥材,PWA效果不錯教馆,在安卓手機中安裝了CHROME以后還可以把頁面添加到主屏幕,就像是一個APP一樣擂达!并且CHROME會幫你加一個首屏動畫,效果拔群胶滋!

但是它的問題也很明顯板鬓,兼容性問題,畢竟那么多IPHONE用戶你不能不管吧究恤。

大家可以關(guān)注一下我的博客https://ganchengyuan1990.github.io/blog/俭令,可以在文章下面留言。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末部宿,一起剝皮案震驚了整個濱河市抄腔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌理张,老刑警劉巖赫蛇,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異雾叭,居然都是意外死亡悟耘,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門织狐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來暂幼,“玉大人,你說我怎么就攤上這事移迫⊥遥” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵厨埋,是天一觀的道長邪媳。 經(jīng)常有香客問我,道長荡陷,這世上最難降的妖魔是什么悲酷? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮亲善,結(jié)果婚禮上设易,老公的妹妹穿的比我還像新娘。我一直安慰自己蛹头,他們只是感情好顿肺,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布戏溺。 她就那樣靜靜地躺著,像睡著了一般屠尊。 火紅的嫁衣襯著肌膚如雪旷祸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天讼昆,我揣著相機與錄音托享,去河邊找鬼。 笑死浸赫,一個胖子當著我的面吹牛闰围,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播既峡,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼羡榴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了运敢?” 一聲冷哼從身側(cè)響起校仑,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎传惠,沒想到半個月后迄沫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡卦方,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年邢滑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愿汰。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡困后,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出衬廷,到底是詐尸還是另有隱情摇予,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布吗跋,位于F島的核電站侧戴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏跌宛。R本人自食惡果不足惜酗宋,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望疆拘。 院中可真熱鬧蜕猫,春花似錦、人聲如沸哎迄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至翔烁,卻和暖如春渺氧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蹬屹。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工侣背, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人慨默。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓贩耐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親业筏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 第二天的分享更加偏向 Web 后端鸟赫。 第一場:Node.js Microservices on Autopilot...
    一縷殤流化隱半邊冰霜閱讀 2,443評論 0 13
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理蒜胖,服務(wù)發(fā)現(xiàn),斷路器抛蚤,智...
    卡卡羅2017閱讀 134,704評論 18 139
  • afinalAfinal是一個android的ioc台谢,orm框架 https://github.com/yangf...
    passiontim閱讀 15,439評論 2 45
  • 文/南木婉清 朝夢,夢一場岁经,夢生花落朋沮,夢里有春草。 執(zhí)念缀壤,念一生樊拓,念起緣滅,念里有蘭香塘慕。
    南木婉清閱讀 222評論 11 2
  • 關(guān)于旅行图呢,我們總是在說著“等我有時間了”条篷,“等我有錢了”,“等我找到那個能陪我一起的人了”之類的句式蛤织。你以為還有下...
    溫小火閱讀 395評論 3 14