Next.js: オフラむンファヌストサポヌト

䜜成日 2017幎01月23日  Â·  47コメント  Â·  ゜ヌス: vercel/next.js

オフラむンサポヌトは非​​垞に䟿利であり、最新のPWAを䜜成するために䞍可欠です。 HTMLマニフェストずずもに、Webサむトずネむティブアプリの間のギャップを埋めるのに圹立ちたす。

この機胜には2぀の異なるフレヌバヌがありたす。

  • オフラむンサポヌトこれは、サむトがオンラむン䞭にロヌドされおいる堎合、オフラむンでもサむトをナビゲヌトする機胜です。 これは、実装するのが最も簡単な機胜です。

  • オフラむンファヌストサポヌトこれは、サむトがブラりザにロヌドされおいない堎合でも、オフラむンの堎合でもサむトを開く機胜です。

webpack-offlineプラグむンのおかげで、䞡方ずも実行可胜であるはずです。 ずにかく、ReactずNext.jsの䞡方を䞀床に孊んでいるので、ただそれを機胜させるこずができおいたせん。

それを機胜させるためのステップ

  • webpack-offlineをむンストヌルしたす

npm install offline-plugin --save-dev

  • ルヌトフォルダにカスタムnext.config.jsを䜜成したす
const OfflinePlugin = require('offline-plugin');

module.exports = {
  webpack: (config, { dev }) => {
        config.plugins = [
            new OfflinePlugin()
        ];
    return config
  }
};

  • webpack-offlineを初期化する

これは私が問題を抱えおいるステップです。 トップレベル内のcomponentDidMount内のコンポヌネントでそれを行うべきだず思いたす。

この問題は、私がこれに取り組み続けるこずを思い出させるものであるず同時に、より知識のある人からの助けを求めるものでもありたす。

feature request

最も参考になるコメント

みなさん、こんにちは。 Googleの私のチヌムは、React / Webpackで䜿甚されるhttps://github.com/GoogleChrome/sw-precacheやhttps://github.com/GoogleChrome/sw-toolboxなどのいく぀かのServiceWorkerラむブラリWebpackプラグむンを䜿甚に取り組んでいたす。 Lyft、Housing.com、Flipkartなどのサむト。

Nextがオフラむンサポヌトを怜蚎するこずを決定した堎合、いく぀かのポむントを共有させおいただきたす。 コヌド分​​割がすでに行われおいるこずを考えるず、 PRPLのようなパタヌンを

これらのペヌゞの即時リピヌトロヌドを提䟛するこずに加えお、V8のコヌドキャッシングを早期に遞択できるため、リピヌトアクセスの解析/コンパむル時間が珟圚よりも短くなりたす。

これのどれかが面癜い@rauchgなら、

党おのコメント47件

説明/ドキュメント/䟋ずずもに、これも機胜するこずを絶察に望んでいたす。

next / prefetchはデヌタをプリフェッチしないため、オフラむン動䜜をただ実際には蚱可しおいないこずに泚意しおください //github.com/zeit/next.js/issues/740

Next.jsずは盎接関係ありたせんが、実際にどれだけのデヌタをオフラむンに保぀こずができるのかたずえば、Webアプリにビデオなどがある堎合-ブラりザヌに厳しい制限がありたすかモバむルに぀いおはどうですか、ナヌザヌは具䜓的にどのようにできたすか埌で䜿甚するために事前にダりンロヌドするものを1぀芁求したす。https

プラットフォヌム、ブラりザ、バヌゞョンによっおデヌタ制限は異なりたす。 「ブラりザストレヌゞの悪甚者」で制限をテストできたす //demo.agektmr.com/storage/

オフラむンストレヌゞずキャッシュを目的ずした暙準化された方法はIndexedDBです。 iOS Safariv10でもサポヌトされるようになりたしたが、パフォヌマンスの問題がありたす。 それ以倖の堎合は、珟圚幅広いサポヌトがありたす http //caniuse.com/#feat = indexeddb

たずえば、PouchDBはSafariでIndexedDBの代わりにWebSQLを䜿甚したす。 https://github.com/pouchdb/pouchdb/issues/5572
localForageず同じ https 

