当前位置: 首页 > news >正文

Next.js渲染模式:SSR、SSG与ISR揭秘


Next.js 核心渲染模式深度解析:SSR、SSG 与 ISR

在构建现代 Web 应用时,性能和用户体验是至关重要的考量。Next.js 作为 React 生态中一个备受推崇的框架,其强大的服务端渲染(SSR)、静态站点生成(SSG)和增量静态再生(ISR)能力,为开发者提供了灵活多样的渲染策略,以应对不同场景下的性能需求。

本文将深入剖析这三种核心渲染模式,详细分析它们的工作原理、优缺点以及适用场景,并辅以图解,帮助你更好地理解和选择最适合你的渲染策略。


1. SSR (Server-Side Rendering) - 服务端渲染

工作原理

SSR 的核心思想是在用户每次请求时,由服务器动态生成完整的 HTML 页面,然后发送给浏览器。浏览器接收到的是一个包含了所有内容的、可直接渲染的 HTML 文件,而不是一个空的 HTML 文件和一堆 JavaScript 文件。

  1. 用户请求:浏览器向服务器发送页面请求。
  2. 数据获取:服务器接收到请求后,会立即执行页面组件中的数据获取函数(如 getServerSideProps)。
  3. 页面生成:服务器利用获取到的数据,在后台将 React 组件渲染成完整的 HTML 字符串。
  4. 响应发送:服务器将生成的 HTML 页面连同所需的 JavaScript 文件一起发送给浏览器。
  5. 浏览器渲染:浏览器接收到 HTML 后立即开始渲染,用户可以立刻看到页面内容。随后,JavaScript 文件加载完成,客户端接管页面,使其具备交互能力,这个过程称为Hydration (水合)

图解

优缺点

  • 优点
    • SEO 友好:搜索引擎爬虫可以轻松抓取到完整的页面内容,对 SEO 非常有利。
    • 数据实时性:每次请求都重新生成页面,确保数据是最新的。
    • 首屏加载速度快:用户能立即看到页面内容,无需等待 JavaScript 加载和执行。
  • 缺点
    • 服务器负载高:每个用户请求都会占用服务器计算资源,在高并发场景下可能造成服务器压力。
    • TTFB (Time to First Byte) 较长:服务器需要等待数据获取和页面生成完成后才能返回响应,导致首个字节的到达时间较长。

适用场景

  • 需要实时数据的页面:如电商网站的商品详情页、新闻网站的实时新闻页。
  • 登录后才能访问的页面:如用户个人主页、后台管理系统。
  • 对 SEO 要求极高的页面

2. SSG (Static Site Generation) - 静态站点生成

工作原理

SSG 是一种在**构建时(Build Time)**生成 HTML 文件的渲染模式。Next.js 会在 next build 阶段,预先生成所有页面的静态 HTML 文件,并将其部署到 CDN(内容分发网络)。当用户请求页面时,CDN 会直接返回预先生成的静态文件。

  1. 构建时:在 next build 阶段,Next.js 会执行 getStaticProps 函数来获取数据,并为每个页面路径生成静态 HTML 文件。
  2. 部署:生成的静态文件被部署到 CDN。
  3. 用户请求:浏览器向服务器发送页面请求。
  4. CDN 响应:CDN 接收到请求后,直接返回预先生成的静态 HTML 文件。
  5. 浏览器渲染:浏览器立即渲染页面,随后加载 JavaScript 并完成水合。

图解

优缺点

  • 优点
    • 极高的性能:页面由 CDN 直接提供,加载速度极快,几乎没有服务器端计算开销。
    • 低服务器负载:服务器只需在构建时工作,运行时几乎无压力。
    • SEO 友好:与 SSR 类似,页面内容在构建时就已经存在,易于被爬虫索引。
  • 缺点
    • 数据不实时:除非重新构建和部署,否则页面数据不会更新。
    • 构建时间长:如果页面数量巨大,构建过程可能会非常耗时。

