SSR vs SSG:前端渲染模式終極對決(附 Next.js/Nuxt.js 實戰案例)

一、引言:前端渲染模式的進化之路

隨著互聯網的發展,用戶對于網頁的加載速度和交互體驗要求越來越高。前端渲染技術作為影響網頁性能的關鍵因素,也在不斷地發展和演進。從最初的客戶端渲染(CSR),到后來的服務器端渲染(SSR),再到現在的靜態站點生成(SSG),每一次技術的變革都為網頁性能的提升帶來了新的突破。在實際開發中,選擇合適的渲染模式對于項目的成功至關重要。不同的渲染模式有著各自的優缺點和適用場景,開發者需要根據項目的具體需求和特點來做出選擇。

作為前端開發者,你是否遇到過這樣的靈魂拷問:

  • 為什么電商網站的首屏加載比博客慢?
  • 為什么靜態文檔站的 SEO 排名總是高于動態系統?
  • 為什么有的項目構建時間長達數小時?

這些問題的核心都指向一個關鍵技術點:頁面渲染模式的選擇

在 Web 性能與 SEO 需求日益增長的今天,前端渲染技術從早期的 CSR(客戶端渲染)逐步衍生出 SSR(服務器端渲染)和 SSG(靜態站點生成)兩大主流方案。本文將深度解析 SSR 與 SSG 的核心差異,結合 Next.js 和 Nuxt.js 實戰案例,助你快速掌握不同場景下的最優渲染策略。

二、核心概念解析:從渲染原理到技術實現

(一)SSR:動態內容的服務端實時渲染

SSR,即 Server-Side Rendering(服務器端渲染) ,在用戶請求時由服務器動態生成完整 HTML 頁面,將渲染后的內容直接返回給客戶端。以一個電商商品詳情頁為例,當用戶請求某商品頁面時,服務器會即刻從數據庫獲取該商品的詳細信息,包括商品名稱、價格、描述、圖片等 ,然后使用這些數據在服務端完成頁面組件的渲染,將其轉化為 HTML 字符串,再發送給用戶的瀏覽器。在這個過程中,瀏覽器只需解析服務器返回的 HTML,就能快速展示頁面內容,無需等待大量 JavaScript 腳本下載和執行后才進行渲染。核心流程包括:服務端數據獲取→組件渲染→HTML 字符串生成→客戶端 hydration 激活交互。

SSR 具有諸多技術優勢,首先是首屏加載速度快,直接返回預渲染的 HTML,無需等待客戶端 JS 執行,極大地提升了用戶體驗,減少了用戶等待時間,特別是對于網絡狀況不佳或設備性能較弱的用戶。以新聞資訊平臺為例,用戶能更快看到最新的新聞內容,無需長時間等待頁面加載 。其次,SSR 對 SEO 友好,搜索引擎爬蟲在抓取頁面時,可直接獲取服務端生成的完整內容,不像客戶端渲染那樣,爬蟲可能因無法執行 JavaScript 而抓取不到關鍵信息,這有助于提高網站在搜索引擎結果頁面中的排名。最后,客戶端負載低,復雜數據處理與渲染由服務器承擔,降低了對客戶端設備性能的要求,使頁面在各種設備上都能流暢展示。

然而,SSR 也存在一些局限性。一方面,服務器壓力大,每次請求均需重新渲染,當并發量高時,服務器需要同時處理大量的渲染任務,容易成為性能瓶頸,可能導致響應變慢甚至服務器崩潰。另一方面,開發復雜度高,需處理服務端與客戶端環境差異,比如瀏覽器 API 依賴,許多在客戶端瀏覽器中可用的 API 在服務端環境中并不存在,開發者需要額外的處理邏輯來確保代碼在不同環境下都能正常運行,這增加了開發和調試的難度。

(二)SSG:構建時預生成靜態頁面的性能利器

SSG,也就是 Static Site Generation(靜態站點生成) ,在構建階段通過數據模板生成靜態 HTML 文件,部署后直接返回靜態資源。例如一個技術博客,在構建過程中,構建工具會讀取博客文章的 Markdown 文件以及相關配置信息,然后結合預定義的頁面模板,將每篇文章渲染成對應的 HTML 頁面,并生成相關的 CSS、JavaScript 等靜態資源。當用戶訪問博客時,服務器或 CDN 直接將這些預先生成的靜態文件返回給用戶。核心流程包括:構建期數據拉取→模板渲染→靜態文件輸出→CDN 高效分發。

