Open5

Next.jsメモ

🊉サック/Sakku🊉サック/Sakku

Next.js - Linkずナビゲヌション -

こちらのドキュメントを改めお読んでいる。

以䞋自分の䞻芳・意蚳も含む認識違っおたら指摘お願いしたす


最近話題になっおいるRemixの方がWeb暙準だ〜ずか蚀われるけど自分も正盎Web暙準に関しお詳现には理解しおいない、Next.jsはペヌゞ内リンクをWeb暙準のリンク芁玠こういう䜿い方でいいのかなであるaタグではなく、LinkコンポヌネントLink APIを䜿甚する。

厳密にはaタグも䜿えるけど、Next.jsずしおLinkタグの䜿甚を掚奚しおる。なぜならLinkタグはNext.jsが独自に最適化した仕組みで、Next.jsを遞定したナヌザヌの䜓隓を最適化できるものだから。

このLinkずナビゲヌションの抂念を理解するには以䞋の抂念も合わせお知っおおく必芁がある。

  • Next.jsのレンダリング
  • プリフェッチ
  • ストリヌミング
  • Client-side transitions

次ぞ続く =>

🊉サック/Sakku🊉サック/Sakku

Next.jsのレンダリング

Next.jsのレンダリングに぀いお、詳しくは公匏ドキュメントや有難いこずに同じくZenn䞊に䞊がっおいる「Next.jsの考え方」を読んだいただくこずをオススメしたす。

ここではざっくり自分の理解だが、Next.jsは基本的に3぀のレンダリングが可胜である。
いやもしかしたら4぀5぀かもしれない。ここは自信ない。

ただ自分の知る限りは以䞋の感じかなず

  • SSG
  • ISR
  • SSR

他にも、CSRずかPPRずかもできる。
※ 'use client'などを䜿甚する => CSRこの認識だず色々䞍足しおそうだけど
※ PPR = やり方忘れたけど、Next.js v14系くらいから実隓導入されおる

ひずたず䞻芁レンダリングがSSG・ISR・SSRだず仮定するず、Next.jsかなりサむト・アプリパフォヌマンスやSEOなどに匷いず蚀われるのもなんずなくわかるし、フレヌムワヌクずしおの思想もそっち寄りのものなのかなず思う。

SSG・ISR・SSRは䜿甚堎面などでカテゎリ分けするず、以䞋の感じかず思う。
SSG・ISR => 静的最新情報でなくおもいい堎合
SSR => 動的情報の鮮床が重芁

静的ず動的なレンダリング性質を䜵せ持぀Next.jsだけど、共通するのはサヌバヌ凊理があるこずである。SSGずISRはビルド時・再怜蚌時・キャッシュ切れ時、SSRはコンテンツ曎新時ずかの違いはあれど、基本的にサヌバヌでレンダリングされる。

次ぞ続く =>

🊉サック/Sakku🊉サック/Sakku

Next.jsのレンダリング2

だいぶ脱線気味で若干疲れたしたが...

基本的にNext.jsがサヌバヌを䜿甚し凊理をしおいるずいう぀ながりで、"RSC" 、いわゆるReact Server Componentずいう抂念もよく関わっおいるっぜい。正盎自分は理解が足りないのでここはうたく曞けない...字の劂くいくず、サヌバヌで凊理されるReactのコンポヌネントずいうこずだろうか。

このRSCがNext.jsではどのように動いおいるかだけど、RSCペむロヌドずいう圢で、サヌバヌから手順曞みたいに分割ストリヌミングされる。

この分割ストリヌミングされるずいうのが、埓来のSSRサヌバヌでHTMLを䜜成しお返すずは異なる。Next.jsでも初回は返すんだっけ...自信無くなっおきた

本日はもう眠いのでこの蟺で。

次ぞ続く =>

🊉サック/Sakku🊉サック/Sakku

プリフェッチ

以䞋を前述したが、具䜓的にNext.jsが掚奚するLinkコンポヌネントがどのように最適化されおいるのか、その代衚䟋がプリフェッチずいう抂念だず思う。

厳密にはaタグも䜿えるけど、Next.jsずしおLinkタグの䜿甚を掚奚しおる。なぜならLinkタグはNext.jsが独自に最適化した仕組みで、Next.jsを遞定したナヌザヌの䜓隓を最適化できるものだから。

プリフェッチずは、Astroなど他フレヌムワヌクでも出おくる抂念ではあるが、なんだろうか。
時から掚枬するず、プリ前もっお + フェッチ取埗的な感じで、䜕かを前もっお取埗するのだろう。

Linkコンポヌネントにおいお、その"䜕か" ずいうのは、そのLinkコンポヌネントを䜿っおナビゲヌトされる先のペヌゞ/画面の情報である。

通垞のaタグの遷移では、ペヌゞをフルロヌド同ペヌゞ内リンクは陀くが、Next.jsのLinkコンポヌネントの堎合、Linkコンポヌネントがビュヌポヌトに入ったタむミングで前もっお遷移先画面の情報を取埗しおいる。このロゞックのおかげで、遷移埌の画面衚瀺が著しく速くなり、これがナヌザヌ䜓隓をよくさせる。

今曎ながら、よく考えるものだなずすごく思った。画面を早く衚瀺する為には、倧きく2方向あるず思っおいお、以䞋かなず思った。

  • 衚瀺速床自䜓の改善色々やり方はあるず思う
  • 衚瀺コンテンツの取埗タむミングを早める

私の堎合は、おそらく前者の方を思っお、画像などの倧きいオブゞェクトを最適化したり、䞍芁コヌド削陀したりしおしたうず思う。それ自䜓は決しお無駄ではないず思うが、よくよく考えれば埌者のアプロヌチもあるなず思った。

このプリフェッチはLinkコンポヌネントを䜿甚したらデフォルトでtrueになっおいお、堎合によっおはfalseにするこずもできる。

ナヌザヌが画面を芋れるようになるための、衚瀺速床自䜓は増すが、圓然ながら裏でプリフェッチずいうネットワヌクを䜿甚した凊理が走っおるので、先取り取埗する必芁性が薄いコンテンツたで党おtrueにするず、プリフェッチしただけになっおしたい、リスクもある。

次ぞ続く =>

🊉サック/Sakku🊉サック/Sakku

Next.jsずVercel

䜕ずなくでしか䜿甚しおなかったが正盎盞性がよすぎる。

ずいうのもそう感じる理由は、䞻に以䞋

  • Next.jsのレンダリングSSGやSSR、ISRに蚭定無しで察応しおる
  • Vercelにデプロむする前提のパッケヌゞが倚々ある

正盎、ただ走りたおの個人開発やスタヌトアップでNext.jsずVercelがセットで䜿甚されるかが分かった気がする。

Next.js自䜓が独自のAPIが倚く、それらを䜿いこなせればだいたい䜕でもできるずいう䟿利さがあるが、それのほが倧䜓に察応しおるむンフラが少ない気がする。Vercelはそれらに最適化されおるので、䜕も考えないでも䜿えおしたう、䟿利さず怖さがある。

䜆し、商甚で䜿甚するには機胜が少なかったり、料金が固定で高かったりするので、意地でもCloudflareなどに乗せる気持ちも理解できる。