适用场景

  • 内容不经常变动的页面:如博客文章、帮助文档、产品介绍页。
  • 对性能要求极高的网站:如官网、营销落地页。

3. ISR (Incremental Static Regeneration) - 增量静态再生

工作原理

ISR 是一种巧妙地结合了 SSRSSG 优势的模式。它允许你保持 SSG 的高性能,同时又能在不重新构建整个站点的情况下,对单个页面进行更新。

  1. 构建时:与 SSG 类似,Next.js 在构建时为页面生成一个静态 HTML 文件,并设置一个 revalidate 时间间隔(例如 60 秒)。
  2. 用户首次请求:用户请求页面时,CDN 返回这个静态文件。
  3. 过期后的请求:当 revalidate 时间间隔过去后,新的用户请求会触发以下过程:
    • 旧页面立即返回:CDN 立即向用户返回旧的、过期的静态 HTML 页面。
    • 后台重新生成:与此同时,Next.js 在后台悄悄地重新执行数据获取函数(getStaticProps),并生成一个新的 HTML 文件来替换旧文件。
    • 新页面生效:后续的用户请求将接收到这个新生成的页面。

图解

优缺点

  • 优点
    • 兼具 SSG 的高性能:页面请求依旧由 CDN 快速响应。
    • 数据更新灵活:无需重新构建整个项目,即可更新单个页面的数据。
    • 低服务器负载:只在后台按需重新生成页面,服务器压力远低于 SSR。
  • 缺点
    • 数据非完全实时:用户在 revalidate 时间间隔内可能会看到旧的数据。
    • 首次加载可能返回旧数据:在 revalidate 间隔后的首次请求,用户会短暂地看到旧页面。

适用场景

  • 需要定期更新的静态页面:如博客列表页、新闻列表页、产品目录。
  • 既需要高性能,又需要一定数据新鲜度的场景

总结与对比

特性SSR (Server-Side Rendering)SSG (Static Site Generation)ISR (Incremental Static Regeneration)
生成时机每次用户请求构建时 (next build)构建时 & 按需后台重新生成
数据实时性实时不实时 (除非重新构建)准实时 (有 revalidate 间隔)
性能依赖服务器响应速度,TTFB 较长极快,由 CDN 直接提供极快,由 CDN 直接提供,后台按需更新
服务器负载,每次请求都需计算极低,仅在构建时工作,仅在后台按需工作
适用场景登录后页面,动态内容,实时数据页面博客、文档、官网等内容不常更新的页面博客列表、产品目录等需要定期更新的静态页面

Next.js 的这三种渲染模式,并非互斥,而是可以混合使用的。例如,你可以将主页配置为 SSG 以获得最佳性能,将个人资料页配置为 SSR 以确保数据实时性,而博客列表页则使用 ISR 来平衡性能和数据新鲜度。

理解并熟练运用这些渲染模式,将是你构建高性能、可扩展的 Next.js 应用的关键。



好的,这是关于 Next.js 三种渲染模式 SSR、SSG、ISRMermaid 图解,可以直接嵌入到支持 Markdown 和 Mermaid 的文档或博客中。

1. SSR (Server-Side Rendering) - 服务端渲染

Response & Hydration
Server Process
User Request
发送 HTML 和 JS 文件
浏览器显示内容
JS 水合\n页面可交互
服务器接收请求
执行 `getServerSideProps`\n获取数据
生成完整 HTML 页面
请求页面
用户浏览器

说明: 每次用户请求都会触发服务器端的数据获取和 HTML 生成,确保了页面的实时性。


2. SSG (Static Site Generation) - 静态站点生成

Deployment & User Access
Build Time
部署到 CDN
用户浏览器请求页面
CDN 直接返回 HTML
开发者执行 `next build`
执行 `getStaticProps`\n获取数据
为每个页面生成静态 HTML

说明: 页面在构建时就已生成并部署到 CDN,因此用户访问时加载速度极快,但数据无法实时更新。


