ServiceWorker
UI Threadとは別のThreadで動作するJavaScript環境
これを応用して、以下のような用途に使える
Proxy ServerとCache操作
client ↔ ServiceWorker ↔ server
client/server間でやり取りされるreq/resを操作したり
serverの代わりにcacheから返すようにすることでoffline作業できるようにしたり
performanceの向上
UIと別のthreadを使うので、重い処理を任すことでperfomance向上に繋がる
参考
Service worker overview - Chrome Developers
Service Workerってなんなのよ (Service Workerのえほん) - Qiita
ざっくり概要
#WIP
https://tech.repro.io/entry/2023/07/27/105218
呼び出したら、タスクが終わるまでは終了しない
強制終了はできない
browserを閉じた後も動作する
まじ?
できないこと
DOMを操作することはできない
window、documentへのアクセスはできない
状態の保持
Service Worker はブラウザによって不要になったら破棄される
HTTP通信
HTTPS通信のみの利用ができるという意味mrsekut.icon
localhostは例外的に利用可能
ネットワーク通信をするときに、
そのやり取りする相手を
サーバーなのか
キャッシュなのか
などを制御できる
普通に通信していると見せかけてキャッシュを見ている的な
windowを閉じたあとでも、起動し続けることもできる
なにができる
キャッシュをいじる
キャッシュする処理
fetch eventの仲介人になる
サーバーから取る代わりにキャッシュから取得する処理
ページからのリクエストをプロキシ
Proxy Serverになる
client ↔ ServiceWorker ↔ server
MSWとかがこれをやっているmrsekut.icon
Push通知
ブラウザウィンドウが閉じていても動かせることができるので。
ブラウザウィンドウとは何を指している?
そのサイトを見ていなくても、Chromeアプリが「起動」してればおkってことか?
いや、プッシュ通知のイメージ的には、アプリは起動していなくてもおkかmrsekut.icon
つまり、ブラウザがどうこうというよりは、OSがどうこうという技術なのか?
バッググラウンド同期
ユーザーがオフライン状態で、「ファイルをアップロード」操作をしたら、次にオンラインになったときにその操作を実際にやる
ページとの間でイベントハンドラを使ってのメッセージ送受信
Cacheの保存先の例
IndexedDB
CacheStorage (JS)
ライフサイクル
状態
parsed
初期状態。SWのインストールすらされていない
installing
インストール中
installed
インストール成功後の状態
SWはまだ有効になっていない
activating
有効になった状態
activated
fetch/messageイベントの待機状態
redundant
無効になった状態
https://gyazo.com/78be6f27a51ea6aef299fc1245d2485f https://webbibouroku.com/Blog/Article/serviceworker
参考
https://webbibouroku.com/Blog/Article/serviceworker
https://qiita.com/y_fujieda/items/f9e765ac9d89ba241154
https://app.codegrid.net/entry/2016-service-worker-1
https://jakearchibald.com/2014/offline-cookbook/
offline cookbook
CacheStorage (JS)
2つのcacheの方針
Precaching
https://developer.chrome.com/docs/workbox/service-worker-overview/#:~:text=worker%20can%20provide.-,Precaching,-is%20the%20process
事前に、必要そうなassetsをcacheする
ServiceWorkerのinstall時に行われる
Runtime caching
https://developer.chrome.com/docs/workbox/service-worker-overview/#:~:text=the%20precached%20assets.-,Runtime%20caching,-is%20when%20a
ユーザーの操作中にreqesutして得られたassetsを随時cacheする
Partytown
Cache API
用途
PWA
どういう仕組み?
どこに実装されているもの?
ブラウザ?OS?
https://www.google.co.jp/_/chrome/newtab-serviceworker.js
ブラウザにおけるJavaScript Engineの位置づけを理解していないと理解できない気がmrsekut.icon
なにかつくる
https://qiita.com/horo/items/175c8fd7513138308930
https://qiita.com/narirou/items/738a0fe6656d0f905e28
Scrapbox
/daiiz/ScrapboxでのServiceWorkerとCacheの活用
/daiiz/ServiceWorkerを用いたキャッシング戦略 ~Wikiアプリケーションを例に~
/shokai/ServiceWorkerをproductionで使ってる話
参考
https://triple-underscore.github.io/service-workers-ja.html
くわしすぎる
https://qiita.com/Kento75/items/86ff044c95bac9497be1
https://developer.mozilla.org/ja/docs/Web/API/Service_Worker_API
https://blog.jxck.io/entries/2020-01-24/background-fetch.html
https://efcl.info/2019/10/28/service-worker-updatefound-refresh-dialog/
https://app.codegrid.net/entry/2016-service-worker-1
https://laboradian.com/create-offline-site-using-sw/
https://webbibouroku.com/Blog/Article/serviceworker
わかりやっすい
https://qiita.com/y_fujieda/items/f9e765ac9d89ba241154
https://webtan.impress.co.jp/e/2019/09/02/33637
https://developers.google.com/web/fundamentals/primers/service-workers/?hl=ja
https://numb86-tech.hatenablog.com/entry/2021/05/18/214946
https://numb86-tech.hatenablog.com/entry/2021/05/17/085336
https://developers.google.com/web/fundamentals/primers/service-workers?hl=ja
https://w3c.github.io/ServiceWorker/
https://logmi.jp/tech/articles/312860
https://numb86-tech.hatenablog.com/entry/2021/05/26/122742
https://yusukebe.com/posts/2021/service-worker-api/