SSG 的技術優勢十分顯著。其具有極致性能,靜態文件可直接通過 CDN 緩存,響應速度達毫秒級,用戶幾乎能瞬間加載頁面,極大地提高了用戶體驗。安全性高,由于無動態執行邏輯,減少了服務器攻擊面,降低了被攻擊的風險。部署簡單,無需復雜服務端環境,支持低成本靜態托管,像 GitHub Pages 等平臺都能輕松托管 SSG 生成的網站,降低了運維成本和技術門檻。

不過,SSG 也并非完美無缺。其動態性不足,無法實時展示用戶個性化數據或實時更新內容,對于需要頻繁更新數據的應用場景不太適用,如電商實時訂單狀態展示。構建時間長也是一個問題,對于大規模站點,包含大量頁面和數據時,構建過程可能會耗費較長時間,影響開發和部署效率,需要優化構建流程以避免性能損耗,比如采用增量構建等技術。

三、深度對比:從技術指標到適用場景

(一)核心指標對比表

為了更直觀地了解 SSR 和 SSG 的差異,我們整理了以下核心指標對比表:

維度

SSR

SSG

渲染時機

請求時動態生成

構建時預生成

首屏速度

快(依賴服務器性能)

極快(靜態文件直接加載)

SEO 支持

優秀(動態內容完整渲染)

優秀(靜態 HTML 可直接抓取)

動態性

強(支持實時數據與用戶交互)

弱(僅支持構建時數據)

服務器壓力

高(每次請求需渲染)

低(僅需處理靜態文件請求)

典型場景

電商、社交平臺、儀表盤

博客、官網、文檔類網站

(二)關鍵技術差異解析

  1. 數據獲取時機:SSR 在請求時通過 API 實時獲取數據(如 Next.js 中的 getServerSideProps 函數 ),以一個實時更新數據的股票交易頁面為例,用戶每次請求頁面時,服務器會調用金融數據 API,獲取最新的股票價格、漲跌幅等數據 ,并使用這些數據實時渲染頁面,確保用戶看到的是最新的股票行情。而 SSG 在構建階段通過靜態數據源(如 CMS 接口、本地文件)預取數據(如 Next.js 中的 getStaticProps 函數),對于一個內容管理系統驅動的博客,在構建過程中,構建工具會從 CMS 接口獲取所有博客文章的標題、摘要、正文等信息,然后使用這些數據生成靜態 HTML 頁面。
  1. 交互激活方式:SSR 返回的 HTML 需通過客戶端 JavaScript 進行 hydration 激活交互,當用戶訪問一個 SSR 渲染的頁面時,瀏覽器首先會解析服務器返回的 HTML,快速展示頁面內容 ,然后 JavaScript 腳本開始加載和執行,它會將服務器端渲染的靜態 HTML 轉化為可交互的動態頁面,為頁面添加事件監聽器等交互功能。SSG 頁面若需動態交互,需額外集成 CSR 組件(如 React 客戶端組件),假設一個 SSG 生成的電商產品展示頁面,產品的基本信息如圖片、名稱、價格等是在構建時生成的靜態內容 ,但當用戶點擊 “加入購物車” 按鈕時,這個交互功能需要通過集成 React 客戶端組件來實現,該組件會在客戶端執行,處理用戶的交互操作,并與后端進行通信。
  1. 更新機制:SSR 天然支持實時更新,由于每次請求都在服務器端重新渲染,所以只要數據源有更新,用戶就能獲取到最新內容,如一個實時新聞網站,新的新聞稿件發布后,用戶刷新頁面就能看到最新的新聞內容。SSG 需通過增量靜態再生(ISR,Incremental Static Regeneration)實現定時或按需重建靜態頁面,以一個使用 SSG 構建的電商產品目錄網站為例,通過配置 ISR,當有新產品上架或產品信息更新時,系統可以在用戶請求時,根據設定的規則(如每小時更新一次 ),重新生成相關的靜態頁面,而無需重新構建整個網站,確保用戶看到的產品信息相對及時準確。

