Angular 進階之四:SSR 應用場景與局限

應用場景

內容豐富,復雜交互的動態網頁,對首屏加載有要求的項目,對 seo 有要求的項目(因為服務端第一次渲染的時候,已經把關鍵字和標題渲染到響應的 html 中了,爬蟲能夠抓取到此靜態內容,因此更利于 seo)。此方式一些適合的項目:活動模板,新聞通知類,博客系統,混合開發等等。

SSR的優勢:

有利于SEO:

不同爬蟲工作原理類似,只會爬取源碼,不會執行網站的任何腳本(Google除外,據說Googlebot可以運行javaScript)。使用了React或者其它MVVM框架之后,頁面大多數DOM元素都是在客戶端根據js動態生成,可供爬蟲抓取分析的內容大大減少。另外,瀏覽器爬蟲不會等待我們的數據完成之后再去抓取我們的頁面數據。服務端渲染返回給客戶端的是已經獲取了異步數據并執行JavaScript腳本的最終HTML,網絡爬中就可以抓取到完整頁面的信息。

下面使用 node 寫一個簡單的請求,原來獲取頁面內容

const fs = require('fs')fetch('http://localhost:4200').then(response => response.text()).then(html => {// 使用 fs 將獲取到的內容保存到本地便于比對fs.writeFileSync(`${__dirname}/CSR.html`, html);console.log('HTML:', html);}).catch(error => {console.error('Error fetching the page:', error);});

對 SSR 和 CRS 頁面內容爬取做對比

下圖是 CSR 構建的頁面,通過爬蟲獲取頁面,可以看到只爬取到了項目打包后dist 文件中的 index.html 文件
其中可以用于 SEO 的數據只有 Title 一行代碼,對整個項目的 SEO 不太友好

下圖是 SSR 構建頁面,通過爬蟲獲取到了
SSR 構建的頁面可以爬到頁面上的所有內容,包括其中一些在后端渲染好的數據,其中讀取到的數據都可以用作 SEO

有利于首屏渲染

首屏的渲染是node發送過來的html字符串,并不依賴于js文件了,這就會使用戶更快的看到頁面的內容。尤其是針對大型單頁應用,打包后文件體積比較大,普通客戶端渲染加載所有所需文件時間較長,首頁就會有一個很長的白屏等待時間。

  • 比對 SSR 和 CSR 首頁加載速度
    • 從 Network 中可以看出 SSR構建的頁面初始 HTML 是在服務器上生成的,并在服務器上完成渲染。服務器返回已渲染好的 HTML 內容給客戶端
    • CRS 構建的項目,會先去獲取 JS 文件,獲取完之后再去請求接口獲取數據,如果 JS 文件比較大,就會有一個很長的等待時間形成一個首頁白屏的問題

局限

服務端壓力較大

SSR 將頁面渲染移動到服務器端,頁面的每一次點擊、修改都需要調用因此會增加服務器的壓力,以其相比還是 CSR 更方便一點

開發條件受限

在服務端渲染中,只會執行 ngOnInit ngOnDestroy ngAfterViewInit ngAfterContentInit 等生命周期鉤子,因此項目引用的第三方的庫也不可用其它生命周期鉤子,這對引用庫的選擇產生了很大的限制;

復雜的客戶端交互

SSR 通常需要更多的服務器端配置和復雜的代碼。前后端更緊密耦合,開發和維護相對復雜。
CSR 更容易實現,前后端分離較為徹底,前端負責渲染和交互,后端提供 API

在一些項目中,也可以采用混合使用 SSR CSR 的方式,這被稱為漸進式渲染Progressive Rendering)。這樣可以充分利用 SSR 的優勢來提高首屏加載性能,同時在頁面交互性較高的部分使用 CSR

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208856.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208856.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208856.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【面試專題】MySQL篇①

1.MySQL中,如何定位慢查詢? ①介紹一下當時產生問題的場景(我們當時的一個接口測試的時候非常的慢,壓測的結果大概5秒鐘) ②我們系統中當時采用了運維工具( Skywalking ),可以監測出哪個接口…

PostgreSQL從小白到高手教程 - 第38講:數據庫備份

PostgreSQL從小白到專家,是從入門逐漸能力提升的一個系列教程,內容包括對PG基礎的認知、包括安裝使用、包括角色權限、包括維護管理、、等內容,希望對熱愛PG、學習PG的同學們有幫助,歡迎持續關注CUUG PG技術大講堂。 第38講&#…

running小程序重要技術流程文檔

一、項目文件說明: (注:getMyMoney無用已刪除) 二、重要文件介紹 1.reinfo.js:位于utils文件下,該文件封裝有統一的請求URL,和請求API同意封裝供頁面調用;調用時候需要在頁面上先…

【C語言】操作符詳解(一):進制轉換,原碼,反碼,補碼

目錄 操作符分類 2進制和進制轉換 2進制轉10進制 10進制轉2進制 2進制轉8進制和16進制 2進制轉8進制 2進制轉16進制 原碼、反碼、補碼 操作符分類 操作符中有一些操作符和二進制有關系,我們先鋪墊一下二進制的和進制轉換的知識。 2進制和進制轉換 其實我們經…

數據結構準備知識

struct(結構體) struct,或稱為結構體,是C語言中一種復合數據類型,它允許你將多個不同類型的數據項組合成一個單一的單位。這對于創建記錄或更復雜的數據結構非常有用。 結構體的定義語法如下: struct 結…

vertica主鍵列能插入重復值的處理辦法

問題描述 開發同事反饋在vertica中創建含主鍵列的表中插入重復數據時沒有進行校驗,插入重復值成功。經過測試著實可以插入重復值,這個坑有些不一樣。 創建表和插入語句如下: --創建表 CREATE TABLE dhhtest(ID VARCHAR(64) PRIMARY KEY );…

postgresql數據庫配置主從并配置ssl加密

1、先將postgresql數據庫主從配置好 參考:postgresql主從配置 2、在主節點配置ssl加密,使用navicat測試是否可以連接 參考:postgresql配置ssl 3、正常連接無誤后,將root.crt、server.crt、server.key復制到從數據庫節點的存儲…

使用Microsoft Dynamics AX 2012 - 5. 生產控制

生產控制的主要職責是生產成品。為了完成這項任務,制造業需要消耗物品和資源能力(人員和機械)。制造過程可能包括半成品的生產和庫存。半成品是指物品包括在成品材料清單中。 制造業的業務流程 根據公司的要求,您可以選擇申請Dy…

某馬點評——day04

達人探店 發布探店筆記 改一下&#xff0c;圖片保存路徑就可以直接運行測試了。 查看探店筆記 Service public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IBlogService {Resourceprivate IUserService userService;Overridepublic Resu…

OpenCL學習筆記(二)手動編譯開發庫(win10+vs2019)

前言 有時需求比較特別&#xff0c;可能需要重新編譯opencl的sdk庫。本文檔簡單記錄下win10下&#xff0c;使用vs2019編譯的過程&#xff0c;有需要的小伙伴可以參考下 一、獲取源碼 項目地址&#xff1a;GitHub - KhronosGroup/OpenCL-SDK: OpenCL SDK 可以直接使用git命令…

一篇文章了解指針變量

字符指針變量 在指針的類型中我們知道有一種指針叫做字符指針 它的使用情況如下&#xff1a; #include<stdio.h> int main() {char pa w;char*p1&pa;*p1 a;printf("%c\n", *p1);return 0; } 在這段代碼當中&#xff0c;我們將‘w’字符的地址傳到了p…

vue3 自己寫一個月的日歷

效果圖 代碼 <template><div class"monthPage"><div class"calendar" v-loading"loading"><!-- 星期 --><div class"weekBox"><div v-for"(item, index) in dayArr" :key"index&q…

2.修改列名與列的數據類型

修改字段名與字段數據類型 1.修改字段名 有時&#xff0c;在我們建好一張表后會突然發現&#xff0c;哎呀&#xff01;字段名貌似寫錯了&#xff01;怎么辦&#xff1f;要刪了表再重新建一個新表嗎&#xff1f;還是要刪了這個字段再新建一個新的字段&#xff1f; 都不用&…

AIGC專題報告:生成式人工智能人人可用的新時代

今天分享的AIGC系列深度研究報告&#xff1a;《AIGC專題報告&#xff1a;生成式人工智能人人可用的新時代》。 &#xff08;報告出品方&#xff1a;埃森哲&#xff09; 報告共計&#xff1a;21頁 人工智能發展迎來新拐點 ChatGPT 正在喚醒全球對人工智能&#xff08;AI&…

蛇形矩陣

蛇形矩陣是由1開始的自然數依次排列成的一個矩陣上三角形。 例如&#xff0c;當輸入5時&#xff0c;應該輸出的三角形為&#xff1a; 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 輸入描述&#xff1a;輸入正整數N&#xff08;N不大于100&#xff09; 輸出描述&#xff1a;輸出一個N…

MySQL七 | 存儲引擎

目錄 存儲引擎 存儲引擎特點 存儲引擎選擇 Innodb與MyISAM區別 存儲引擎 默認存儲引擎:InnoDB show engines;#展示當前數據庫支持的存儲引擎 存儲引擎特點 特點InnoDBMyISAMMemory存儲限制64TB有有事務安全支持--鎖機制行鎖表鎖表鎖Btree鎖支持支持 支持 Hash索引--支…

在pom.xml中添加maven依賴,但是類里面import導入的時候報錯

問題&#xff1a; Error:(27, 8) java: 類TestKuDo是公共的, 應在名為 TestKuDo.java 的文件中聲明 Error:(7, 23) java: 程序包org.apache.kudu不存在 Error:(8, 23) java: 程序包org.apache.kudu不存在 Error:(9, 23) java: 程序包org.apache.kudu不存在 Error:(10, 30) jav…

【場景測試用例】上傳文件

測試思路&#xff1a; 功能 上傳符合需求給的文件格式&#xff0c;大小&#xff0c;寬高等可以正常上傳 不同的文件格式最大/最小/中間的文件大小如支持批量上傳可以正常上傳 邊界值如支持刪除可以正常刪除指定文件&#xff0c;其他文件不受影響如支持預覽&#xff0c;可以正常…

【Java探索之旅】我與Java的初相識(一):Java的特性與優點及其發展史

&#x1f3a5; 嶼小夏 &#xff1a; 個人主頁 &#x1f525;個人專欄 &#xff1a; Java入門到精通 &#x1f304; 莫道桑榆晚&#xff0c;為霞尚滿天&#xff01; 文章目錄 一. Java語言概述與優勢1.1 Java的概述1.2 Java語言的優勢 二. Java領域與發展史2.1 Java的使用領域2.…

面試多線程八股文十問十答第二期

面試多線程八股文十問十答第二期 作者&#xff1a;程序員小白條&#xff0c;個人博客 相信看了本文后&#xff0c;對你的面試是有一定幫助的&#xff01; ?點贊?收藏?不迷路&#xff01;? 1.進程和線程的區別 概念不同&#xff1a;進程是操作系統中的一個獨立執行單元&a…