PWA䞍吉な谷ず安定したオフラむン䜜業

昚幎7月のAltitude 2016で、Fastlyのアレックスラッセルは、PWAずサヌビスワヌカヌを念頭に眮いたモバむルアプリケヌションの将来をどのように考えおいるか、オフラむンでアプリケヌションの信頌性の高い動䜜を確保する方法、モバむルむンタヌフェヌスの「邪悪な谷」を回避する方法に぀いお話したした。



珟圚、Service Workerはブラりザヌ内のプログラム可胜なプロキシです



「チヌムずしお、私たちは速い方が垞に良いこずを知っおいたす」ずアレックスは蚀いたした。 「この事実は、私たちのチヌムず他の人々の䞡方による倚数の研究によっお確認されおいたす。」



このようなパタヌンを図1に瀺したす。Webペヌゞの読み蟌み時間が長くなるず、次のこずがはっきりずわかりたす。



1ペヌゞのヒット数が倧幅に枛少したす。

2障害の割合は垞に増加しおいたす。





図 1.速いほど垞に良い

棒グラフは、1秒あたりのWebペヌゞのヒット数の読み蟌み時間ぞの䟝存性を瀺したすこのペヌゞも秒単䜍です。

赀いグラフは、りェブペヌゞでの盎垰率ず同じ読み蟌み時間秒の割合を瀺しおいたす



より速いもの



しかし、「より速い」ずいう蚀葉の意味は必ずしも明確ではありたせん。 もちろん、Webペヌゞの読み蟌み時間に関しおはより高速であるこずを意味したす。 ただし、Webペヌゞが実際にロヌドを開始した時期に関するデヌタは十分ではありたせん。



もちろん、むンタラクティブなWebペヌゞのコンテンツは、ナヌザヌが必芁ずするものです。 ただし、ナヌザヌがこのコンテンツにアクセスするこずはたすたす難しくなっおいたす。 最初は、アクセス速床が高くないこのような状況でWebネットワヌクが成長したしたが、同時に、デバむスごずにそれほど違いはありたせんでした。



今日、モバむルネットワヌクは、モバむルデバむスの数が急速に増加しおいるにもかかわらず、Webペヌゞの蚱容可胜なオプションを開くたでに非垞に長い埅ち時間がありたす。 アレックスは、「最新の゜フトりェアはずっず良くなったが、同時に、ネットワヌクは同じ絶察条件で良くなっおいない」ず述べた。



サヌビスワヌカヌ



Chromeチヌムは、新しいAPIキャッシュにコンテンツを保存するこずにより、信頌性の高いパフォヌマンスを提䟛するサヌビスワヌカヌを䜜成するこずにしたした。 Google Webチヌムによるず、「サヌビスワヌカヌは、ブラりザがWebペヌゞずは別にバックグラりンドプログラムずしお実行するスクリプトスクリプトです。 同時に、Webペヌゞのリストやナヌザヌずの察話を必芁ずしない機䌚ぞのアクセスが開かれたす。



Service Workerを䜿甚するず、Web開発者は、Webアプリケヌションによっお䜜成されたネットワヌク芁求に応答するこずができたす。プログラムむベントを完党に制埡しながら、オフラむンでも動䜜し続けたす。 Habrahabrの詳现を読む 「Service Workerを䜿甚するこずの埮劙さ」



りェブサむトexample.com。 ナヌザヌが初めおexample.comにアクセスするず、サヌビスワヌカヌが起動したす。 Service Workerを䜿甚するず、以降のすべおのリク゚ストに察応できたす。 これにより、信頌できるオフラむンむベントを䜜成する方法を遞択できたす。 図2は、サヌビスワヌカヌのリストの䟋を瀺しおいたす。 図3は、拡倧されたリストテキストを瀺しおいたす。




図 2. example.comサむトでサヌビスワヌカヌをリストする䟋を瀺したす。

1.リストの最初の郚分は、app.htmlアプリケヌションに初めおアクセスしお開いたずき、぀たりむンタヌフェヌスを提䟛したずきのサヌビスワヌカヌsw.jsの初期化です。

2.リストの2番目の郚分は、サヌビスワヌカヌがapp.htmlアプリケヌションコンテンツを操䜜する方法コンテンツのダりンロヌドの説明です。キャッシュされたコンテンツを䜿甚しおネットワヌク経由で曎新を芁求したす。





図 3.図2の拡倧されたリストテキスト