3. ISR (Incremental Static Regeneration) - 增量静态再生

Revalidation after `revalidate`
Build & Initial Access
用户再次访问\n`revalidate` 过期
CDN 立即返回旧 HTML
后台触发重新生成
生成新 HTML
CDN 更新文件
新用户获得新 HTML
开发者执行 `next build`
生成静态 HTML\n设置 `revalidate`
部署到 CDN
用户首次访问
CDN 返回旧 HTML

说明: ISR 结合了 SSG 的高性能和 SSR 的数据更新能力。在 revalidate 时间段内,用户获得旧的缓存页面;过期后,首个请求会触发后台更新,新页面将在下一次请求时生效。


SSG 构建流程深度解析

SSG 的核心思想是在开发阶段部署阶段一次性生成所有页面的静态 HTML 文件,而不是在用户请求时动态生成。这个过程完全由 Next.js 的构建工具链完成,确保了最终产物的极高性能和稳定性。

整个 SSG 流程可以分为以下几个关键步骤:
好的,我们来详细分解一下 Next.js 中 SSR (Server-Side Rendering) 的构建流程。


SSR 构建流程深度解析

SSR 的核心思想是在每次用户请求页面时,由服务器动态地生成完整的 HTML 页面,然后发送给浏览器。这个过程确保了用户总能获取到最新的数据,并且能够立即看到页面内容,这对于搜索引擎优化(SEO)和用户体验都至关重要。

整个 SSR 流程可以分为以下几个关键步骤:

1. 构建时(Build Time)

next build 阶段,Next.js 仍然会做一些准备工作,但它不会像 SSG 那样生成完整的静态 HTML 文件。相反,它会:

  • 编译代码: 将 React 组件、CSS 和其他资源编译成优化的 JavaScript Bundle。
  • 代码分割: 将代码拆分成小块,以加快页面加载速度。
  • 创建服务器端代码: 为每个使用 SSR 的页面创建服务器端执行的代码包,这些代码包含了页面组件和数据获取逻辑。

这个阶段,Next.js 只是为后续的运行时(Runtime)做好了准备。最终的 HTML 页面还没有被生成。

2. 用户请求(User Request)

当用户在浏览器中输入 URL 并按下回车时,SSR 的核心流程才真正开始。

  1. 浏览器发送请求: 浏览器向 Next.js 服务器发送一个页面请求。
  2. 服务器接收请求: Next.js 服务器接收到请求后,会识别出这是一个需要进行 SSR 的页面。
3. 服务器端执行 getServerSideProps

Next.js 服务器会立即在请求的上下文中执行页面组件中的 getServerSideProps 函数。

  • 实时数据获取: 这个函数会在每次请求时运行,确保获取到的数据是最新的。你可以在这里访问请求的 Headers、Cookies、URL 查询参数等,这在 SSG 中是不可能的。
  • 处理异步操作: 就像在客户端获取数据一样,getServerSideProps 是一个异步函数,它会等待数据获取完成后再继续。
// pages/post/[slug].jsexport async function getServerSideProps(context) {const { slug } = context.params;// 假设从 API 获取实时数据,例如最新评论数const res = await fetch(`https://.../api/posts/${slug}`);const post = await res.json();if (!post) {return {notFound: true,};}return {props: { post },};
}function Post({ post }) {// 使用 post 数据渲染页面return (<div><h1>{post.title}</h1><p>{post.content}</p></div>);
}export default Post;
4. 服务器端渲染 (Server-Side Rendering)

getServerSideProps 返回的数据会作为 props 传递给页面组件。Next.js 服务器利用这些数据,在服务器上执行 React 组件的渲染过程。

  • 生成 HTML: 服务器将 React 组件树转换成一个完整的 HTML 字符串。这个 HTML 字符串包含了所有的页面内容,而不仅仅是一个空的骨架。
  • 内联 CSS: Next.js 也会将必要的 CSS 代码内联到 <style> 标签中,以防止页面在加载时出现“闪烁”(FOUC - Flash of Unstyled Content)。