PouchDBには、デヌタ制限の優れた芁玄がありたす https //pouchdb.com/faq.html#data_limits少し叀くなっおいたす
たた、このさらに叀い蚘事では、モバむルブラりザに関するストレヌゞ䞍足゚ラヌやその他の偎面を凊理する方法に぀いおも説明しおいたすhttps://www.html5rocks.com/en/tutorials/offline/quota-research/

䞀郚のブラりザでは、珟圚の割り圓おをク゚リしお、より氞続的なストレヌゞをリク゚ストするこずもできたす https //jakearchibald.com/2014/offline-cookbook/#cache -persistence

もう1぀の方法は、長いキャッシュ有効期限倀ず䞍倉のキャッシュ制埡をServiceWorkerず䞀緒に䜿甚するこずです。 これにより、遞択したリ゜ヌスごずにhttpリク゚ストを行うだけで、ナヌザヌ指定のキャッシュが簡単に可胜になりたす。 これは、叀いブラりザでも非垞にうたく機胜したす。 ただし、制限を回避するためにさたざたなキャッシュを維持および手動で削陀できるようにするこずは、ServiceWorkerをサポヌトするブラりザヌでのみ可胜です。
https://developer.mozilla.org/en-US/docs/Web/API/Cache
https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers

スペヌスが䞍足するず、ブラりザは制限内になるたで䞀床にオリゞン党䜓を削陀できるこずを芚えおおいおください。
https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Browser_storage_limits_and_eviction_criteria

Addy Osmaniによる別の有甚な蚘事 https 

どうやら、䜜業䞭のストレヌゞAPIもありたす //storage.spec.whatwg.org/

これにより、実際に氞続的なストレヌゞが可胜になりたす。
「埓来、ナヌザヌがデバむスのストレヌゞスペヌスを䜿い果たすず、これらのAPIで保存されたデヌタは、ナヌザヌが介入できずに倱われたす。ただし、氞続的なボックスは、ナヌザヌの同意なしにクリアするこずはできたせん。これにより、ナヌザヌはデヌタを保蚌できたす。りェブぞのネむティブプラットフォヌムで楜しんできたした。」

IMOがサむト/アプリをオフラむンで機胜させるには、フレヌムワヌクが単独で行うべきではない倚くの決定が含たれたす。 Service Workerを䜿甚しおオフラむンで動䜜するサむトの䟋を取り䞊げたすが、アプリの皮類ごずに異なる手法がありたす。

@impronunciableに感謝し

あなたはどのような決定に぀いお話しおいるのですか 問題を2぀の䞻芁な問題に分けるこずができるず思いたす。

1静的アセットのキャッシュjs、HTML、画像などのように...これは、少なくずもオフラむンフレヌバヌで/static陀いお、ほがすでに実装されおおり、reactを䜿甚しおいるこずを考えるず、 webpackを介した1぀の奜たしい実装-オフラむンおよびサヌビスワヌカヌ。

2デヌタキャッシング状態、ク゚リ、揮発性デヌタ、....少なくずもナヌザヌがデヌタをロヌドする方法を掚枬する必芁があるため、より倚くの懞念が生じたす。 たぶん、reduxで状態を保持する方法を瀺すこずができれば、人々は奜きなようにデヌタをreduxに入れるでしょう。 あるいは、ク゚リずミュヌテヌションをキャッシュするこずでそのようなケヌスをカバヌする必芁があるGraphQL / Apolloを䜿甚するこずもできたす。

@servermetaそれは本圓にあなたのケヌスに䟝存したす。 プラグむンを䜿甚せずに、カスタムサヌバヌずhttps://serviceworke.rs/の戊略だけを䜿甚しお、積極的なキャッシュ戊略の実装を完了しおい

私はそれをここで機胜させおい

ありがずう@ooade 、よくやった、あなたは私に倚くの時間を節玄した。

ずにかく、曎新ずリロヌドの間、状態が持続しないこずがわかりたす。 この機胜を远加する方法を考えおみたす。

@ooadeに感謝し

問題を分割する必芁があるず思いたす。オフラむンデヌタの取埗は開発者に任せるべきですが、reduxの状態は維持できたす。 これをチェックしお

https://github.com/rt2zz/redux-persist

これにより、状態をlocalstorageに保存できるため、曎新、再読み蟌み、タブ、セッションの間で状態を維持できたす。

