<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>SSR｜林鼎淵 Dean Lin</title>
    <link>https://deanlin.net/tags/ssr/</link>
    <image><url>https://deanlin.net/images/author_hu_aa256fc934e9a932.jpg</url><title>SSR｜林鼎淵 Dean Lin</title><link>https://deanlin.net/tags/ssr/</link><width>144</width><height>144</height></image>
    <description>林鼎淵（Dean Lin）的部落格：生成式 AI 企業內訓講師、外商資安公司軟體專家、7 本書作者。400 多篇文章用白話分享生成式 AI 實戰、Claude Code 與 Vibe Coding 教學、團隊合作與職場成長。</description>
    <generator>Hugo</generator>
    <language>zh-tw</language>
    <copyright>© 2020–2026 林鼎淵 Dean Lin</copyright>
    <lastBuildDate>Sun, 26 Sep 2021 14:10:12 +0800</lastBuildDate>
    <atom:link href="https://deanlin.net/tags/ssr/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>[面試][前端]如何判斷專案要使用 CSR 還是 SSR？</title>
      <link>https://deanlin.net/blog/202109/fullstack-career-notes-day-11/</link>
      <pubDate>Sun, 26 Sep 2021 14:10:12 +0800</pubDate>
      <guid>https://deanlin.net/blog/202109/fullstack-career-notes-day-11/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>職涯成長</category>
      <description>除非你是草創成員，不然進入一間公司後，往往都是跟著前輩訂下的規則走；大部分的前輩在交接的時候只會說要這樣做，而不會告訴你為什麼要這樣做。</description>
      <media:content url="https://deanlin.net/blog/202109/fullstack-career-notes-day-11/images/cover_hu_b4e5269210256fac.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<blockquote>
