[翻譯]入門angular的 Service Workers

原文

前期準(zhǔn)備

如下的基礎(chǔ)知識:


從5angular.0.0開始,在任意cli項目中,你可以很容易的開啟Angular service worker。這文檔是介紹怎么去在新的或舊的項目中啟用Angular service worker仪际。會通過一個簡單的例子是展示service worker的行為與基本緩存乏悄。

在新項目中添加service worker

如果你要生成一個新的cli項目,你可以使用cli去配置Angular service worker:

ng new my-project --service-worker

--service-worker命令會去做所有的配置并添加需要依賴的包羔巢。想了解更多,可查看下面的關(guān)于如何在舊項目添加service worker的說明

在舊項目中添加service worker

添加步驟:

  1. 添加service worker的包依賴罩阵。
  2. 在cli配置中啟用service worker竿秆。
  3. 導(dǎo)入和注冊service worker。
  4. 新建配置文件稿壁,定義緩存的行為和其它設(shè)定幽钢。
  5. 編譯項目。

步驟1:添加service worker的包依賴傅是。使用yarn包管理工具:

yarn add @angular/service-worker

步驟2:在cli配置中啟用service worker:

要開啟Angular service worker匪燕,cli必須在編譯時生成Angular service worker的配置。要在舊項目中通知cli去做這一步喧笔,必須把.angular-cli.json文件里的 serviceWorker的值改成true

ng set apps.0.serviceWorker=true

步驟3:導(dǎo)入和注冊service worker:

src/app/app.module.ts中:

import  {  [ServiceWorkerModule](https://angular.io/api/service-worker/ServiceWorkerModule)  }  from  '@angular/service-worker';  
import  { environment }  from  '../environments/environment';

@NgModule({ 
declarations:  [  AppComponent  ], 
imports:  [  
   BrowserModule,  
   ServiceWorkerModule.register('/ngsw-worker.js',  {enabled: environment.production})  
   ], 
   providers:  [ ],
   bootstrap:  [AppComponent]
 })  
export  class  AppModule  {  }

ngsw-worker.js文件是cli編譯生成的service worker腳本帽驯,最后能在dist/里找到。

步驟4: 新建配置文件, ngsw-config.json

angular cli需要名為ngsw-config.json的service worker配置文件溃斋。這文件定義了如何去緩存文件與數(shù)據(jù)資源界拦。

你可以使用cli產(chǎn)生的通用配置版本

或者,將以下內(nèi)容保存為src/ ngsw-config.json:

{
  "index": "/index.html",
  "assetGroups": [{
    "name": "app",
    "installMode": "prefetch",
    "resources": {
      "files": [
        "/favicon.ico",
        "/index.html"
      ],
      "versionedFiles": [
        "/*.bundle.css",
        "/*.bundle.js",
        "/*.chunk.js"
      ]
    }
  }, {
    "name": "assets",
    "installMode": "lazy",
    "updateMode": "prefetch",
    "resources": {
      "files": [
        "/assets/**"
      ]
    }
  }]
}

步驟 5: 編譯項目

ng build --prod

產(chǎn)生的項目就是啟用了Angular service worker了.

Service worker 的展示說明

此模塊通過一個示例來展示說明service worker

使用http-server構(gòu)建服務(wù)器

因為ng serve 不會啟動service worker梗劫,你必須使用另一個http服務(wù)器去本地測試你的項目享甸。你可以使用任何的HTTP服務(wù)器。下面例子是使用http-server梳侨,可以通過npm安裝蛉威。為了減少沖突的可能性,將在一個專用的端口測試走哺。
要使用http-server開啟服務(wù)蚯嫌,要移動到打包文件的文件夾內(nèi)然后啟動web服務(wù):

cd dist
http-server -p 8080

初次加載

服務(wù)啟動中,你可以在瀏覽器訪問http://localhost:8080/丙躏。你的應(yīng)用應(yīng)該是正常運(yùn)行择示。

提示:當(dāng)測試Angular service workers,最好是在瀏覽器中使用無痕或私有窗口,這能保證service worker不會從以前的留下的緩存中讀取數(shù)據(jù)晒旅,造成意外的狀況栅盲。

模擬網(wǎng)絡(luò)問題

要模擬網(wǎng)絡(luò)問題,可禁止應(yīng)用的網(wǎng)絡(luò)連接废恋。在Chrome內(nèi):

  1. Select Tools > Developer Tools (開發(fā)人員工具).
  2. 進(jìn)入Network分頁.
  3. 勾選the Offline 項.

Now the app has no access to network interaction.
現(xiàn)在應(yīng)用沒法訪問網(wǎng)絡(luò)了谈秫。

對于那些沒有使用Angular service worker的應(yīng)用扒寄,刷新頁面會顯示 "There is no Internet connection"的頁面。

添加了Angular service worker的應(yīng)用不一樣拟烫。刷新后该编,頁面正常顯示。
如果你查看Network 分頁的信息硕淑,你就能驗證service worker是在工作课竣。

什么被緩存

會發(fā)現(xiàn)所有用來渲染app的文件都被緩存了。給cli使用的通用ngsw-config.json就是定義了緩存這些特定的資源:

  • index.html.
  • favicon.ico.
  • 編譯的文件 (JS and CSS bundles).
  • assets文件夾里的所有文件.

修改你的應(yīng)用

現(xiàn)在你已經(jīng)看到service worker如何緩存你的應(yīng)用喜颁,下一步是理解更新如何工作稠氮。

  1. 如果你在一個無痕窗口中測試,打開另一個分頁半开。這會使?fàn)顟B(tài)和緩存不會再測試中消失。
  2. 關(guān)閉應(yīng)用的分頁赃份,但不是瀏覽器寂拆。這也會關(guān)閉了開發(fā)者工具。
  3. 關(guān)閉http-server的服務(wù)抓韩。
  4. 下一步纠永,修改應(yīng)用,查看service worker安裝更新谒拴。
  5. 打開src/app/app.component.html并編輯
  6. 修改文本 Welcome to {{title}}! 為 Bienvenue à {{title}}!.
  7. 再次編譯并啟動服務(wù)
ng build --prod
cd dist
http-server -p 8080

在瀏覽器中更新你的應(yīng)用

現(xiàn)在觀察瀏覽器和service worker是如何處理更新了的應(yīng)用

  1. 在同一瀏覽器再次打開http://localhost:8080 尝江。發(fā)生什么?

    哪里出錯了英上?實際是沒有的炭序。Angular service worker就在執(zhí)行它的工作,展示它已安裝的應(yīng)用的版本苍日。盡管有一個可用的更新惭聂。為了提高速度,service worker會在完成展示已緩存的應(yīng)用后才去檢查更新相恃。

如果你查看http-server的日志辜纲,你就可以看到service worker請求/ngsw.json。這是service worker在檢查更新拦耐。

  1. 刷新頁面.

service worker在后臺安裝了更新的app版本耕腾,下次頁面加載或重加載時,service worker就展示最新的版本杀糯。

更多的關(guān)于 Angular service workers

你可能對以下感興趣

你們的贊賞是我的無限動力

如果覺得文章對你有點用的話扫俺,麻煩拿出手機(jī),這里有一個你我都有的小福利(每天一次): 打開支付寶首頁搜索“8601304”火脉,即可領(lǐng)紅包牵舵。謝謝支持

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柒啤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子畸颅,更是在濱河造成了極大的恐慌担巩,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件没炒,死亡現(xiàn)場離奇詭異涛癌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)送火,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門拳话,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人种吸,你說我怎么就攤上這事弃衍。” “怎么了坚俗?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵镜盯,是天一觀的道長。 經(jīng)常有香客問我猖败,道長速缆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任恩闻,我火速辦了婚禮艺糜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘幢尚。我一直安慰自己破停,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布侠草。 她就那樣靜靜地躺著辱挥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪边涕。 梳的紋絲不亂的頭發(fā)上晤碘,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機(jī)與錄音功蜓,去河邊找鬼园爷。 笑死,一個胖子當(dāng)著我的面吹牛式撼,可吹牛的內(nèi)容都是我干的童社。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼著隆,長吁一口氣:“原來是場噩夢啊……” “哼扰楼!你這毒婦竟也來了呀癣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤弦赖,失蹤者是張志新(化名)和其女友劉穎项栏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹬竖,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡沼沈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了币厕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片列另。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖旦装,靈堂內(nèi)的尸體忽然破棺而出页衙,到底是詐尸還是另有隱情,我是刑警寧澤同辣,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布拷姿,位于F島的核電站,受9級特大地震影響旱函,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜描滔,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一棒妨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧含长,春花似錦券腔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至陪腌,卻和暖如春辱魁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诗鸭。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工染簇, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人强岸。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓锻弓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蝌箍。 傳聞我的和親對象是個殘疾皇子青灼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355