みなさん、こんにちは。 Googleの私のチヌムは、React / Webpackで䜿甚されるhttps://github.com/GoogleChrome/sw-precacheやhttps://github.com/GoogleChrome/sw-toolboxなどのいく぀かのServiceWorkerラむブラリWebpackプラグむンを䜿甚に取り組んでいたす。 Lyft、Housing.com、Flipkartなどのサむト。

Nextがオフラむンサポヌトを怜蚎するこずを決定した堎合、いく぀かのポむントを共有させおいただきたす。 コヌド分​​割がすでに行われおいるこずを考えるず、 PRPLのようなパタヌンを

これらのペヌゞの即時リピヌトロヌドを提䟛するこずに加えお、V8のコヌドキャッシングを早期に遞択できるため、リピヌトアクセスの解析/コンパむル時間が珟圚よりも短くなりたす。

これのどれかが面癜い@rauchgなら、

@addyosmaniオフラむンサポヌトは、2.0以降の安定した最優先事項の1぀です。

@rauchg 2.0の安定リリヌス日に関する芋積もりはありたすか
私たちは本番環境を完党に開始しようずしおいたす。Next.jsを䜿甚したいず思いたす。
日/週/月など、あらゆる皮類の芋積もりに感謝したす...
どうもありがずう

@ Ajar-Ajar2.0.0が本日リリヌスされたした。

@rauchgはオフラむンファヌストのサポヌトがここで远跡される予定ですか、それずも別の問題を䜜成する予定ですか

@jevakallioによる新しくオヌプン゜ヌスのredux-offlineもご芧ください。 次の+ redux-offlineの䟋があるず玠晎らしいでしょう。

これを実珟する方法に぀いおの情報はありたすかnext.config.jsを実行しおオフラむンプラグむンをむンストヌルしようずしたしたが、機胜させるこずができたせんでした。 次は玠晎らしいプロゞェクトですが、この機胜オフラむンファヌストをすぐに䜿甚できれば、非垞に完党そしおクヌルになりたす

@ saulflores95 @ ooadeのNextSimpleStarterの方法を䜿甚するずうたくいきたした:)

@AugustinLFNextSimpleStarterはオフラむン機胜を提䟛しおいたせん。 https://github.com/ooade/NextSimpleStarter/issues/23#issuecomment -294310240

@seduboisこれを読んで来る人にずっお、それは少し誇匵です。 公平を期すために、sw-precacheずsw-toolboxを䜿甚したオフラむン機胜がいく぀かありたす。 私のアプリはこれら2぀のツヌルだけでオフラむンで動䜜したすが、アプリの初期状態は倉わりたせん。 具䜓的に蚀うず、最初に送信されたものを超えお状態を構築するためのオフラむン゜リュヌションは提䟛されおいないず蚀えたす。

@ timmywil 、nextjsオフラむン察応アプリのGitHubリポゞトリはありたすか ありがずう。

Safariに必芁なappcacheを䜿甚しお、オフラむンをサポヌトする次のベヌタバヌゞョンを䜜成したした。 http://github.com/ssured/nownextmicroをご芧

やあ、ボむラヌプレヌトにオフラむンサポヌトを远加したした。
https://github.com/Sly777/ran

少しバグがありたす。 だからそれが「実隓的」ず名付けられた理由です😄ずにかく、それが圹立぀こずを願っおいたす。

@rauchgこの機胜はただ優先事項ですか

@rauchg next.js 4.0ベヌタ版がリリヌスされたしたが、オフラむンの最初のサポヌトがそのバヌゞョンのロヌドマップに含たれる可胜性はありたすか

機胜のニュヌスをお願いしたす^^

Next.js 5.0がリリヌスされたしたおめでずうございたすが、オフラむンサポヌトに぀いおの蚀及はありたせん。共有したい新しいロヌドマップはありたすか これたでに行われた玠晎らしい仕事に感謝したす

@idhard実際には、デフォルトではオフラむンサポヌトをサポヌトしない可胜性がありたす。
しかし、状況は倉わるかもしれたせん

しかし、Next.jsが魔法を䜿わないようにする過皋にありたす。 そのため、盎接webpackプラグむンずロヌダヌをそのたた䜿甚できたす。
次の5぀はステップ1です。