<p>如果前輩說什麼你就做什麼，長久下來你會失去判斷能力。</p>
</blockquote>
<p>除非你是草創成員，不然進入一間公司後，往往都是跟著前輩訂下的規則走；大部分的前輩在<mark>交接的時候只會說要這樣做，而不會告訴你為什麼要這樣做</mark>。</p>
<p>不懂就問，不會就學；前輩說的也未必都是正確的，過去的設計可能存在缺陷，只是當時沒有發現；也可能因為時空背景關係，現在已經不適用了；<mark>希望大家永遠保留自己的意識，與面對未知的懷疑</mark>。</p>
<h2 id="大綱">大綱<a class="h-anchor" href="#%e5%a4%a7%e7%b6%b1" aria-label="這個段落的連結"></a></h2>
<ol>
<li><strong>如何判斷專案要使用 CSR 還是 SSR？</strong>
<ul>
<li>1.1 面試官為什麼會問？</li>
<li>1.2 面試官想從答案確認什麼？</li>
<li>1.3 筆者提供的簡答</li>
</ul>
</li>
<li><strong>回答問題所需具備的知識</strong>
<ul>
<li>2.1 CSR - Client-Side Rendering（客戶端渲染）</li>
<li>2.2 SSR - Server-Side Rendering（伺服器端渲染）</li>
</ul>
</li>
<li><strong>衍伸問題</strong>
<ul>
<li>3.1 在實務上有遇過什麼問題？你如何解決？</li>
</ul>
</li>
</ol>
<hr>
<h2 class="h-nomark" id="1-如何判斷專案要使用-csr-還是-ssr">1. 如何判斷專案要使用 CSR 還是 SSR？<a class="h-anchor" href="#1-%e5%a6%82%e4%bd%95%e5%88%a4%e6%96%b7%e5%b0%88%e6%a1%88%e8%a6%81%e4%bd%bf%e7%94%a8-csr-%e9%82%84%e6%98%af-ssr" aria-label="這個段落的連結"></a></h2>
<h3 class="h-nomark" id="11-面試官為什麼會問">1.1 面試官為什麼會問？<a class="h-anchor" href="#11-%e9%9d%a2%e8%a9%a6%e5%ae%98%e7%82%ba%e4%bb%80%e9%ba%bc%e6%9c%83%e5%95%8f" aria-label="這個段落的連結"></a></h3>
<p>因為<mark>履歷資訊</mark>中顯示求職者使用<code>Nuxt.js</code>這個 Vue.js 的應用框架；而選擇這個框架通常是為了 SSR，於是想透過這個問題確認求職者是否明白 SSR 與 CSR 的意思，以及各自的應用場景。</p>
<hr>
<h3 class="h-nomark" id="12-面試官想從答案確認什麼">1.2 面試官想從答案確認什麼？<a class="h-anchor" href="#12-%e9%9d%a2%e8%a9%a6%e5%ae%98%e6%83%b3%e5%be%9e%e7%ad%94%e6%a1%88%e7%a2%ba%e8%aa%8d%e4%bb%80%e9%ba%bc" aria-label="這個段落的連結"></a></h3>
<ul>
<li>是否可以簡述 CSR 與 SSR 的應用場景</li>
<li>細問時可以說出各自的優缺點</li>
<li>在實務上如何發揮各自優點</li>
</ul>
<hr>
<h3 class="h-nomark" id="13-筆者提供的簡答">1.3 筆者提供的簡答<a class="h-anchor" href="#13-%e7%ad%86%e8%80%85%e6%8f%90%e4%be%9b%e7%9a%84%e7%b0%a1%e7%ad%94" aria-label="這個段落的連結"></a></h3>
<p>如果是<mark>操作頻繁</mark>的的內部管理系統，我會建議使用 <code>CSR</code>，由 Client 負責編譯 HTML 頁面以降低 Server 端壓力；而面對<mark>需要 SEO 優化</mark>的網站，我會推薦用 <code>SSR</code>，因為 Client 端會直接收到由 Server 端編譯好的 HTML，利用首屏渲染快的優勢提供較好的使用者體驗。</p>
<hr>
<h2 class="h-nomark" id="2-回答問題所需具備的知識">2. 回答問題所需具備的知識<a class="h-anchor" href="#2-%e5%9b%9e%e7%ad%94%e5%95%8f%e9%a1%8c%e6%89%80%e9%9c%80%e5%85%b7%e5%82%99%e7%9a%84%e7%9f%a5%e8%ad%98" aria-label="這個段落的連結"></a></h2>
<h3 class="h-nomark" id="21-csr---client-side-rendering客戶端渲染">2.1 CSR - Client-Side Rendering（客戶端渲染）<a class="h-anchor" href="#21-csr---client-side-rendering%e5%ae%a2%e6%88%b6%e7%ab%af%e6%b8%b2%e6%9f%93" aria-label="這個段落的連結"></a></h3>
<p><mark>渲染過程全部交給 Client 端的瀏覽器去處理</mark>，Server 端不參與任何渲染。一開始的 HTML 是空白的，需要等待 JavaScript 下載並執行後瀏覽器才會顯示畫面。</p>
<ul>
<li><strong>優點</strong>
<ul>
<li><strong>減少 Server 端的壓力</strong><br>因為 JavaScript 及 CSS 在第一次都已經發送到 Client 端，之後只需要向 Server 端取得相關頁面的 data 即可。</li>
<li><strong>頁面切換速度快</strong><br>因為 HTML 頁面都是 Client 端自己編譯的，所以頁面切換時不需要像 SSR 等待 Server 端回傳 HTML；而且網頁內容的改變通常都是局部的，這樣就避免了不必要的跳轉及重複渲染。</li>
</ul>
</li>
<li><strong>缺點</strong>
<ul>
<li><strong>首屏顯示慢</strong><br>明明首頁只有一點內容卻下載了所有頁面的資源。</li>
<li><strong>SEO 較差</strong><br>因爲一開始的 HTML 頁面是空白的；儘管現在 Google 的爬蟲也會等 JavaScript 編譯好再爬，但這塊對 SEO 的實際幫助還需要時間驗證。</li>
</ul>
</li>
<li><strong>應用場景</strong>
<ul>
<li><strong>會高頻操作且不需 SEO 的網站</strong><br>像是內部管理系統（ERP 系統、訂單管理系統），如果這類型的系統採取 SSR 會造成 Server 端較大的負荷。</li>
</ul>
</li>
</ul>
<hr>
<h3 class="h-nomark" id="22-ssr---server-side-rendering伺服器端渲染">2.2 SSR - Server-Side Rendering（伺服器端渲染）<a class="h-anchor" href="#22-ssr---server-side-rendering%e4%bc%ba%e6%9c%8d%e5%99%a8%e7%ab%af%e6%b8%b2%e6%9f%93" aria-label="這個段落的連結"></a></h3>
<p><mark>HTML 由 Server 端編譯出來返回 Client 端</mark>，所以 Client 看到的畫面就是最終版 HTML。</p>
<ul>
<li><strong>優點</strong>
<ul>
<li><strong>SEO 排名更高</strong><br>因為 Google 爬蟲可以直接抓到網站的資訊。</li>
<li><strong>首屏渲染快</strong><br>因為不需要下載一堆 JavaScript 及 CSS ，還要等待它們編譯後才看到頁面。</li>
<li><strong>減少 Client 端的耗電量</strong><br>因為編譯的步驟都在 Server 端執行。</li>
</ul>
</li>
<li><strong>缺點</strong>
<ul>
<li><strong>Server 端承受比較大的壓力</strong><br>由於頁面都是在 Server 端進行編譯，在高併發場景中會消耗相當大的資源。</li>
</ul>
</li>
<li><strong>應用場景</strong>
<ul>
<li><strong>低頻操作但需要 SEO 優化的網站</strong><br>像是媒體類型的網站（部落格、新聞網站、技術文件），因為文章要被搜尋到才會有流量及話題，而且大部分的時候 Client 端都在閱讀，很少有高頻操作的情境。</li>
</ul>
</li>
</ul>
<hr>
<h2 class="h-nomark" id="3-衍伸問題">3. 衍伸問題<a class="h-anchor" href="#3-%e8%a1%8d%e4%bc%b8%e5%95%8f%e9%a1%8c" aria-label="這個段落的連結"></a></h2>
<h3 class="h-nomark" id="31-在實務上有遇過什麼問題你如何解決">3.1 在實務上有遇過什麼問題？你如何解決？<a class="h-anchor" href="#31-%e5%9c%a8%e5%af%a6%e5%8b%99%e4%b8%8a%e6%9c%89%e9%81%87%e9%81%8e%e4%bb%80%e9%ba%bc%e5%95%8f%e9%a1%8c%e4%bd%a0%e5%a6%82%e4%bd%95%e8%a7%a3%e6%b1%ba" aria-label="這個段落的連結"></a></h3>
<p><mark>考點：了解你在實務上是否能靈活運用</mark></p>
<ul>
<li><strong>先簡述自己遇過的問題</strong><br>假設 Client 端的網路環境不理想又採用 CSR，那在首屏渲染的過程可能就趕走許多使用者；在這種情況下 SSR 會因為 Server 環境相對穩定而獲得較好的使用者體驗。</li>
<li><strong>再說明解決方式</strong><br>無論是 CSR 還是 SSR 都有各自的優勢與弱點，所以我通常會讓第一個頁面用 SSR 來爭取更高的 SEO，其他操作頻率高的頁面則採用 CSR 讓使用者有良好的體驗；目前 Nuxt.js（Vue）、Next.js（React）這兩個框架都是很好的解決方案</li>
</ul>
<hr>
<p>感謝大家的閱讀，如果喜歡我的文章可以<code>訂閱</code>接收通知；如果有幫助到你，按<code>Like</code>可以讓我更有寫文的動力，我們明天見～</p>
<h3 id="參考資源">參考資源<a class="h-anchor" href="#%e5%8f%83%e8%80%83%e8%b3%87%e6%ba%90" aria-label="這個段落的連結"></a></h3>
<ol>
<li><a href="https://medium.com/dean-lin/119ca6f5ecc#1a75">SSR、CSR 名詞理解 &amp; 應用場景(筆者部落格)</a></li>
</ol>
<hr>
<hr>
<blockquote>
<p><img src="https://deanlin.net/blog/202109/fullstack-career-notes-day-11/images/fullstack-career-notes-day-11-01.webp" width="1024" height="233" alt="參考資源（圖 1）" fetchpriority="high" decoding="async"></p>
<p>在許多人的幫助下，本系列文章已成功出版，除了添加新的篇章，更完善了每個案例的應對進退；如果對現在的職涯感到迷茫，也許這本書能帶給你不一樣的觀點～</p>
<p><strong>天瓏書局：</strong> <a href="https://www.tenlong.com.tw/products/9786263334571">https://www.tenlong.com.tw/products/9786263334571</a></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>SSR、CSR名詞理解 &amp; 應用場景</title>
      <link>https://deanlin.net/blog/202103/ssr-vs-csr/</link>
      <pubDate>Thu, 18 Mar 2021 12:36:01 +0800</pubDate>
      <guid>https://deanlin.net/blog/202103/ssr-vs-csr/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>技術教學</category>
      <description>當老闆或是主管問你為什麼選擇這個技術時，如果支支吾吾打不出來就遜掉了；理解為什麼該這樣做才是對技術的負責。</description>
      <media:content url="https://deanlin.net/blog/202103/ssr-vs-csr/images/ssr-vs-csr-og_hu_e797feeb9e8b0924.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>當老闆或是主管問你為什麼選擇這個技術時，如果支支吾吾打不出來就遜掉了；理解為什麼該這樣做才是對技術的負責。</p>
