iT邦幫忙

2023 iThome 鐵人賽

DAY 1
0
Vue.js

Nuxt.js 3.x 筆記-打造 SSR 專案系列 第 1

D1:Nuxt.js vs Vue.js,淺談 SPA 與 SSR

  • 分享至 

  • xImage
  •  

本篇文章同步更新於個人部落格,歡迎交流指教~謝謝您的閱讀

nuxt-vs-vue

提到 Nuxt.js,必須先從 Vue.js 說起,Vue.js 為專注在視圖層(View)的 Javascript 框架,為 SPA(Single Page Application)單頁應用程式,搜尋引擎爬蟲未能抓取到渲染後的 HTML 內容,因此 SEO(Search Engine Optimization)表現趨近於零。

而 Nuxt.js 是基於 Vue.js 的框架,為通用渲染模式(Universal Rendering),結合了 SSR(Server Side Render)及 CSR(Client Side Render),搜尋引擎爬蟲可以取得 HTML 內容,大幅提升 SEO 表現。


SPA / CSR vs MPA / SSR

SPA-vs-MPA

SPA(Single Page Application)單頁式應用

使用 CSR(Client Side Render)用戶端渲染模式。整個網站應用只有單一 HTML 頁面,一但頁面被載入進來後,就不會再進行該頁面請求(Form Request),而是透過 AJAX 從後端請求資料,並透過 Javascript 動態更新與渲染網頁內容。

  • 優點: 使用者體驗佳,因每次切換頁面時只有部分畫面更新,不會重新載入整個頁面
  • 缺點: 搜尋引擎爬蟲未能抓取到渲染後的 HTML 內容,因此 SEO(Search Engine Optimization)表現趨近於零

MPA(Multi Page Application)多頁式應用

使用 SSR(Server Side Render)伺服器端渲染模式。在頁面載入前即渲染,每次跳轉頁面,瀏覽器都會重新向伺服器發送頁面請求,由伺服器回傳頁面的 HTML 內容。

  • 優點: 在伺服器上生成完整的 HTML 頁面,首次內容繪製(FCP,First Contentful Paint)速度快,且搜尋引擎爬蟲可以取得完整 HTML 內容,SEO 表現佳
  • 缺點: 使用者體驗較差,因每次切換頁面都要重新刷新頁面,且對伺服器負擔較大

Universal Rendering

通用渲染,Nuxt.js 使用的渲染模式,同時支援 SSR 與 CSR 技術,初次進到頁面時採用 SSR 模式,在伺服器中產生完整 HTML 內容,回傳給瀏覽器端。後續動態切換頁面時,則採用 CSR 模式,結合了 SSR 與 SPA 的優點,除了使用者體驗佳,同時保有良好的 SEO 表現。

universal-rendering
圖片參考:Nuxt 官網

流程:

  1. 伺服器端產生靜態 HTML,回傳給瀏覽器端
  2. 瀏覽器端載入 JavaScript 並執行
  3. Hydration 混合渲染完成,使用者可以開始與網頁互動

Hydration 混合渲染:
在用戶端使用 JavaScript,讓伺服器端產生的靜態 HTML 加上 Event Handlers(事件處理器),讓使用者能與網頁進行互動的技術,Nuxt.js 跟 React 框架 Next.js 即使用此技術


Nuxt3 簡介

  • 使用 Vue3 開發
  • 完整 SSR 支援,也可以選用 CSR 模式
  • 自動定義路由(使用 Vue-Router),不需手動配置
  • 支援 webpack 5 與 Vite 開發(預設搭配 Vite)
  • 完整支援 TypeScript
  • 定義在 composables、components、plugins 的檔案,Nuxt 會自動引入(Auto-imports)
  • 內建支援 SSR 的 AJAX 請求方法($fetch、useFetch、useAsyncData)

Nuxt or Vue

Vue.js SPA 架構使用者體驗佳,如果專案為後台系統,或是不需要 SEO,選擇 Vue.js 開發相對單純。

Nuxt.js 是基於 Vue.js 開發的框架,適合已經有 Vue.js 或其他 JavaScript 框架使用經驗的開發者,如果專案需要良好的 SEO 表現,推坑 Nuxt.js,安裝方式簡單、自動化繁瑣的步驟,提供很不錯的開發體驗。


本次參賽預計分享菜單如下,後續會補上連結 /images/emoticon/emoticon37.gif


參考資源:
https://nuxt.com/docs/guide/concepts/rendering#universal-rendering
https://shubo.io/rendering-patterns/


下一篇
D2:Nuxt 3.x 專案架設
系列文
Nuxt.js 3.x 筆記-打造 SSR 專案30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言