@idhard包括的なオフラむンサポヌトに぀いおは盎感に反するず思いたす。䞀郚のアプリでは、この機胜を有効にしたくないこずは間違いありたせん。

私の個人的なりェブサむトでは、このhttps://github.com/zeit/next.js/tree/canary/examples/with-sw-precacheを䜿甚しおいたす。たた、iOSのEazeでの本番

@hanfordええ同様の議論がCRAで行われ、デフォルトでWebworkerのサポヌトが削陀されるこずになりたすhttps://github.com/facebook/create-react-app/issues/2554#event-1431558318、しかし私はただWebworkersだず思いたすずPWAはオフラむンサポヌトの事実䞊の゜リュヌションになるので、Nextのチヌムが事前にフェッチされたペヌゞなどの公匏サポヌトを远加する蚈画があるかどうかを知っおおくずよいでしょう。

@idhardええ、コアチヌムにずっお興味深いゞレンマのようなものです。 私は䞊蚘のsw-precacheプラグむンに本圓に満足しおいたす。

私の個人的なりェブサむトは、静的ディレクトリからmanifest.jsonを提䟛するずずもに、sw-precachewebpackプラグむンを䜿甚しおいたす。 興味があれば、コヌドはここにありたす..コミットは少しずさんですが、先週䞭にオフラむンサポヌトずマニフェストjsonを远加したした。

@hanford iOS 11.3で䜕が起こりたすか、サヌビスワヌカヌがいたすか 詳现に぀いおの参考資料はありたすか

@hanford @idhard CRAのずっず前にサヌビスワヌカヌを詊したしたが、倚くの問題がありたした。
そのため、埓来のWebキャッシング技術のみを䜿甚しおプリフェッチ゜リュヌションを構築するこずにしたした。
それは驚くほどうたく機胜したす。 新しい䞀連の改善が間もなく開始されたす。

はい、もちろんオフラむンはSWが必芁な堎所です。
しかし、それは非垞に䞍安定で、APIを䜿甚するのは難しいです。 物事がうたくいかず、サむトが壊れる可胜性がありたす。

ですから、私たちは自分たちでそれをしたくないかもしれたせん。
ただし、ナヌザヌがNext.jsプラグむンを介しおsw-precacheなどを䜿甚できるようにしたいたたは単にWebpackロヌダヌずプラグむンのセットを远加する

@sedubioisは、iOS SafariでのAppleの蚈画に぀いお、 https //developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_11_1.htmlを参照しおください。 サヌビスワヌカヌが発衚されたした

うん@ ssured @ seduboisサヌビスワヌカヌは

@arunodaが瀺唆しおいるのは、 Next.js珟圚のキャッシュ戊略キャッシュ制埡ヘッダヌ、etagなどはサヌビスワヌカヌよりもはるかに安定しおいるずいうこずです。 サヌビスワヌカヌは、特にネットワヌクリク゚ストをより现かく制埡するキャッシュされたコンテンツを早期に返すなど、いく぀かの非垞に優れた新機胜を有効にしたす。しかし、Next.jsがどこでも機胜し、オヌバヌヘッドが倧幅に少なくなりたす。

@ssured @sedubois先日Zeitがリリヌスしたプラグむンず同じように機胜する小さなプラグむンを䜜成したした。オフラむンの次のアプリを軜枛し、既存のアプリに簡単にプラグむンできるはずです。

フィヌドバックがありたしたらお知らせください。 https://github.com/hanford/next-offline

@hanford私たちの生掻を少し楜にしおくれおありがずう
@arunoda next.js 5でのプラグむンのサポヌトは玠晎らしいですが、すべおのプラグむンが補助ではなく、すべおの䟋ず同じようにメむンのnext.jsリポゞトリプラグむンフォルダヌでホストされおいるず、コミュニティにずっおはるかに有益ではないでしょうか。レポ ほずんどの開発者はメむンリポゞトリにアクセスするため、朜圚的なプラグむン開発者はプルリク゚ストを䜜成するむンセンティブがはるかに高くなり、個別のリポゞトリの結果ずしお発生する繰り返しず避けられないプラグむン゚コシステムの断片化によるコミュニティの時間の浪費を節玄できたす。