5. 响应和水合 (Response & Hydration)

服务器将生成的完整 HTML 页面,连同客户端所需的 JavaScript 文件一起,发送给浏览器。

  1. 浏览器渲染: 浏览器接收到 HTML 后,可以立即开始解析和渲染页面。用户能够很快看到页面的内容。
  2. 客户端水合 (Hydration): 在 HTML 内容渲染的同时,浏览器开始下载并执行 JavaScript Bundle。当 JavaScript 加载完成后,它会在后台将静态的 HTML 页面“激活”,使其具备交互能力。这个过程称为水合,它将服务器端渲染的静态内容与客户端的动态行为连接起来。

SSR 构建流程的优点总结

  1. 数据实时性: 每次请求都重新获取数据并渲染,确保用户看到的内容始终是最新的。
  2. 首屏加载快: 用户无需等待 JavaScript 加载即可看到内容,提升了首屏加载体验。
  3. SEO 友好: 搜索引擎爬虫直接获取完整的 HTML,能够轻松索引所有页面内容。
  4. 完整的 HTTP 上下文: getServerSideProps 可以访问请求头、cookies 等,适用于需要用户身份验证或动态数据的场景。

SSR 是一种强大的渲染模式,它牺牲了部分构建速度和服务器负载,来换取极佳的实时性和用户体验。

1. 识别 SSG 页面

Next.js 在构建时会扫描项目中的 pages 目录,并识别出使用 getStaticProps 函数的页面。这些页面是 SSG 流程的主要处理对象。

  • getStaticProps: 这个异步函数是 SSG 的核心。它在构建时运行在服务器端,负责获取页面所需的所有数据。
  • getStaticPaths: 如果你的页面是动态路由(例如 /posts/[id]),Next.js 还需要知道需要预先生成哪些路径。getStaticPaths 函数就是为此而生,它返回一个包含所有需要生成静态页面的路径列表。
// pages/posts/[id].jsexport async function getStaticPaths() {// 假设从 API 获取所有文章 IDconst posts = await fetch('https://.../posts').then(res => res.json());// 返回一个 paths 数组,告诉 Next.js 需要生成哪些页面const paths = posts.map(post => ({params: { id: post.id },}));return { paths, fallback: false };
}export async function getStaticProps({ params }) {// 根据 ID 获取单个文章数据const post = await fetch(`https://.../posts/${params.id}`).then(res => res.json());return { props: { post } };
}function Post({ post }) {// 使用 post 数据渲染页面return (<div><h1>{post.title}</h1><p>{post.content}</p></div>);
}export default Post;
2. 启动构建命令 (next build)

开发者在终端运行 next build 命令,这会启动 Next.js 的构建过程。

3. 执行 getStaticPaths (仅限动态路由)

如果页面是动态路由,Next.js 会首先运行 getStaticPaths 函数。它会遍历 paths 数组,为每一个路径生成一个独立的页面。这个步骤至关重要,它告诉 Next.js 需要为哪些动态 ID 或 slug 创建静态文件。

4. 执行 getStaticProps 并获取数据

对于每一个需要生成静态 HTML 的页面,Next.js 会运行其对应的 getStaticProps 函数。这个函数会在构建时被调用,而不是在用户请求时。

  • 数据源: 数据可以来自任何地方,例如本地文件、外部 API、数据库等。
  • 一次性获取: 所有的页面数据都在这个阶段一次性获取完成。
5. 渲染页面并生成静态文件

getStaticProps 返回的数据会作为 props 传递给页面组件。Next.js 会利用这些 props,在服务器上预先渲染组件,生成一个完整的 HTML 字符串。

然后,Next.js 会将这个 HTML 字符串保存为独立的 .html 文件,并放置在 .next/server/pages 目录中。同时,相关的 JavaScript、CSS 和其他资源也会被打包和优化。

6. 静态资源优化和部署