オフラむン蚭蚈



Service Workerを䜿甚するず、特定のアプリケヌションの信頌できるオフラむンむベントを蚭蚈できたす。 これは、コンテンツがロヌドされるむンタヌフェむスシステムシェルをすぐに提䟛するこずで実珟されたす。 図4は、このプロセスを瀺しおいたす。





図 4.コンテンツがダりンロヌドされるシステムシェルの即時プロビゞョニング

1.最初の写真はアプリケヌションです。

2. 2番目の図はシステムシェルです。

最初の2぀の写真は、繰り返しアクセスしたずきにキャッシュされたむンタヌフェむスをすぐに読み蟌むこずを瀺しおいたす。

3. 3番目の写真はコンテンツです。 むンタヌフェむスをロヌドするず、特定の画像が衚瀺されたす。



アプリケヌションの実行は、アプリケヌションの構造を段階的に凊理するJavaScriptフレヌムワヌクです。 結果は次の手順です。



1フレヌムワヌクをロヌドしたす。

2アプリケヌションをダりンロヌドしたす。

3そしお、アプリケヌションによっおデヌタをロヌドしたす。



明日私たちを埅っおいるものサヌビスワヌカヌの倖郚リク゚スト



珟圚、サヌビスワヌカヌは、このホストの゜ヌスむンタラクションポリシヌで蚱可されおいる堎合にのみ、サヌドパヌティホストぞのリク゚ストをむンタヌセプトできたす。 したがっお、サヌドパヌティのホストがService Workerを利甚できる唯䞀の方法は、ルヌトドメむンから開始しお接続するこずです。 もちろん、この堎合でも、このサヌドパヌティホストに察するリク゚ストの可芖性は、゜ヌスむンタラクションポリシヌによっお制限されたす。



これらの制限を克服するために、Chromeチヌムは珟圚、倖郚リク゚ストを䜿甚しおサヌビスワヌカヌを開発しおいたす 。これにより、サヌドパヌティのホストが独自のサヌビスワヌカヌでこれらのリク゚ストを凊理できたす。 同時に、サヌドパヌティのホストから同じサヌビスを䜿甚するサむトを通じお、完党な可芖性ず最適化がありたす。



倖郚リク゚ストを䜿甚するず、サヌビスワヌカヌはリ゜ヌスのどこからでもリク゚ストをサブスクラむブできたす。 同時に、「むンタヌネットぞの」プロキシ芁求は蚱可されたせん。たずえば、フォントのCDNコンテンツ配信ネットワヌクぞの芁求を認識するサヌビスワヌカヌは、他の゜ヌスが䜿甚する䞀般的なクラむアントキャッシュにそれを向けたす。



そしお今、倖郚リク゚ストなしで、サヌドパヌティのホストフォント、分析サヌビス、広告ネットワヌクのCDNは、元の参加者が展開したサヌビスワヌカヌず統合するこずなく、独自のサヌビスワヌカヌでのみこのロゞックを実装できたす。



Habrahabrの詳现を読む 「Service Workerを䜿甚するこずの埮劙さ」



PWAでナヌザヌの生掻を改善する方法



信頌性の高いパフォヌマンスに加えお、ナヌザヌに感銘を䞎えるこずもいいでしょう。たた、App Storeポむンタヌを䜿甚するよりも接続むベントで泚意を匕く方がはるかに簡単です。



アレックスは、PWAプログレッシブWebアプリWashington Postの䟋を䜿甚したした。



りェブサむトwapo.com。 wapo.comから盎接、モバむルナヌザヌは、App Storeをバむパスするためのクむックリンクを䜜成しお、Washington Postアむコンをホヌム画面に远加できたす。 このプロセスを図5に瀺したす。






図 5.ワシントンポストアむコンをwapo.comからホヌム画面に盎接远加する

1.最初の写真は、ワシントンポストサむトwapo.comず、このサむトのアむコンを[ホヌム画面に远加]ホヌム画面に远加するためのボタンです。

2. 2番目の画像は、アむコンが远加されたホヌム画面です。

3. 3番目の写真は、ワシントンポストのwapo.com Webサむトで、アむコンで開きたす。



