クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

オフラインで動かす仕組み

このレッスンのあとで: ページがオフラインでも動く仕組みを、説明できる。

60分のレッスンコマンド1件モバイルウェブのラボ:ブラウザーで作るレスポンシブでインストールできるウェブアプリ

サービスワーカーとは

サービスワーカーは、ページとネットワークの間に入って、通信を預かるスクリプトです。前に取っておいたファイルを返せるので、電波がなくてもページが開きます。

このレッスンでは、サービスワーカーの流れと、キャッシュの戦略を学びます。

このレッスンのゴール

メモ

ページがオフラインでも動く仕組みを、説明できる。

重要な言葉

ことばいみれい
サービスワーカーページの裏で動き、通信を預かるスクリプトsw.js
キャッシュ取ったファイルを、端末に取っておく場所
オフラインネットワークにつながっていない状態
キャッシュ戦略要求に、キャッシュとネットワークのどちらで答えるかの決まり
アプリシェル画面の骨組みになる、HTML と CSS と JavaScript

学生が入力するセルは、このプレビューでは空白です。

サービスワーカーは通信の仲介役

普段、ページが何かを求めると、その要求はネットワークへ出ます。サービスワーカーがあると、要求は、まずそこへ届きます。

サービスワーカーは、キャッシュにあればそれを返し、なければネットワークへ取りに行く、といった判断ができます。

入れる、有効にする、横取りする

サービスワーカーには、3つの場面があります。install は、最初に入るときです。ここで、アプリのファイルをキャッシュに入れます。

activate は、有効になるときです。古いキャッシュを片付けます。fetch は、ページが何かを求めるたびです。

ファイルを覚えるワーカー

コード: web
// 学食アプリの骨組みを、端末に取っておく
const CACHE = "cafeteria-v1";
const FILES = ["/", "/style.css", "/app.js"];

self.addEventListener("install", (event) => {
  event.waitUntil(caches.open(CACHE).then((cache) => cache.addAll(FILES)));
});

// 取ってあれば返し、なければネットワークへ
self.addEventListener("fetch", (event) => {
  event.respondWith(caches.match(event.request).then((hit) => hit || fetch(event.request)));
});

1つでも取れないと、全部が入らない

cache.addAll は、リストのファイルを、まとめて取って入れます。ただし、1つでも取れないと、全部が失敗します。

リストに書いたファイルが、本当にあるか、確かめることが大切です。

ラボのワーカーのリストを調べる

ラボの sw.js が、覚えようとしているファイルを読み、それぞれがあるか調べます。出力は英語の単語です。

exists はある、MISSING はない、という意味です。最後の行は、足りないファイルの数です。

リストのファイルを確かめる

コマンド
docker exec jupyter python3 steps/offline.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ラボの出力の読み方

出力の行意味
cache name: habits-v1キャッシュの名前
files to cache: 8覚えようとするファイルが8つ
/offline.html MISSINGこのファイルだけが、ない
missing: 1足りないファイルは1つ

学生が入力するセルは、このプレビューでは空白です。

戦略は、要求ごとに選ぶ

キャッシュ戦略は、要求に何で答えるかの決まりです。骨組みのように変わらないものは、キャッシュを先に見ます。

注文の一覧のように、新しさが大事なものは、ネットワークを先に見ます。書き込みは、キャッシュに頼れません。

4つの戦略と向いている場面

戦略答え方向いている場面
cache-firstキャッシュにあれば返すCSS や JavaScript などの骨組み
network-firstまずネットワーク。だめならキャッシュメニューや注文の一覧
stale-while-revalidate古い写しを返し、裏で新しくする写真など、少し古くてよいもの
network-onlyいつもネットワーク書き込みなど、キャッシュできないもの

学生が入力するセルは、このプレビューでは空白です。

サービスワーカーは安全な接続が要る

ブラウザは、サービスワーカーを、安全な接続のアドレスでだけ動かします。手元の開発用のアドレスは、例外として認められることがあります。

ラボの Preview で登録できるかは、ブラウザのコンソールで確かめます。コンソールの文を、読んでください。

よくある間違い

注意

何でもキャッシュ優先にして、古い内容が出続ける間違いが多いです。変わる内容は、ネットワークを先にします。ファイルを変えたら、キャッシュの名前も変えます。

このラボとソースについて: モバイルウェブのラボ:ブラウザーで作るレスポンシブでインストールできるウェブアプリ

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。