在 HTML 和相关文件生成后,Next.js 会进行一系列优化,包括代码分割、压缩、CDN 友好配置等。

  • HTML 文件: /pages/about.js 编译为 .next/server/pages/about.html
  • 动态路由文件: /pages/posts/[id].js 会为每个 getStaticPaths 中定义的 ID 生成一个独立的 HTML 文件,例如 /.next/server/pages/posts/1.html/.next/server/pages/posts/2.html

这些最终生成的静态文件,就是你部署到 CDN 或静态服务器的最终产物。


SSG 构建流程的优点总结

  1. 性能卓越: 页面是预先渲染好的静态文件,直接从 CDN 提供给用户,加载速度极快,几乎没有延迟。
  2. SEO 友好: 搜索引擎爬虫可以轻松抓取到完整的 HTML 内容,无需等待 JavaScript 执行。
  3. 极低的服务器负载: 服务器只在构建时进行计算,运行时几乎不消耗任何计算资源。

SSG 的构建流程确保了在性能和 SEO 方面达到最佳效果,是构建内容稳定、访问量大的网站的首选方案。


好的,我们来详细分解一下 Next.js 中 SSR (Server-Side Rendering) 的构建流程。


SSR 构建流程深度解析

SSR 的核心思想是在每次用户请求页面时,由服务器动态地生成完整的 HTML 页面,然后发送给浏览器。这个过程确保了用户总能获取到最新的数据,并且能够立即看到页面内容,这对于搜索引擎优化(SEO)和用户体验都至关重要。

整个 SSR 流程可以分为以下几个关键步骤:

1. 构建时(Build Time)

next build 阶段,Next.js 仍然会做一些准备工作,但它不会像 SSG 那样生成完整的静态 HTML 文件。相反,它会:

  • 编译代码: 将 React 组件、CSS 和其他资源编译成优化的 JavaScript Bundle。
  • 代码分割: 将代码拆分成小块,以加快页面加载速度。
  • 创建服务器端代码: 为每个使用 SSR 的页面创建服务器端执行的代码包,这些代码包含了页面组件和数据获取逻辑。

这个阶段,Next.js 只是为后续的运行时(Runtime)做好了准备。最终的 HTML 页面还没有被生成。

2. 用户请求(User Request)

当用户在浏览器中输入 URL 并按下回车时,SSR 的核心流程才真正开始。

  1. 浏览器发送请求: 浏览器向 Next.js 服务器发送一个页面请求。
  2. 服务器接收请求: Next.js 服务器接收到请求后,会识别出这是一个需要进行 SSR 的页面。
3. 服务器端执行 getServerSideProps

Next.js 服务器会立即在请求的上下文中执行页面组件中的 getServerSideProps 函数。

  • 实时数据获取: 这个函数会在每次请求时运行,确保获取到的数据是最新的。你可以在这里访问请求的 Headers、Cookies、URL 查询参数等,这在 SSG 中是不可能的。
  • 处理异步操作: 就像在客户端获取数据一样,getServerSideProps 是一个异步函数,它会等待数据获取完成后再继续。
// pages/post/[slug].jsexport async function getServerSideProps(context) {const { slug } = context.params;// 假设从 API 获取实时数据,例如最新评论数const res = await fetch(`https://.../api/posts/${slug}`);const post = await res.json();if (!post) {return {notFound: true,};}return {props: { post },};
}function Post({ post }) {// 使用 post 数据渲染页面return (<div><h1>{post.title}</h1><p>{post.content}</p></div>);
}export default Post;
4. 服务器端渲染 (Server-Side Rendering)

getServerSideProps 返回的数据会作为 props 传递给页面组件。Next.js 服务器利用这些数据,在服务器上执行 React 组件的渲染过程。

  • 生成 HTML: 服务器将 React 组件树转换成一个完整的 HTML 字符串。这个 HTML 字符串包含了所有的页面内容,而不仅仅是一个空的骨架。
  • 内联 CSS: Next.js 也会将必要的 CSS 代码内联到 <style> 标签中,以防止页面在加载时出现“闪烁”(FOUC - Flash of Unstyled Content)。