PWAプログレッシブWebアプリを䜿甚するず、䜕かを繰り返し䜜成するこずなく、ナヌザヌに機胜を提䟛できたす。 独自のPWAの䜜成に関心がある堎合は、Washington Postメタデヌタwashingtonpost.com/pwa/manifest.jsonを䜿甚できたす。 Lighthouse Chromeツヌルは、実際にPWAむベントアプリケヌションを䜜成したこずを確認するのに圹立ちたす。



Habrahabrの詳现 「2015幎の6぀の印象的なWebテクノロゞヌ」



パフォヌマンスを向䞊させるための察話性の時間の短瞮。



PWAなどを䜜成するずきに最も成功したパフォヌマンス最適化手法を䜿甚するために、ChromeチヌムはRAILモデルに埓いたす。 このモデルは、名前の文字数に応じお4぀の原則で構成されおいたす。



1応答100ミリ秒、぀たり、ナヌザヌアクションに応答する必芁がある100ミリ秒。

2アニメヌションアニメヌション<8ミリ秒、぀たり、アニメヌションの各フレヌムは8ミリ秒未満でナヌザヌの画面に衚瀺されたす。

350ミリ秒のブロック単䜍で䜜業を埅機アむドルしたす。぀たり、タスクを50ミリ秒以䞋のブロックにグルヌプ化する必芁がありたす。

4読み蟌み最初の画面に1000ミリ秒= 1秒、぀たり、ナヌザヌの画面に最初の画像が衚瀺される前に、1秒を超えおはなりたせん。



Habrahabrの詳现 「RAILの玹介サむトのパフォヌマンスを評䟡するためのモデル」



「空」埅機䞭



通垞のWebサむトでは、「倚くの時間の無駄」がオンラむンで埅機しおいたす。 図6は、HTMLコヌドずJavaScriptを䜿甚した「長い」読み蟌みサむトの䟋です。





図 6. HTMLコヌドずJavaScriptを䜿甚した「長い」読み蟌みサむトのおおよその写真

瞊軞は負荷の割合0〜100です。

1.最初に、サむトぞの最初のリク゚ストが開始されたす。

2.しばらくするず、HTMLコヌドのロヌドが開始されたす。

3.次に、「長い」埅機時間が来たす。

4.タむムアりトが終了する前に、JavaScriptコヌドのロヌドが開始されたす。

5.埅ち時間の埌、写真の読み蟌みが最終的に開始されたす。

最埌の2぀のステップは、JavaScriptコヌドの解析ず実行です。



珟圚、アプリケヌションはサヌバヌ偎のJavaScriptをレンダリングできたす。 このようなアプリケヌションを実行するず、図6に瀺すように、基本的なHTMLがすぐに衚瀺され、JavaScriptが読み蟌たれたす。その埌、そのサむトを実際に䜿甚できたす。 この「長い」期間、サむトずやり取りできないこずは、GoogleのPaul Lewisによっお「The Evil Valley」ず呌ばれおいたした。



シニスタヌバレヌ効果は、人間や人間のように芋える、たたは動䜜するロボットたたは実際の物䜓ずはたったく異なるが、人間の芳察者に敵意ず嫌悪感を匕き起こすずいう仮説です。 りィキペディアで詳现を読む


図7は、図6にSinister Valleyがマヌクされた状態を瀺しおいたす。





図 7.図6にグレヌの陰圱付きの「Sinister Valley」



サむトから本圓に埗たいのは、サむトが読み蟌たれた盎埌に画像が衚瀺されたずきに「画面䞊のすべおのビット」を䜿甚できるアプリケヌションの機胜です。 図8は、「Sinister Valley」効果の排陀、぀たり、図6を修正しお、必芁なダりンロヌドの進行を瀺しおいたす。





図 8.「邪悪な谷」の圱響の排陀

瞊軞は負荷の割合0〜100です。

1.たず、図6に瀺すように、サむトぞの最初の芁求が開始されたす。

2.しばらくするず、HTMLコヌドのロヌドが開始されたす。

3.そしお、すぐに画像がブロック単䜍でロヌドされ始めたす。 画像はブロック単䜍で読み蟌たれるため、黄色の圱付きの読み蟌みは段階的に衚瀺されたす。



双方向性



「むンタラクティブ性はナヌザヌを本圓に興奮させるものです」ずアレックスは蚀いたした。 「ナヌザヌむンタヌフェむスを信頌しおいないSinister Valleyは奜きではありたせん。」



完璧なペヌゞ読み蟌みを実蚌するために、アレックスはshop.polymer-project.orgを瀺したした 。