<p><img src="https://deanlin.net/blog/202103/ssr-vs-csr/images/ssr-vs-csr-01.webp" width="1400" height="785" alt="SSR、CSR名詞理解 &amp; 應用場景（圖 1）" fetchpriority="high" decoding="async"></p>
<pre tabindex="0"><code>CSR - Client-Side Rendering（客戶端渲染）
  ➤ 優點
  ➤ 缺點
  ➤ 應用場景
SSR - Server-Side Rendering（伺服器端渲染）
  ➤ 優點
  ➤ 缺點
  ➤ 應用場景
可以思考的問題
  ➤ 現實面遇到的狀況
  ➤ 運用框架結合 CSR 與 SSR 的優點讓網站取得雙贏
</code></pre><h2 id="csr--client-side-rendering客戶端渲染">CSR — Client-Side Rendering（客戶端渲染）<a class="h-anchor" href="#csr--client-side-rendering%e5%ae%a2%e6%88%b6%e7%ab%af%e6%b8%b2%e6%9f%93" aria-label="這個段落的連結"></a></h2>
<p>渲染過程全部交給 client 的瀏覽器去處理，server 不參與任何渲染。一開始的 HTML 是空白的，需要等待 JS 下載並執行後瀏覽器才會顯示畫面。</p>
<h3 id="-優點">優點：<a class="h-anchor" href="#-%e5%84%aa%e9%bb%9e" aria-label="這個段落的連結"></a></h3>
<ul>
<li><strong>減少 server 端的壓力</strong>：因為 JS 及 CSS 在第一次都已經發送到 client 端，之後只需要向 server 端取得相關頁面的 data 即可</li>
<li><strong>頁面切換速度快</strong>：因為 HTML 頁面都是 client 端自己編譯的，所以頁面切換時不需要像 SSR 等待 server 回傳 HTML；而且網頁內容的改變通常都是局部的，這樣就避免了不必要的跳轉及重複渲染。</li>
</ul>
<h3 id="-缺點">缺點：<a class="h-anchor" href="#-%e7%bc%ba%e9%bb%9e" aria-label="這個段落的連結"></a></h3>
<ul>
<li><strong>首屏顯示慢</strong>：明明首頁只有一點內容卻把下載了所有頁面的資源</li>
<li><em>SEO 較差</em>：因一開始的 HTML 是空白的，雖然現在 Google 的爬蟲也會等 javascript 編譯好再爬，但這塊對 SEO 的實際幫助還需要時間驗證</li>
</ul>
<h3 id="-應用場景">應用場景：<a class="h-anchor" href="#-%e6%87%89%e7%94%a8%e5%a0%b4%e6%99%af" aria-label="這個段落的連結"></a></h3>
<ul>
<li><strong>會高頻操作且不需 SEO 的網站</strong>：像是內部管理系統，如果這類型的系統採取 SSR 會造成 server 端很大的負荷。</li>
</ul>
<hr>
<h2 id="ssr--server-side-rendering伺服器端渲染">SSR — Server-Side Rendering（伺服器端渲染）<a class="h-anchor" href="#ssr--server-side-rendering%e4%bc%ba%e6%9c%8d%e5%99%a8%e7%ab%af%e6%b8%b2%e6%9f%93" aria-label="這個段落的連結"></a></h2>
<p>HTML 由 server 編譯出來返回 client 端，所以 client 看到的畫面就是最終版 HTML。</p>
<h3 id="-優點-1">優點：<a class="h-anchor" href="#-%e5%84%aa%e9%bb%9e-1" aria-label="這個段落的連結"></a></h3>
<ul>
<li><strong>SEO 排名更高</strong>：因為 Google 爬蟲可以直接抓到網站的資訊</li>
<li><strong>首屏渲染快</strong>：因為不需要下載一堆 JS 以及 CSS 執行後才看到頁面</li>
<li><strong>減少 client 端的耗電量</strong>：因為編譯的步驟都在 server 端執行</li>
</ul>
<h3 id="-缺點-1">缺點：<a class="h-anchor" href="#-%e7%bc%ba%e9%bb%9e-1" aria-label="這個段落的連結"></a></h3>
<ul>
<li><strong>server 端承受比較大的壓力</strong>：由於頁面都是在 server 端進行編譯，在高併發場景中會消耗相當大的資源</li>
</ul>
<h3 id="-應用場景-1">應用場景：<a class="h-anchor" href="#-%e6%87%89%e7%94%a8%e5%a0%b4%e6%99%af-1" aria-label="這個段落的連結"></a></h3>
<ul>
<li><strong>低頻操作但需要 SEO 優化的網站</strong>：像是媒體類型的網站，因為文章需要被搜尋到，我們看一篇文章也需要一點時間很少高頻的操作這個網站</li>
</ul>
<hr>
<h2 id="可以思考的問題">可以思考的問題<a class="h-anchor" href="#%e5%8f%af%e4%bb%a5%e6%80%9d%e8%80%83%e7%9a%84%e5%95%8f%e9%a1%8c" aria-label="這個段落的連結"></a></h2>
<h3 id="-現實面遇到的狀況">現實面遇到的狀況<a class="h-anchor" href="#-%e7%8f%be%e5%af%a6%e9%9d%a2%e9%81%87%e5%88%b0%e7%9a%84%e7%8b%80%e6%b3%81" aria-label="這個段落的連結"></a></h3>
<p>在 CSR 的狀況下如果某個頁面需要同時存取多個 api，假設 client 端的網速不理想，那使用者的體驗會極差；在這種情況下 SSR 會因為 server 環境相對穩定而獲得相對好的使用者體驗。</p>
<h3 id="-運用框架結合-csr-與-ssr-的優點讓網站取得雙贏">運用框架結合 CSR 與 SSR 的優點讓網站取得雙贏<a class="h-anchor" href="#-%e9%81%8b%e7%94%a8%e6%a1%86%e6%9e%b6%e7%b5%90%e5%90%88-csr-%e8%88%87-ssr-%e7%9a%84%e5%84%aa%e9%bb%9e%e8%ae%93%e7%b6%b2%e7%ab%99%e5%8f%96%e5%be%97%e9%9b%99%e8%b4%8f" aria-label="這個段落的連結"></a></h3>
<p>經由上面的分析，我想大家應該已經感受到 CSR 與 SSR 可以說是性質完全相反的渲染了，所以實際應用上我們通常會讓第一個頁面用 SSR 來爭取更高的 SEO，其他的頁面則採用 CSR 的方式來操作給使用者兩好的體驗。</p>
<p>現有的框架： <code>Nuxt.js</code>（Vue）、<code>Next.js</code>（React）都有很好的解決方案</p>
<hr>
<blockquote class="pullquote"><p>以上是我個人針對 SSR、CSR 技術的理解，如果有理解錯誤的地方希望有大神給予指教，感恩不盡～</p>
</blockquote>
]]></content:encoded>
    </item>
  </channel>
</rss>