5. 响应和水合 (Response & Hydration)

服务器将生成的完整 HTML 页面,连同客户端所需的 JavaScript 文件一起,发送给浏览器。

  1. 浏览器渲染: 浏览器接收到 HTML 后,可以立即开始解析和渲染页面。用户能够很快看到页面的内容。
  2. 客户端水合 (Hydration): 在 HTML 内容渲染的同时,浏览器开始下载并执行 JavaScript Bundle。当 JavaScript 加载完成后,它会在后台将静态的 HTML 页面“激活”,使其具备交互能力。这个过程称为水合,它将服务器端渲染的静态内容与客户端的动态行为连接起来。

SSR 构建流程的优点总结

  1. 数据实时性: 每次请求都重新获取数据并渲染,确保用户看到的内容始终是最新的。
  2. 首屏加载快: 用户无需等待 JavaScript 加载即可看到内容,提升了首屏加载体验。
  3. SEO 友好: 搜索引擎爬虫直接获取完整的 HTML,能够轻松索引所有页面内容。
  4. 完整的 HTTP 上下文: getServerSideProps 可以访问请求头、cookies 等,适用于需要用户身份验证或动态数据的场景。

SSR 是一种强大的渲染模式,它牺牲了部分构建速度和服务器负载,来换取极佳的实时性和用户体验。


好的,我们来详细分解一下 Next.js 中 ISR (Incremental Static Regeneration) 的构建流程。


ISR 构建流程深度解析

ISR 是一种巧妙地结合了 SSGSSR 优势的渲染模式。它允许你保持 SSG 的高性能,同时又能在不重新构建整个站点的情况下,对单个页面进行增量更新。

整个 ISR 流程可以分为以下两个主要阶段:构建时运行时

1. 构建时(Build Time)

ISR 的构建过程与 SSG 几乎相同。你需要在页面中使用 getStaticPropsgetStaticPaths 函数。但与 SSG 不同的是,你需要为 getStaticProps 返回一个额外的 revalidate 参数。

  • revalidate 参数: 这个参数定义了页面的“过期”时间(单位为秒)。它告诉 Next.js,当这个时间间隔过去后,页面需要被重新生成。