四、實戰案例:Next.js 與 Nuxt.js 的最佳實踐

(一)Next.js 實戰:React 生態的渲染全能框架

Next.js 作為 React 生態中支持 SSR 與 SSG 的代表性框架,憑借其強大的數據獲取與路由功能,成為構建高性能 Web 應用的首選之一 。接下來,我們將通過具體案例深入探討其在不同渲染模式下的應用。

1. SSG 實現:構建高性能博客頁面

對于博客類應用,SSG 模式能夠充分發揮其性能優勢,快速生成靜態頁面并借助 CDN 實現高效分發 。

  • 步驟解析
    • 創建 Next.js 項目并定義頁面組件:使用npx create-next-app@latest my - blog命令快速搭建項目,在pages目錄下創建index.js作為首頁組件,通過 React 組件語法定義頁面結構與樣式 ,展示博客文章列表。例如:
import Link from 'next/link';
import styles from '../styles/Home.module.css';export default function Home({ posts }) {return (<div className={styles.container}><h1 className={styles.title}>我的技術博客</h1><ul className={styles.list}>{posts.map((post) => (<li key={post.id} className={styles.listItem}><Link href={`/posts/${post.id}`}>{post.title}</Link></li>))}</ul></div>);
}
  • 使用 getStaticProps 在構建期獲取博客數據:在index.js中定義getStaticProps函數,通過 API 或本地數據源(如 JSON 文件)獲取博客文章列表數據,返回的數據將作為 props 傳遞給組件 。假設我們從一個模擬 API 獲取數據:
export async function getStaticProps() {const res = await fetch('https://api.example.com/posts');const posts = await res.json();return {props: {posts}};
}
  • 通過 getStaticPaths 配置動態路由生成規則:若博客文章詳情頁為動態路由,如/posts/[id],則需在pages/posts/[id].js中定義getStaticPaths函數,返回所有文章的 id 列表,Next.js 會根據這些 id 生成對應的靜態頁面 。示例代碼如下:
export async function getStaticPaths() {const res = await fetch('https://api.example.com/posts');const posts = await res.json();const paths = posts.map((post) => ({ params: { id: post.id.toString() } }));return { paths, fallback: false };
}
  • pages/posts/[id].js中定義文章詳情頁組件及getStaticProps函數:獲取對應文章的詳細數據并渲染,如下:
import Link from 'next/link';
import styles from '../styles/Post.module.css';export default function Post({ post }) {return (<div className={styles.container}><h1 className={styles.title}>{post.title}</h1><p className={styles.content}>{post.content}</p><Link href="/" className={styles.backLink}>返回首頁</Link></div>);
}export async function getStaticProps({ params }) {const res = await fetch(`https://api.example.com/posts/${params.id}`);const post = await res.json();return {props: {post}};
}
  • 優化點
    • 啟用 ISR 實現定期更新:對于時效性較高的博客數據,可在getStaticProps中配置revalidate參數,如revalidate: 86400,表示每 24 小時(86400 秒)重建靜態頁面,確保用戶看到相對最新的內容 。
    • 配合 next/image 優化圖片加載性能:在博客文章中使用next/image組件替代原生<img>標簽,它提供了自動優化、懶加載等功能,可有效提升圖片加載速度與用戶體驗 。例如:
import Image from 'next/image';function Post({ post }) {return (<div><Imagesrc={post.imageUrl}alt={post.imageAlt}width={800}height={600}quality={75}/><h1>{post.title}</h1><p>{post.content}</p></div>);
}
2. SSR 實現:動態用戶儀表盤

在需要實時展示用戶個性化數據的場景中,如用戶儀表盤,SSR 模式可確保每次請求都返回最新數據 。

  • 核心配置
    • 使用 getServerSideProps 在請求時獲取用戶實時數據:在儀表盤頁面組件對應的文件(如pages/dashboard.js)中定義getServerSideProps函數,通過用戶認證信息(如 JWT 令牌)從后端 API 獲取用戶專屬的實時數據,如訂單狀態、賬戶余額等 。示例代碼如下:
export async function getServerSideProps(context) {const token = context.req.cookies.token;const res = await fetch('https://api.example.com/dashboard', {headers: {Authorization: `Bearer ${token}`}});const data = await res.json();return {props: {userData: data}};
}export default function Dashboard({ userData }) {return (<div><h1>用戶儀表盤</h1><p>賬戶余額: {userData.balance}</p><p>待處理訂單: {userData.pendingOrders.length}</p>{/* 其他數據展示 */}</div>);
}
  • 性能優化
    • 采用流式渲染(Streaming)分塊返回 HTML,提升首屏渲染速度:Next.js 支持流式渲染,服務器可將生成的 HTML 逐步發送給客戶端,而無需等待整個頁面渲染完成,讓用戶能更快看到頁面內容,減少白屏時間 。
    • 結合 SWR(Stale - While - Revalidate)緩存策略減少重復請求:引入swr庫,在客戶端緩存數據,當用戶頻繁刷新頁面時,先展示緩存數據,同時在后臺重新驗證和更新數據,避免重復向服務器發起相同請求,提升用戶交互體驗 。例如:
import useSWR from'swr';function Dashboard() {const { data: userData, error } = useSWR('/api/dashboard', () =>fetch('/api/dashboard').then((res) => res.json()));if (error) return <div>加載數據出錯</div>;if (!userData) return <div>加載中...</div>;return (<div><h1>用戶儀表盤</h1><p>賬戶余額: {userData.balance}</p><p>待處理訂單: {userData.pendingOrders.length}</p>{/* 其他數據展示 */}</div>);
}

(二)Nuxt.js 實戰:Vue 生態的 SSR/SSG 一體化方案

Nuxt.js 作為 Vue 生態中專注于 SSR 與 SSG 的框架,通過簡潔的配置和強大的插件系統,為開發者提供了高效的全棧開發體驗 。下面我們將通過實際案例展示其在不同場景下的應用。

1. SSG 實現:企業官網靜態化

對于企業官網這類內容相對固定、對加載速度和 SEO 要求較高的項目,SSG 模式是理想選擇 。

  • 關鍵配置
    • 在 nuxt.config.js 中啟用 SSG 模式并指定預渲染路由:在nuxt.config.js文件中,設置generate選項,配置routes數組指定需要預渲染的頁面路徑,如首頁、關于我們、產品列表等 。示例配置如下:
export default {generate: {routes: ['/','/about','/products']}
};
  • 使用 asyncData 或 useAsyncData 獲取構建期數據:在頁面組件中,通過asyncData(Nuxt2)或useAsyncData(Nuxt3)函數從 API、CMS 系統或本地文件中獲取數據,用于構建靜態頁面 。以/products頁面為例,在pages/products.vue中:
<template><div><h1>產品列表</h1><ul><li v - for="product in products" :key="product.id">{{ product.name }} - {{ product.price }}</li></ul></div>
</template><script>
export default {async asyncData({ $axios }) {const res = await $axios.$get('https://api.example.com/products');return {products: res.data};}
};
</script>
  • 部署方案
    • 生成的靜態文件可直接部署到 Netlify、Vercel 等靜態托管平臺:運行nuxt generate命令生成靜態文件,這些文件可輕松部署到 Netlify、Vercel 等平臺,利用其全球 CDN 加速網絡,實現快速的內容分發 。
    • 配合 CDN 緩存策略提升全球訪問速度:通過配置 CDN 緩存規則,將靜態文件緩存到離用戶最近的節點,進一步減少頁面加載時間,提升用戶體驗 。例如,在 Netlify 中可通過配置文件設置緩存過期時間等參數 。
2. SSR 實現:多語言電商平臺

在多語言電商平臺中,需要實時處理用戶請求、切換語言并展示本地化數據,SSR 模式能很好地滿足這些需求 。

  • 核心技術點
    • 利用 Nuxt.js 內置的服務器端路由和狀態管理:通過nuxt.config.js中的router配置定義多語言路由規則,如/en/products、/zh/products等,結合 Vuex(Nuxt2)或 Pinia(Nuxt3)進行狀態管理,存儲用戶選擇的語言、購物車數據等 。示例router配置如下:
export default {router: {middleware: 'i18n',extendRoutes(routes, resolve) {routes.push({name: 'products - en',path: '/en/products',component: resolve(__dirname, 'pages/products.vue')});routes.push({name: 'products - zh',path: '/zh/products',component: resolve(__dirname, 'pages/products.vue')});// 其他語言路由}}
};
  • 通過中間件實現語言切換與數據本地化:創建middleware/i18n.js中間件,根據用戶請求頭或 cookie 中的語言信息,動態切換語言并獲取對應語言的數據 。例如:
export default function ({ app, route, redirect }) {const lang = app.$cookies.get('lang') || 'en';app.i18n.setLocale(lang);if (route.path.startsWith('/en') && lang!== 'en') {return redirect('/en' + route.fullPath.replace('/en', ''));}if (route.path.startsWith('/zh') && lang!== 'zh') {return redirect('/zh' + route.fullPath.replace('/zh', ''));}
}
  • SEO 優化
    • 使用 nuxt/head 組件動態設置頁面元信息:在頁面組件中,通過nuxt/head組件根據不同語言和頁面內容動態設置title、description、keywords等元信息,提高搜索引擎排名 。例如在pages/products.vue中:
<template><div><!-- 頁面內容 --></div>
</template><script>
export default {head() {return {title: this.$t('products.title'),description: this.$t('products.description'),meta: [{hid: 'keywords',name: 'keywords',content: this.$t('products.keywords')}]};}
};
</script>
  • 確保服務端渲染的 HTML 包含完整多語言內容:在 SSR 過程中,保證生成的 HTML 包含所有語言版本的關鍵內容,以便搜索引擎爬蟲能夠正確抓取和索引,提升多語言頁面的 SEO 效果 。

五、選型指南:如何選擇正確的渲染模式

(一)場景驅動的決策模型

  1. 內容型網站(博客 / 官網):對于內容型網站,如個人博客、企業官網等,內容更新頻率相對較低,對頁面加載速度和 SEO 要求較高。這種情況下,首選 SSG 模式,它能在構建時生成靜態頁面,借助 CDN 實現快速分發,極大提升頁面加載速度,同時滿足搜索引擎對內容抓取的需求 。例如,一個技術博客采用 SSG 模式構建,使用 Next.js 框架,在構建階段通過getStaticProps函數從 Markdown 文件或內容管理系統中獲取文章數據,生成靜態 HTML 頁面。對于偶爾更新的內容,可搭配 ISR(增量靜態再生)技術,通過設置revalidate參數,定時或在數據變化時重新生成相關頁面,確保用戶能獲取到最新內容 ,兼顧了性能與 SEO。
  1. 動態交互平臺(電商 / 社交):在電商、社交平臺等動態交互性強的應用中,不同頁面的需求差異較大。核心頁面,如電商的首頁、商品詳情頁,以及社交平臺的首頁等,既需要快速的首屏加載速度,以提升用戶體驗,又需要良好的 SEO 表現,以便在搜索引擎中獲得更高的排名,吸引更多流量 。此時,采用 SSR 模式較為合適,它能在用戶請求時實時獲取最新數據并渲染頁面,滿足這些頁面的需求。而對于交互復雜、數據變化頻繁且對 SEO 要求相對較低的頁面,如電商的購物車頁面、用戶個人中心頁面,以及社交平臺的聊天頁面等,結合 CSR(客戶端渲染)模式能更好地發揮其優勢 。CSR 模式下,頁面在客戶端進行渲染,可實現更流暢的交互體驗,通過前端框架(如 React、Vue)的狀態管理和組件化機制,能方便地處理用戶交互和數據更新,減少不必要的服務器請求。
  1. 混合場景(內容 + 動態功能):當項目同時包含內容展示和動態交互功能時,單一的渲染模式往往無法滿足需求。此時,可采用 Next.js 或 Nuxt.js 提供的混合渲染模式 。以一個兼具內容發布和用戶交互功能的知識社區為例,文章詳情頁面、分類頁面等靜態內容較多的部分,使用 SSG 模式生成,在構建階段獲取文章數據并生成靜態 HTML,利用 CDN 快速分發 。而用戶評論區、點贊、收藏等動態交互模塊,采用 SSR 模式處理,在用戶請求時實時獲取和更新數據,確保交互的實時性和數據的一致性 。通過這種混合渲染模式,既能充分發揮 SSG 的高性能優勢,又能滿足 SSR 對動態交互的支持,實現了性能與功能的平衡。

(二)性能與成本平衡

  1. 服務器資源有限:如果服務器資源有限,如小型創業公司或個人項目,為了降低服務器負載,優先考慮 SSG 模式 。SSG 模式在構建時生成靜態文件,服務器只需提供靜態文件服務,無需在運行時進行復雜的渲染操作,大大減輕了服務器的壓力 。若項目中存在部分動態內容,又不得不使用 SSR 時,可以結合緩存技術(如 Redis)來減少重復渲染 。將 SSR 生成的頁面緩存到 Redis 中,當有相同請求時,直接從緩存中獲取頁面,避免重復渲染,提高響應速度,同時降低服務器資源消耗 。
  1. 高頻更新需求:對于高頻更新需求的應用,如實時新聞平臺、股票交易網站等,SSR 模式能更好地滿足實時數據展示的要求 。為了提升效率,可采用增量渲染技術,如 React Server Components 。它允許服務器將部分組件渲染為靜態 HTML,在客戶端進行增量更新,減少不必要的重新渲染,提高頁面更新速度 。同時,結合高效的數據緩存和更新策略,如 SWR(Stale - While - Revalidate),在客戶端緩存數據,當數據更新時,先展示緩存數據,同時在后臺更新真實數據,確保用戶能快速看到最新內容,提升用戶體驗 。

六、未來趨勢:渲染技術的融合與創新

(一)混合渲染架構普及

隨著前端框架的不斷演進,Next.js 13 + 的 App Router 帶來了重大變革,支持 Server Components 與 Client Components 混合使用 ,這使得 SSG/SSR/CSR 可在同一項目中靈活組合。以一個綜合性的電商應用為例,首頁和商品列表頁可以采用 SSG 模式,在構建時生成靜態頁面,利用 CDN 快速分發,提升加載速度 。而商品詳情頁,由于可能需要實時展示庫存、價格波動等動態信息,可使用 SSR 模式,在用戶請求時實時獲取最新數據并渲染 。對于用戶交互頻繁的購物車、訂單確認等頁面,結合 CSR 模式,通過客戶端 JavaScript 實現流暢的交互體驗 。這種混合渲染架構能夠根據不同頁面的需求,充分發揮各種渲染模式的優勢,為用戶提供更優質的體驗。

(二)邊緣渲染興起

邊緣渲染結合 Edge Functions(如 Vercel Edge Runtime),將 SSR/SSG 的執行節點從傳統服務器擴展到 CDN 邊緣節點 。當用戶請求一個頁面時,不再需要等待請求傳輸到源服務器進行處理,而是直接在離用戶最近的 CDN 邊緣節點執行渲染操作 。以全球知名的內容分享平臺為例,其擁有來自世界各地的龐大用戶群體,通過采用邊緣渲染技術,在全球多個 CDN 邊緣節點部署渲染邏輯,當歐洲用戶請求頁面時,位于歐洲的 CDN 邊緣節點直接執行 SSR/SSG 操作,將渲染后的頁面快速返回給用戶 ,大大降低了延遲,提升了全球用戶的訪問體驗,尤其對于跨國訪問場景,優勢更為明顯。

(三)靜態優先策略

隨著 Jamstack 架構的流行,SSG 成為默認選擇 。這種架構強調前端與后端的解耦,通過預渲染和緩存靜態資源來提高性能 。在一個以內容為主的電商官網中,產品展示頁面、品牌故事頁面等內容相對固定的部分,采用 SSG 模式生成靜態頁面,利用 CDN 的緩存和分發優勢,實現快速加載 。對于需要動態交互的部分,如用戶登錄、添加商品到購物車等操作,通過 API 調用獲取實時數據或結合客戶端渲染來補充 。這種 “靜態為主,動態為輔” 的高效架構,既能滿足網站對性能的要求,又能靈活處理動態需求,在提升用戶體驗的同時,降低了開發和運維成本。

七、總結:選擇適合你的渲染 “武器”

SSR 與 SSG 并非非此即彼的競爭關系,而是互補的技術方案。通過理解兩者的核心差異(渲染時機、數據處理、適用場景),結合 Next.js/Nuxt.js 等現代框架的高效工具鏈,開發者可根據項目需求精準選擇,在性能、SEO、開發成本之間找到最佳平衡點。未來,隨著前端生態的持續演進,混合渲染與邊緣計算將推動前端渲染技術邁向新高度。

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

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

相關文章

算法筆記.分解質因數

代碼實現&#xff1a; #include<iostream> using namespace std; void breakdown(int x) {int t x;for(int i 2;i < x/i;i){if(t%i 0){int counts 0;while(t % i 0){t/i;counts;}cout << i <<" "<< counts<<endl;}}if(t >…

CUDA Error: the provided PTX was compiled with an unsupported toolchain

CUDA程序編譯時生成的PTX代碼與系統上的CUDA驅動版本不兼容 CUDA 編譯器版本&#xff1a; CUDA 12.6 (nvcc 編譯器版本) CUDA 驅動版本&#xff1a; CUDA 12.3 (nvidia-smi 驅動版本) 解決方法&#xff1a; 驅動版本下載參考&#xff1a;Your connected workspace for wiki…

計算機組成原理實驗(7) 堆指令部件模塊實驗

實驗七 堆指令部件模塊實驗 一、實驗目的 1、掌握指令部件的組成方式。 2、熟悉指令寄存器的打入操作&#xff0c;PC計數器的設置和加1操作&#xff0c;理解跳轉指令的實現過程。 二、實驗要求 按照實驗步驟完成實驗項目&#xff0c;掌握數據打入指令寄存器IR1、PC計數器的…

2022 年 6 月大學英語四級考試真題(第 2 套)——閱讀版——仔細閱讀題

&#x1f3e0;個人主頁&#xff1a;fo安方的博客? &#x1f482;個人簡歷&#xff1a;大家好&#xff0c;我是fo安方&#xff0c;目前中南大學MBA在讀&#xff0c;也考取過HCIE Cloud Computing、CCIE Security、PMP、CISP、RHCE、CCNP RS、PEST 3等證書。&#x1f433; &…

磁盤文件系統

磁盤文件系統 一、磁盤結構1.1 認識一下基礎的硬件設備以及真實的機房環境1.2 磁盤物理結構與存儲結構1、磁盤物理結構2、磁盤的存儲結構3、CHS地址定位4、磁盤的邏輯結構&#xff08;LBA&#xff09;5 磁盤真實過程5 CHS && LBA地址 二、理解分區、格式化1 引?"…

基于LangChain 實現 Advanced RAG-后檢索優化(下)-上下文壓縮與過濾

摘要 Advanced RAG 的后檢索優化&#xff0c;是指在檢索環節完成后、最終響應生成前&#xff0c;通過一系列策略與技術對檢索結果進行深度處理&#xff0c;旨在顯著提升生成內容的相關性與質量。在這些優化手段中&#xff0c;上文壓縮與過濾技術是提升檢索結果質量的重要手段。…

為什么 Vite 速度比 Webpack 快?

一、webpack會先進行編譯&#xff0c;再運行&#xff0c;vite會直接啟動&#xff0c;再按需編譯文件。 首先看兩張圖&#xff0c;可以清晰的看到&#xff0c;上面的圖是webpack編譯過的&#xff0c;而下面的圖是vite直接使用工程內文件。 二、區別于Webpack先打包的方式&am…

C# 操作符

C# 操作符 一、操作符概覽二、優先級與運算順序三、各類操作符的實例 一、操作符概覽 操作符&#xff08;運算符&#xff09;的本質是函數的簡記法 操作符不能脫離與它關聯的數據類型 int x 5; int y 4; int z x / y; Console.WriteLine(z);//輸出1double a 5.0; double b…

C++設計模式:面向對象的八大設計原則之四

里氏替換原則&#xff08;Liskov Substitution Principle&#xff0c;LSP&#xff09;是面向對象設計中的一個重要原則&#xff0c;它指出子類必須能夠替換它的基類&#xff0c;并且程序的行為不會發生改變。也就是說&#xff0c;在任何使用基類對象的地方&#xff0c;都可以透…

網絡通信領域的基礎或流行協議

一、TCP(傳輸控制協議) 1. 宏觀介紹 TCP:全稱“Transmission Control Protocol”——傳輸控制協議,是互聯網最基礎的傳輸協議之一。傳輸層協議,提供面向連接、可靠的字節流傳輸服務。它通過三次握手建立連接、四次揮手斷開連接,確保數據有序、完整地傳輸作用:讓兩個設備…

【教學類-34-10】20250503(通義萬相)4*3蝴蝶拼圖(圓形、三角、正方、半圓的凹凸小塊+參考圖灰色)

背景需求 2023年從網站上搜索拼圖代碼,陸續改良了圓形、三角形、菱形凹凸) 【教學類-34-05】20230425拼圖(“圓角”凹凸拼圖)3*4格子(中班主題《個別化拼圖》偏美術)_拼圖的槽叫什么形狀-CSDN博客文章瀏覽閱讀1.1k次。【教學類-34-05】20230425拼圖(“圓角”凹凸拼圖)…

bellard.org? : QuickJS 如何使用 qjs 執行 js 腳本

參閱上一篇&#xff1a;Fabrice Bellard&#xff08;個人網站&#xff1a;?bellard.org?&#xff09;介紹 Fabrice Bellard&#xff08;個人網站&#xff1a;?bellard.org?&#xff09;是計算機領域最具影響力的程序員之一&#xff0c;其貢獻跨越多個技術領域并持續推動開…

數據結構---

案例一 1.隨機生成n個工人工時&#xff0c;100以內&#xff0c;工號分別為2021101到2021100n 2.以工時數為關鍵字分別使用選擇排序、冒泡排序、插入排序進行升序排序。 3.把排序后的結果輸出&#xff0c;包括工號工時數 4.比較三種算法對相同的n值數組排序所花的時間 代碼如下&…

Python硬核革命:從微控制器到FPGA的深度開發指南

1. 重新定義硬件開發:Python的顛覆性突破 傳統硬件開發長期被C/C++和Verilog/VHDL統治,但Python正通過兩條路徑改變這一格局: 1.1 微控制器領域的MicroPython革命 完整Python 3.4語法支持,運行在資源受限的MCU上(最低要求:64KB ROM,16KB RAM) 直接內存訪問能力,突破…

基于springboot+vue的寵物共享平臺

開發語言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服務器&#xff1a;tomcat7數據庫&#xff1a;mysql 5.7數據庫工具&#xff1a;Navicat12開發軟件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.3.9 系統展示 寵物寄養管理 寵…

day 11 超參數調整

一、內參與外參&#xff08;超參數&#xff09; 內參是模型為了適應訓練數據而自動調整的&#xff0c;是模型內部與訓練數據緊密相關的因素&#xff0c;不同的訓練數據會導致模型學習到不同的參數值&#xff0c;這些參數在模型訓練完成后就固定下來。 超參數是在模型訓練前需…

快速搭建對象存儲服務 - Minio,并解決臨時地址暴露ip、短鏈接請求改變瀏覽器地址等問題

其他文章 服務容錯治理框架resilience4j&sentinel基礎應用---微服務的限流/熔斷/降級解決方案-CSDN博客 conda管理python環境-CSDN博客 快速搭建對象存儲服務 - Minio&#xff0c;并解決臨時地址暴露ip、短鏈接請求改變瀏覽器地址等問題-CSDN博客 大模型LLMs的MCP入門-…

樸素貝葉斯分類器

樸素貝葉斯分類器 樸素貝葉斯是一種基于密度估計的分類算法&#xff0c;它利用貝葉斯定理進行預測。該算法的核心假設是在給定類別的情況下&#xff0c;各個特征之間是條件獨立的&#xff0c;盡管這一假設在現實中通常不成立&#xff0c;但樸素貝葉斯分類器依然能夠生成對有偏…

在 Trae CN IDE 中配置 Python 3.11的指南

在 Trae CN IDE 中配置 Python 3.11的指南 下載 python 3.11 安裝 Python 3.11 首先&#xff0c;我們需要確保安裝了 Python 3.11。可以從Python 官方網站下載適合你操作系統的版本。 鏈接 如果你已經安裝了 Python 3.11&#xff0c;可以通過以下命令確認&#xff1a; 文…

MQTT 協議與 HTTP 協議的區別

在現代的網絡通信中&#xff0c;MQTT 協議和 HTTP 協議都扮演著重要的角色&#xff0c;但它們有著不同的特點和適用場景。下面我們就從多個方面來詳細探討它們之間的區別。 一.協議設計理念 1. MQTT 協議 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;即…