關於聊天室原始碼服務端渲染那些事,沒有那麼複雜

雲豹科技程式設計師發表於2021-12-07

什麼是渲染

一般而言大家提到“渲染”,可能會說:“凡是從伺服器返回的 HTML 頁面,均算作是服務端渲染。”這可能讓不少人還是覺得迷惑,簡單說渲染就是“資料”和“模板”拼接到一起。舉個例子:聊天室原始碼前端開發最常見的一個場景,請求後端介面資料,然後將資料通過模板繫結語法繫結到頁面中,最終呈現給使用者。這個過程就是聊天室原始碼的渲染。

總結來說,聊天室原始碼的渲染本質其實是字串的解析替換,實現方式有很多種。但是我們這裡要關注的並不是如何渲染,而是在哪裡渲染的問題。

傳統的服務端渲染

最早期,Web 頁面渲染都是在服務端完成的,即聊天室原始碼服務端執行過程中將所需的資料結合頁面模板渲染為HTML 響應給客戶端瀏覽器。所以瀏覽器呈現出來的是直接包含內容的頁面。
在這裡插入圖片描述
這種方式對於沒有玩過聊天室原始碼後端開發的同學來說可能會比較陌生,所以下面通過我們前端同學比較熟悉的 Node.js 來了解一下這種方式。

安裝依賴:

// 建立 http 服務 npm i express 
// 服務端模板引擎 npm i art-template express-art-template

聊天室原始碼服務端程式碼部分,我們可以在基本的 Web 服務,使用模板引擎,然後渲染一個頁面,具體如下:’

const express = require('express')const fs = require('fs')const template = require('art-template')const app = express()app.get('/', (req, res) => {
  // 1. 得到模板內容
  const templateStr = fs.readFileSync('./index.html', 'utf-8')
  // 2. 得到資料
  const data = JSON.parse(fs.readFileSync('./data.json', 'utf-8'))
  // 3. 渲染:資料 + 模板 = 完整結果
  const html = template.render(templateStr, data)
  console.log(html)
  // 4. 把渲染結果傳送給客戶端
  res.send(html))}app.listen(3000, () => console.log('running...'))

客戶端程式碼:

<!DOCTYPE html>
  <html lang="en">
    <head>
      <meta charset="UTF-8" />
      <title>Document</title>
    </head>
    <body>
      <h1>{{ message }}</h1>
      <ul>
        {{ each todos }}
        <li>{{ $value.title }}</li>
        {{ /each }} 
      </ul>
    </body></html>

這是最早的網頁渲染方式,也是動態網站的核心工作步驟。

缺點:

  • 聊天室原始碼前後端程式碼完全耦合在一起,不利於開發和維護;
  • 前端沒有足夠的發揮空間;
  • 服務端的壓力較大;
  • 使用者體驗一般;

但是不得不說,在網頁應用並不複雜的情況下,這種方式也是可取的。

客戶端渲染

傳統的服務端渲染的有很多問題,而這些問題客戶端 Ajax 技術可以有效解決。Ajax 技術使得客戶端動態獲取資料變為可能,也就是說原本服務端渲染這件事也可以拿到聊天室原始碼客戶端做了。

下圖是基於客戶端渲染的 SPA 應用的基本工作流程:
在這裡插入圖片描述

我們以一個 Vue.js 建立的單頁面應用為例,簡單瞭解一下這種方式的渲染過程。

在這裡插入圖片描述

通過這個示例瞭解到聊天室原始碼可以把【資料處理】和【頁面渲染】這兩件事分開了。由後端負責處理資料介面,而前端只負責將介面資料渲染到頁面中,這讓聊天室原始碼前端不再受限於後端,更為獨立。

缺點:

  • 首屏渲染慢
  • 不利於 SEO

現代化服務端渲染

現代化聊天室原始碼伺服器端一般會選擇同構渲染,也就是一份程式碼,在伺服器端執行一次,用於實現伺服器端渲染(首屏直出),然後在聊天室原始碼客戶端再執行一次,用於接管頁面互動。簡單來說,同構渲染就是“後端渲染”和“前端渲染”的結合,同構渲染同時擁有傳統服務端渲染和客戶端渲染的優點,可以有效解決 SEO 和首屏渲染慢的核心問題。
在這裡插入圖片描述

  • 聊天室原始碼客戶端發起請求
  • 服務端渲染首屏內容 + 生成客戶端 SPA 相關資源
  • 服務端將生成的首屏資源傳送給客戶端
  • 客戶端直接展示服務端渲染好的首屏內容
  • 首屏中的 SPA 相關資源執行之後會啟用客戶端 Vue
  • 之後客戶端所有的互動都由客戶端 SPA 處理

如何使用同構渲染

如何使用同構渲染有兩種方式,一種是官方解決方案,一種是使用第三方的方案。

使用 Vue、React 等框架的官方解決方案:

  • 優點:有利於理解原理
  • 缺點:聊天室原始碼需要搭建環境比較麻煩

使用第三方解決方案:

  • React 生態中的 Next.js
  • Vue 生態中的 Nuxt.js
  • Angular 生態中的 Angular Universal

同構渲染應用的問題

同構渲染在聊天室原始碼的應用上也存在以下問題:

  • 開發條件有限
  • 涉及構建設定和部署的要求更高
  • 更多的服務端負載

以上就是我對於聊天室原始碼服務端渲染的一些淺談,希望能夠對大家有所幫助。

本文轉載自網路,轉載僅為分享乾貨知識,如有侵權歡迎聯絡雲豹科技進行刪除處理
原文連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2846285/,如需轉載,請註明出處,否則將追究法律責任。

相關文章