亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 web前端 js教程 React 伺服器元件:演進

React 伺服器元件:演進

Jan 08, 2025 am 08:30 AM

React Server Components: The Evolution

簡介

大約十年前,當(dāng)我開始軟體開發(fā)之路時,我只編寫了HTML、CSS、JavaScript 和一些Python 2 腳本;在那段時間,我們只依賴PHP 和SQL 進行伺服器端客戶端-伺服器通信。之後,下一個層次是神奇的詞“反應(yīng)”,就像對狀態(tài)或效果的變化做出反應(yīng)。這是我的理解,沒有深入探討這個問題,有傳言說是 Facebook 工程師製作的;這是我們用來編碼前端部分的方式的重磅炸彈。

隨著軟體開發(fā)的發(fā)展和後端系統(tǒng)變得複雜,React Server Components (RSC) 認(rèn)為我們的生態(tài)系統(tǒng)迫切需要發(fā)展。這讓我想起了大量 JavaScript 捆綁包和“加載”旋轉(zhuǎn)器無處不在的日子。讓我們來探索 RSC 如何改變遊戲規(guī)則。

性能革命

RSC 帶來的主要轉(zhuǎn)變不僅是技術(shù)上的,而且是哲學(xué)上的。 RSC 不需要將整個元件樹傳送到客戶端,而是讓我們在伺服器上渲染元件,同時保持我們喜歡的 React 互動性。我曾經(jīng)將儀表板應(yīng)用程式遷移到 RSC,這非常簡單,沒有什麼特別的,而且儀表板應(yīng)用程式的大小下降了 60%,效果明顯。

這是我最近遇到的一個現(xiàn)實世界的例子:

 // Before: Client Component
 import { ComplexDataGrid } from 'heavy-grid-library';
import { format } from 'date-fns';

export default function Dashboard() {
  const [data, setData] = useState([]);

  useEffect(() => {
    fetchDashboardData().then(setData);
  }, []);

  return <ComplexDataGrid data={data} />;
}

在這種傳統(tǒng)的客戶端方法中,發(fā)生了幾件事:

  • 我們正在匯入一個與我們的客戶端 JavaScript 捆綁在一起的重型資料網(wǎng)格庫。
  • 我們使用 useState 在瀏覽器中本地管理我們的資料。
  • 我們在組件安裝後使用 useEffect 取得資料。
  • 在取得資料時使用者會看到載入狀態(tài)。
  • 所有資料處理都在瀏覽器中進行,可能會降低使用者裝置的速度。

現(xiàn)在,讓我們來看看 RSC 版本:

import { sql } from '@vercel/postgres';
import { DataGrid } from './DataGrid';

export default async function Dashboard() {
  const data = await sql`SELECT * FROM dashboard_metrics`;

  return <DataGrid data={data} />;
}
  • 該元件預(yù)設(shè)是異步的 - 不需要 useEffect 或 useState。
  • 透過伺服器端查詢直接存取資料庫。
  • 無需客戶端資料取得代碼。
  • 初始資料需要零載入狀態(tài)。
  • 資料處理發(fā)生在強大的伺服器上,而不是使用者設(shè)備。
  • 匯入的DataGrid元件可以更輕量,因為它只需要處理顯示,而不是資料擷取。

轉(zhuǎn)變是驚人的。不再有 useEffect,不再有客戶端資料獲取,最重要的是,不再有不必??要的 JavaScript 傳送到客戶端。

現(xiàn)實世界的好處

影響不僅限於效能指標(biāo)。在使用RSC 時,我注意到資料庫查詢現(xiàn)在更靠近資料來源(在上面的範(fàn)例中不是最佳編碼實踐),元件更簡單、更集中,身份驗證和授權(quán)模式變得更簡單,並且SEO改進幾乎是免費的,這在React 世界中是從未發(fā)生過的。