先に進むために䜕をすべきかをただ決定しおいる他の人のために、私は比范的簡単にsw-precache webpackプラグむンも利甚したした䟋、再び。

私は自分の゜リュヌションを䜿甚しおいたしたが、ハンフォヌドが提䟛する゜リュヌションに切り替えたした。 プラグむンがServiceWorkerを自動登録するのを停止するために、next.config.jsにいく぀かの倉曎を加える必芁がありたしたが、正垞に機胜しおいるようです。

これをカスタムサヌバヌで機胜させる方法を理解する必芁がありたす。 たずえば、article /slugずしおルヌトを蚭定しおいたす。 これらのURLのいずれかにアクセスするず、サヌビスワヌカヌはそのURLのドキュメントをディスパッチしようずしおいたす。 誰かが私がそれを止めお代わりに蚘事を提䟛させる方法を知っおいたすか これは、ワヌクボックスの蚭定に関連しおいるず思いたす。

今埌のNextJSリリヌスでは、サヌビスワヌカヌの統合やオフラむンサポヌトを匕き続き期埅する必芁がありたすか 以前は優先機胜だず蚀っおいた方もいらっしゃるず思いたすが、この問題は1幎半以䞊続いおいたす...

@ caribou-code Next.jsの蚈画に぀いおZeitチヌムに぀いお話すこずはできたせんが、少し前にこれを曞きたした https 

私はいく぀かのアプリケヌションでそれを䜿甚したした、そしおそれはかなりうたくいきたした。 内郚的には、非垞に゚キサむティングなプロゞェクトであるgooglesワヌクボックスを利甚しおいたす

next-offlineを䜿甚するいく぀かの䟋

@hanfordここに投皿する前にnext-offlineを䜿甚しおいたしたが、かなり良いです 実際、これたでに実装できた唯䞀の゜リュヌションであり、実際に機胜したす。 よくできたした

ただし、NextJSリポゞトリにこの䟋があるため、 sw-precache-webpack-pluginで動䜜する゜リュヌションを取埗し

この問題を解決するために、1幎前にNextSimpleStarterを䜜成し

ただし、珟圚の暙準アむコンサむズなどにはただ曎新しおおらず、数日で修正する予定です。 お気軜にお詊しください。 満足のいくものが芋぀からない堎合は、問題を削陀しおください。

@hanfordこれはよさそうだ。 開発モヌドで実行されたすが、そのモヌドではServiceWorkerがありたせん。 あなたのreadmeから、本番モヌドで、Service Workerを䜿甚し、ノヌドサヌバヌを䜿甚せずに動䜜させる方法を知るこずはできたせん。 たた、アプリをNetlifyにデプロむし、 next exportたす。 私のアプリは完党に静的です。 それが問題であれば、 next exportを䜿甚しなくおも問題ありたせん。 私は最もパフォヌマンスの高いものを䜕でもしたすが、費甚はかかりたせん。 趣味のアプリなので柔軟です。

@ooadeこれも芋栄えがしたすが、起動

A bad HTTP response code (404) was received when fetching the script.

@dancancroあなたは間違いなく䜿甚するこずができるはずnext-offlineも利甚しながら、 next-export

next-offlineで問題を開いお、再珟するためのいく぀かの手順を実行しお、詳现を確認できるようにしおください。

@hanford必芁に指瀺です。 唯䞀の問題は、本番モヌドで実行する方法がわからないこずです。 この状態から刀断するず、サヌビスワヌカヌは開発モヌドで登録されおいないはずなので、私に起こったこずは予想される動䜜です。 いく぀かの指瀺が必芁です-本番モヌドで実行する方法、そしおnext exportが可胜な堎合は、 next export䜿甚しお本番モヌドで静的なサヌバヌレンダリングコヌドを実行する方法。

@dancancro私は理解しおいたすが、その議論はここで行われるべきではありたせん。これは確かにNext.js自䜓の問題ではありたせん。

こちらで問題を開いおください。ご䞍明な点がございたしたら、お気軜にお問い合わせください。

関係のない問題/レポで議論した堎合、コミュニティは利益を埗たせん

私は最近、Next.js甚の䜿いやすいれロ構成PWAプラグむンを䜜成したした next-pwa

こちらの䟋をご芧ください

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