// pages/posts/[id].js// getStaticPaths 告诉 Next.js 需要预先生成哪些路径
export async function getStaticPaths() {const posts = await fetch('https://.../posts').then(res => res.json());const paths = posts.map(post => ({params: { id: post.id },}));return { paths, fallback: 'blocking' };
}// getStaticProps 在构建时获取数据,并设置 revalidate
export async function getStaticProps({ params }) {const post = await fetch(`https://.../posts/${params.id}`).then(res => res.json());return {props: { post },revalidate: 60, // 设置页面在 60 秒后过期};
}function Post({ post }) {return (<div><h1>{post.title}</h1><p>{post.content}</p></div>);
}export default Post;

next build 阶段,Next.js 会执行 getStaticPathsgetStaticProps 函数,并为每个页面生成静态 HTML 文件。这些文件会被部署到你的托管平台(如 Vercel)的 CDN 上。

2. 运行时(Runtime)

这个阶段是 ISR 的核心,它解释了页面如何被增量更新。

场景一:首次访问或在 revalidate 时间内访问
  1. 用户请求: 用户第一次访问页面。
  2. CDN 响应: 由于页面是静态的,CDN 会立即返回预先构建好的 HTML 文件。这个过程非常快,加载速度和 SSG 页面一样。
场景二:revalidate 时间过期后的首次访问
  1. 用户请求: 当 revalidate 设置的 60 秒过去后,一个新的用户请求到来。
  2. 旧页面立即返回: Next.js 服务器会注意到页面的缓存已过期,但它不会让用户等待。它会立即向用户发送旧的、过期的静态 HTML 页面。
  3. 后台重新生成: 与此同时,Next.js 在后台静默地重新执行 getStaticProps 函数。它会重新获取数据、重新渲染页面,并生成一个新的 HTML 文件。这个过程完全在后台进行,不会阻塞用户的请求。
  4. 更新缓存: 一旦新的 HTML 文件生成成功,Next.js 会用它来替换 CDN 上的旧文件。
场景三:更新后的后续访问
  1. 用户请求: 在后台更新完成后,新的用户请求到来。
  2. CDN 响应: 这时 CDN 上已经是新的 HTML 文件,所以它会立即返回更新后的页面。新的 revalidate 计时器也会重新开始。

ISR 流程的优点总结

  1. 性能与 SSG 相当: 大多数用户请求都直接由 CDN 处理,加载速度极快。
  2. 数据更新无需重新构建: 你可以更新单个页面,而无需重新构建整个应用,这对于大型网站来说非常高效。
  3. 用户体验更好: 即使在数据更新时,用户也不会看到加载中的状态,而是立即得到一个旧版本的页面,随后在下次访问时看到新内容。
  4. fallback 参数: getStaticPaths 中的 fallback 参数提供了更多的灵活性:
    • false: 如果路径未定义,会返回 404 页面。
    • true: 如果路径未定义,Next.js 会在首次访问时动态生成页面,并将其添加到静态缓存中。
    • 'blocking': 与 true 类似,但会阻塞用户请求直到页面生成完成,确保用户总是能看到完整的内容,而不是加载状态。

ISR 是 Next.js 提供的一个非常强大的工具,它在性能和内容新鲜度之间取得了完美的平衡,是构建大型内容驱动型网站的理想选择。

http://www.dtcms.com/a/362253.html

相关文章:

  • Python实现点云渲染可视化杂记(直接、彩虹渐变、柱状、饼状和T-SNE赋色)
  • The Algorithmic Foundations of Differential Privacy - 2
  • 8Lane V-by-One HS LVDS FMC Card
  • 【开题答辩全过程】以 智慧药店管理系统的实现与设计为例,包含答辩的问题和答案
  • 基于单片机智能空调/温度控制系统
  • GaussDB 集群故障cm_ctl: can‘t connect to cm_server
  • API安全厂商F5首发后量子加密方案,为企业后量子时代加固防线
  • Java中方法的参数传递
  • TFT屏幕:STM32硬件SPI+DMA+队列自动传输
  • 【无标题】训练、推理适用的数据类型
  • C++ 学习与 CLion 使用:(五)数据类型,包括整型、实型、字符型、转义字符、字符串、布尔型
  • 椭圆曲线的数学基础
  • 【算法专题训练】17、双向链表
  • openEuler2403部署Redis8集群
  • AI推理方法演进:Chain-of-Thought、Tree-of-Thought与Graph-of-Thought技术对比分析
  • Spring 控制器参数注解
  • LangGraph 边(Edge)机制完全指南
  • Java 不支持在非静态内部类中声明静态 Static declarations in inner classes are not supported异常处理
  • 2025我“生发”了『折行』|『内注』|『终端正偿』|『中文负偿』四大“邪术”(前二造福python代码阅读者;后二助力所有艺术人)
  • nrf52840 解锁
  • 2025年09月01日Github流行趋势
  • 数据结构初阶:详解栈和队列(下)——队列
  • 并发编程--线程池(1)线程池概念 Java 线程池体系(Executor、ThreadPoolExecutor、Executors)
  • resnet网络
  • 甲烷浓度时空演变趋势分析与异常值计算(附下载脚本)
  • 洛谷 P5836 [USACO19DEC] Milk Visits S-普及/提高-
  • 基于MCP架构的OpenWeather API服务端设计与实现
  • jetson开发板Ubuntu系统Docker中使用 MySQL 数据库详解-安装与配置指南
  • Python上下文管理器与资源管理
  • 基于51单片机停车场车位引导系统设计