然而,最顯著的優(yōu)勢是開發(fā)者體驗。編寫可以直接存取資料庫的元件(安全?。└杏X就像一種超能力。這就像兩全其美:React 基於元件的架構(gòu),以及 Next.js 最先進的伺服器端渲染的效能優(yōu)勢

權(quán)衡

說實話:RSC 並不完美。心智模型需要時間來掌握,尤其是理解客戶端/伺服器邊界;對我來說,這是黑盒子中的複雜操作。我將遵循先前的遷移範(fàn)例,我們遇到了一些與 RSC 不相容的第三方程式庫的障礙。解決方案是什麼?混合方法:

 // Before: Client Component
 import { ComplexDataGrid } from 'heavy-grid-library';
import { format } from 'date-fns';

export default function Dashboard() {
  const [data, setData] = useState([]);

  useEffect(() => {
    fetchDashboardData().then(setData);
  }, []);

  return <ComplexDataGrid data={data} />;
}

讓我們來分解一下這種混合方法中發(fā)生的情況:

  • use client 指令明確地將 SearchFilter 標(biāo)記為客戶端元件。
  • SearchFilter 處理只能在客戶端上發(fā)生的使用者互動(onChange 事件)。
  • ProductList 仍然是伺服器元件,在伺服器端取得資料。
  • 元件組合允許我們在適當(dāng)?shù)那闆r下混合伺服器和客戶端渲染。
  • 只有互動部分(SearchFilter)將 JavaScript 傳送到客戶端。
  • 資料密集的部分(包含產(chǎn)品的 ProductGrid)在伺服器上呈現(xiàn)。

結(jié)論(未來是伺服器優(yōu)先)

RSC 代表的不僅僅是一個新功能 - 它是我們建立 React 應(yīng)用程式時所傳達(dá)的範(fàn)例。將昂貴的運算和資料擷取轉(zhuǎn)移到伺服器,同時維護 React 的元件模型的能力是革命性的。

對於建立資料量大的應(yīng)用程式的團隊來說,RSC 提供了一條在不犧牲開發(fā)人員體驗的情況下獲得更好效能的途徑。隨著環(huán)境的成熟和更多函式庫與 RSC 相容,我預(yù)計這種模式將成為我們建立 React 應(yīng)用程式的預(yù)設(shè)方式。

分享您的經(jīng)驗

您開始在專案中使用 React Server 元件了嗎?我很樂意在下面的評論中聽到您的意見、挑戰(zhàn)和勝利。
如果本文幫助您更好地了解 RSC,請點贊,並且不要忘記關(guān)注我以更深入地了解現(xiàn)代系統(tǒng)。

關(guān)於作者

Ivan Duarte 是一位擁有自由職業(yè)經(jīng)驗的後端開發(fā)人員。他對網(wǎng)頁開發(fā)和人工智慧充滿熱情,並喜歡透過教學(xué)和文章分享他們的知識。在 X、Github 和 LinkedIn 上關(guān)注我,以獲取更多見解和更新。

? 訂閱我們的電子報

直接在收件匣中閱讀來自 ByteUp 的文章。

訂閱時事通訊,不要錯過。

? 立即訂閱 ?

以上是React 伺服器元件:演進的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

垃圾收集如何在JavaScript中起作用? 垃圾收集如何在JavaScript中起作用? Jul 04, 2025 am 12:42 AM

JavaScript的垃圾回收機制通過標(biāo)記-清除算法自動管理內(nèi)存,以減少內(nèi)存洩漏風(fēng)險。引擎從根對像出發(fā)遍歷並標(biāo)記活躍對象,未被標(biāo)記的則被視為垃圾並被清除。例如,當(dāng)對像不再被引用(如將變量設(shè)為null),它將在下一輪迴收中被釋放。常見的內(nèi)存洩漏原因包括:①未清除的定時器或事件監(jiān)聽器;②閉包中對外部變量的引用;③全局變量持續(xù)持有大量數(shù)據(jù)。 V8引擎通過分代回收、增量標(biāo)記、並行/並發(fā)回收等策略優(yōu)化回收效率,降低主線程阻塞時間。開發(fā)時應(yīng)避免不必要的全局引用、及時解除對象關(guān)聯(lián),以提升性能與穩(wěn)定性。

如何在node.js中提出HTTP請求? 如何在node.js中提出HTTP請求? Jul 13, 2025 am 02:18 AM

在Node.js中發(fā)起HTTP請求有三種常用方式:使用內(nèi)置模塊、axios和node-fetch。 1.使用內(nèi)置的http/https模塊無需依賴,適合基礎(chǔ)場景,但需手動處理數(shù)據(jù)拼接和錯誤監(jiān)聽,例如用https.get()獲取數(shù)據(jù)或通過.write()發(fā)送POST請求;2.axios是基於Promise的第三方庫,語法簡潔且功能強大,支持async/await、自動JSON轉(zhuǎn)換、攔截器等,推薦用於簡化異步請求操作;3.node-fetch提供類似瀏覽器fetch的風(fēng)格,基於Promise且語法簡單

JavaScript數(shù)據(jù)類型:原始與參考 JavaScript數(shù)據(jù)類型:原始與參考 Jul 13, 2025 am 02:43 AM

JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時復(fù)制副本,因此互不影響;引用類型如對象、數(shù)組和函數(shù)存儲的是內(nèi)存地址,指向同一對象的變量會相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助於編寫更穩(wěn)定可靠的代碼。

JavaScript時間對象,某人構(gòu)建了一個eactexe,在Google Chrome上更快的網(wǎng)站等等 JavaScript時間對象,某人構(gòu)建了一個eactexe,在Google Chrome上更快的網(wǎng)站等等 Jul 08, 2025 pm 02:27 PM

JavaScript開發(fā)者們,大家好!歡迎閱讀本週的JavaScript新聞!本週我們將重點關(guān)注:Oracle與Deno的商標(biāo)糾紛、新的JavaScript時間對象獲得瀏覽器支持、GoogleChrome的更新以及一些強大的開發(fā)者工具。讓我們開始吧! Oracle與Deno的商標(biāo)之爭Oracle試圖註冊“JavaScript”商標(biāo)的舉動引發(fā)爭議。 Node.js和Deno的創(chuàng)建者RyanDahl已提交請願書,要求取消該商標(biāo),他認(rèn)為JavaScript是一個開放標(biāo)準(zhǔn),不應(yīng)由Oracle

React與Angular vs Vue:哪個JS框架最好? React與Angular vs Vue:哪個JS框架最好? Jul 05, 2025 am 02:24 AM

選哪個JavaScript框架最好?答案是根據(jù)需求選擇最適合的。 1.React靈活自由,適合需要高度定制、團隊有架構(gòu)能力的中大型項目;2.Angular提供完整解決方案,適合企業(yè)級應(yīng)用和長期維護的大項目;3.Vue上手簡單,適合中小型項目或快速開發(fā)。此外,是否已有技術(shù)棧、團隊規(guī)模、項目生命週期及是否需要SSR也都是選擇框架的重要因素。總之,沒有絕對最好的框架,適合自己需求的就是最佳選擇。

立即在JavaScript中立即調(diào)用功能表達(dá)式(IIFE) 立即在JavaScript中立即調(diào)用功能表達(dá)式(IIFE) Jul 04, 2025 am 02:42 AM

IIFE(ImmediatelyInvokedFunctionExpression)是一種在定義後立即執(zhí)行的函數(shù)表達(dá)式,用於變量隔離和避免污染全局作用域。它通過將函數(shù)包裹在括號中使其成為表達(dá)式,並緊隨其後的一對括號來調(diào)用,如(function(){/code/})();。其核心用途包括:1.避免變量衝突,防止多個腳本間的命名重複;2.創(chuàng)建私有作用域,使函數(shù)內(nèi)部變量不可見;3.模塊化代碼,便於初始化工作而不暴露過多變量。常見寫法包括帶參數(shù)傳遞的版本和ES6箭頭函數(shù)版本,但需注意:必須使用表達(dá)式、結(jié)

什麼是緩存API?如何與服務(wù)人員使用? 什麼是緩存API?如何與服務(wù)人員使用? Jul 08, 2025 am 02:43 AM

CacheAPI是瀏覽器提供的一種緩存網(wǎng)絡(luò)請求的工具,常與ServiceWorker配合使用,以提升網(wǎng)站性能和離線體驗。 1.它允許開發(fā)者手動存儲如腳本、樣式表、圖片等資源;2.可根據(jù)請求匹配緩存響應(yīng);3.支持刪除特定緩存或清空整個緩存;4.通過ServiceWorker監(jiān)聽fetch事件實現(xiàn)緩存優(yōu)先或網(wǎng)絡(luò)優(yōu)先等策略;5.常用於離線支持、加快重複訪問速度、預(yù)加載關(guān)鍵資源及後臺更新內(nèi)容;6.使用時需注意緩存版本控制、存儲限制及與HTTP緩存機制的區(qū)別。

處理諾言:鏈接,錯誤處理和承諾在JavaScript中 處理諾言:鏈接,錯誤處理和承諾在JavaScript中 Jul 08, 2025 am 02:40 AM

Promise是JavaScript中處理異步操作的核心機制,理解鍊式調(diào)用、錯誤處理和組合器是掌握其應(yīng)用的關(guān)鍵。 1.鍊式調(diào)用通過.then()返回新Promise實現(xiàn)異步流程串聯(lián),每個.then()接收上一步結(jié)果並可返回值或Promise;2.錯誤處理應(yīng)統(tǒng)一使用.catch()捕獲異常,避免靜默失敗,並可在catch中返回默認(rèn)值繼續(xù)流程;3.組合器如Promise.all()(全成功才成功)、Promise.race()(首個完成即返回)和Promise.allSettled()(等待所有完成)

See all articles