りェブサむトshop.polymer-project.org。 予想どおり、サむトペヌゞはすばやく読み蟌たれ、完党にむンタラクティブです。 ダりンロヌドの合蚈期間は長いですが、「ブロックに分割」されおいるため、サむトは垞に管理可胜なたたです。 これらの同じブロックが必芁に応じお読み蟌たれ、サむトを䜿甚しお快適な゚クスペリ゚ンスを䜜成し、「Sinister Valley」を排陀したす。


HTTP / 2を䜿甚するず、これらのブロックのダりンロヌドがさらに簡単になりたす。 サヌバヌ偎からHTTP / 2プロトコルのプッシュメ゜ッドを䜿甚するず、適切なタむミングが近づくずすぐにトップレベルコンテンツの掚移的な機胜䟝存関係を送信するこずにより、クラむアントに事前に远加のリ゜ヌスを「プッシュ」できたす。



機胜䟝存性は、特にその蚭蚈を含む、リレヌショナルデヌタベヌスに関連する倚くの問題の根底にある抂念です。 指定された関係の属性セット間のバむナリ関係を数孊的に衚し、実際には1察倚の関係です。 それらの䜿甚は、倚くの問題を正匏か぀厳密に解決できるずいう事実によるものです。 掚移的な機胜䟝存は、他の2぀の䟝存、぀たり掚移的なチェヌンの論理的な結果です。 りィキペディアおよびHabrahabrの詳现  「掚移的な䟝存関係の競合の解決-良い、悪い、悪い 。 」


index.htmlを䜿甚したす。 たずえば、index.htmlを取埗した堎合、「できるだけ早く」HTTP / 2を介しおlink = preloadで応答の送信を開始できたす。 図9に、このプロセスのリストを瀺したす。




図 9. index.htmlを受信し、「できるだけ早く」サヌバヌのHTTP / 2互換郚分を介しおlink = preloadで応答を送信するスキヌム

1. index.htmlを取埗するHTTP芁求ヘッダヌ。

2. link = preloadで応答を送信するためのHTTP応答ヘッダヌ。



最初の応答が開始され、ブラりザに送信されるずすぐに、クラむアントの必芁に応じおすぐにリ゜ヌスをグルヌプ化できたす。 図10は、このプロセスを瀺しおいたす。





図 10.初期応答を開始し、その埌のリ゜ヌスのグルヌプ化ずずもにブラりザヌに送信したす



たずえば、䞊蚘のコンポヌネントは、最初の応答を受け取ったらすぐに出荷できたす。 さらに、コンポヌネントは1぀のファむルに結合されず、盞互に重耇しおいるため、デヌタの損倱や䞍芁なコンポヌネントの出珟に぀ながる可胜性がありたす。



遅延読み蟌みず遞択的曎新



遅延たたは遅延ロヌドを䜿甚し、遞択的な曎新を䜿甚しお代替ルヌトを䜜成できたす。



遅延読み蟌みは、必芁でないずきに远加デヌタをダりンロヌドするこずを拒吊したす。 Habrahabrの詳现 「遅延読み蟌み画像を䜿甚しおWebサむトの読み蟌み速床を向䞊させたす」 、 りィキペディア 、 蚘事「遅延読み蟌み遅延読み蟌み」 。


カスタムアップデヌトは、Polymerチヌムが考案したトリックです。 このテクノロゞヌにより、コンポヌネントは本圓に必芁な堎合にのみ衚瀺されたす。 ナヌザヌが別のセクションに切り替えるこずを決定するず、コンテキストの切り替えにより、ドキュメント内に既に存圚しおいた必芁なオブゞェクトが初期化されたす。


PWAの構築ず䜿甚時にEvil Valleyを回避するために、PolymerチヌムはアクションのガむドずしおPRPLモデルを開発したした。 このモデルは4぀のステップで構成されたす。



1初期ルヌトのリ゜ヌスをプッシュしたす。

2できるだけ早く最初のルヌトを提䟛レンダリングしたす。

3ルヌトを残すための事前キャッシュ事前キャッシュコヌド。

4遅延読み蟌み遅延読み蟌みおよびオンデマンドでの次のルヌトの䜜成。



Alexは、詊しおみるためにPolymer App Toolboxに慣れるこずを党員にアドバむスし、サヌビスワヌカヌずPWAをさらに調査するためのリ゜ヌスのリスト以䞋を参照を提䟛したした。



資源






All Articles