SEO炼金术(4)| Next.js SEO 全攻略
在上一篇文章 SEO炼金术(3)| 深入解析 SEO 关键要素 中,我们深入解析了 SEO 关键要素,包括 meta 标签、robots.txt、canonical、sitemap.xml 和 hreflang,并探讨了它们在搜索引擎优化(SEO)中的作用。然而,对于使用 Next.js 开发的网站,手动管理这些 SEO 相关的配置可能会非常繁琐。
幸运的是,Next.js 内置了丰富的 SEO 支持,能够自动化和简化这些优化过程。本文将全面介绍 Next.js 提供的 SEO 相关功能,并通过示例演示如何在 Next.js 项目中正确配置 metadata、canonical、robots.txt、sitemap.xml 和 hreflang,确保你的网站能够在搜索引擎中获得最佳表现。🚀
📌 1. Next.js 的 SEO 相关功能
Next.js 提供了多种 SEO 相关的工具,使开发者无需手动编写 HTML head 标签,而是通过 配置和 API 自动生成正确的 SEO 标记。
📌 Next.js SEO 主要功能概览
| SEO 需求 | Next.js 提供的解决方案 | 作用 |
|---|---|---|
标题 <title>和 meta标签 | metadata API | 设置页面标题、描述等 |
避免重复 URL(canonical) | metadata API (canonical 字段) | 规范化 URL,防止 SEO 权重分散 |
控制爬取与索引(robots.txt和 meta robots) | robots.ts | 设定爬虫访问规则 |
**自动生成 sitemap.xml | `sitemap.(xml | js |
多语言 SEO(hreflang) | metadataAPI (alternates) | 多语言优化,确保用户访问正确版本 |
| Open Graph / Twitter Meta | metadataAPI (openGraph/ twitter) | 提高社交媒体分享效果 |
📌 2. 在 Next.js 中实现 SEO
2.1 内置 metadata API(元数据 API)
Next.js 13+ 引入了 metadata API,替代了 next/head,可以在 layout.tsx 或 page.tsx 中直接定义 SEO 相关的元数据。
示例
import type { Metadata } from 'next'export const metadata: Metadata = {title: 'Next.js SEO Optimization',description: 'Learn how to optimize Next.js applications for SEO.',keywords: ['Next.js', 'SEO', 'optimization'],robots: {index: true, // 允许搜索引擎索引follow: true, // 允许搜索引擎跟踪链接},alternates: {canonical: 'https://example.com/seo',},openGraph: {title: 'Next.js SEO',description: 'A comprehensive guide to SEO in Next.js',url: 'https://example.com/seo',images: [{url: 'https://example.com/og-image.jpg',width: 1200,height: 630,},],type: 'website',},twitter: {card: 'summary_large_image',title: 'Next.js SEO',description: 'A comprehensive guide to SEO in Next.js',images: ['https://example.com/twitter-card.jpg'],},
}
2.1.1详细字段解析
1️⃣ 标题相关
| 字段 | 作用 | 是否影响 SEO |
|---|---|---|
title | 设置页面 <title>标签 | ✅ 影响排名 |
title.default | 作为子路由的默认标题 | ✅ 影响排名 |
title.template | 用于拼接标题(如 `%s | 网站名`) |
title.absolute | 设定不受 title.template影响的标题 | ✅ 影响排名 |
示例:
export const metadata: Metadata = {title: {template: '%s | My Website',default: 'My Website',},
}
输出
<title>My Page | My Website</title>
2️⃣页面描述
| 字段 | 作用 | 是否影响 SEO |
|---|---|---|
description | 设置 <meta name="description">,用于搜索引擎结果页摘要 | ✅ 影响搜索结果 CTR |
示例:
export const metadata: Metadata = {description: 'Next.js SEO Best Practices',
}
输出
<meta name="description" content="Next.js SEO Best Practices" />
3️⃣关键词
| 字段 | 作用 | 是否影响 SEO |
|---|---|---|
keywords | 设置 <meta name="keywords">,定义页面的关键词(部分搜索引擎已忽略) | ❌ 影响极小 |
示例:
export const metadata: Metadata = {keywords: ['Next.js', 'SEO', 'Optimization'],
}
输出
<meta name="keywords" content="Next.js, SEO, Optimization" />
4️⃣ 搜索引擎爬取策略
| 字段 | 作用 | 是否影响 SEO |
|---|---|---|
robots | 控制搜索引擎的索引策略 | ✅ 影响网页是否被收录 |
示例:
export const metadata: Metadata = {robots: {index: true,follow: true,noimageindex: false,googleBot: {index: true,follow: true,'max-image-preview': 'large',},},
}
输出
<meta name="robots" content="index, follow" />
<meta name="googlebot" content="index, follow, max-image-preview:large" />
5️⃣ 规范 URL(Canonical)
| 字段 | 作用 | 是否影响 SEO |
|---|---|---|
alternates.canonical | 设置 <link rel="canonical">,避免重复内容问题 | ✅ 影响页面权重 |
示例:
export const metadata: Metadata = {alternates: {canonical: 'https://example.com/seo',},
}
输出
<link rel="canonical" href="https://example.com/seo" />
6️⃣ Open Graph & Twitter 预览
| 字段 | 作用 | 是否影响 SEO |
|---|---|---|
openGraph | 定义 Facebook、LinkedIn 等社交媒体的 Open Graph 数据 | ✅ 增强分享体验 |
twitter | 定义 Twitter/X 分享预览 | ✅ 增强分享体验 |
示例:
export const metadata: Metadata = {openGraph: {title: 'Next.js SEO',description: 'A guide to SEO in Next.js',url: 'https://example.com/seo',images: [{ url: 'https://example.com/og-image.jpg', width: 1200, height: 630 },],type: 'website',},twitter: {card: 'summary_large_image',title: 'Next.js SEO',description: 'A guide to SEO in Next.js',images: ['https://example.com/twitter-card.jpg'],},
}
输出
<meta property="og:title" content="Next.js SEO" />
<meta property="og:description" content="A guide to SEO in Next.js" />
<meta property="og:image" content="https://example.com/og-image.jpg" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Next.js SEO" />
<meta name="twitter:image" content="https://example.com/twitter-card.jpg" />
7️⃣ 其他 SEO 相关元数据
| 字段 | 作用 | 是否影响 SEO |
|---|---|---|
metadataBase | 设定 URL 前缀,方便定义绝对路径的 metadata | ✅ 影响 URL 结构 |
icons | 网站图标(favicon、Apple Touch Icon 等) | ✅ 影响分享体验 |
manifest | 设置 Web App Manifest 文件 | ❌ 仅影响 PWA |
appleWebApp | 定义 Apple Web App 相关设置 | ❌ 仅影响 iOS 设备 |
appLinks | 定义 Android/iOS App 关联链接 | ❌ 仅影响 App 跳转 |
facebook | 设置 Facebook App ID 或管理员 ID | ❌ 仅影响 Facebook |
verification | 用于 Google、Yandex、Yahoo 站点验证 | ❌ 仅影响站点所有权认证 |
2.1.2 Metadata API 最佳实践
✅ 默认在 layout.tsx 中定义 metadata,以便所有子页面继承默认值。
✅ 子页面可以覆盖 title 和 description,确保每个页面唯一性。
✅ 使用 metadataBase 设定 URL 前缀,简化 canonical 和 og:image 配置。
✅ **openGraph 和 twitter 提升社交媒体分享体验,增加流量入口。
✅ **如果页面是动态的,使用 generateMetadata() 以根据 params 生成动态 title。
2.2 生成 robots.txt 文件
在 Next.js 中,你可以 **手动添加robots.txt静态文件,或者 **动态生成robots.txt 以控制爬虫的抓取行为。Next.js 提供了一种 更智能 的方式,允许我们通过 robots.ts 文件 动态生成 规则,使 SEO 维护更加灵活。
2.2.1 使用静态 robots.txt
如果你的网站 不需要动态调整爬虫规则,可以直接在 app/ 目录下创建 robots.txt静态文件,这样 Next.js 会自动提供该文件,不需要额外的代码。
📌 创建 app/robots.txt
User-Agent: *
Allow: /
Disallow: /private/
Sitemap: https://example.com/sitemap.xml
📌 访问 https://example.com/robots.txt,你会看到:
User-Agent: *
Allow: /
Disallow: /private/
Sitemap: https://example.com/sitemap.xml
✅ 适用场景:
- 规则固定,不会根据环境或内容变化。
- 适用于小型网站,规则简单且不会变动。
🚨 但如果你需要动态管理爬虫规则,比如针对不同环境(开发/生产),或者对特定 URL 进行调整,就需要使用动态生成的方法。
2.2.2 通过 robots.ts 动态生成 robots.txt
Next.js 支持动态生成robots.txt,通过 app/robots.ts 让 robots.txt 自动适配不同环境。
📌步骤:在 app/robots.ts 中创建动态 robots.txt
import type { MetadataRoute } from 'next'export default function robots(): MetadataRoute.Robots {return {rules: [{ userAgent: '*', allow: '/' }, // 允许所有爬虫访问整个网站{ userAgent: 'Googlebot', disallow: '/private/' }, // Googlebot 不能访问 /private/],sitemap: 'https://example.com/sitemap.xml', // 指定 sitemap 位置}
}
📌 访问 https://example.com/robots.txt,你会看到:
User-Agent: *
Allow: /
User-Agent: Googlebot
Disallow: /private/
Sitemap: https://example.com/sitemap.xml
✅ robots.ts 作用
- 动态生成
robots.txt,自动适配不同环境。 - 支持不同爬虫设置不同规则(如
Googlebot、Bingbot)。 - 无需手动维护
robots.txt文件,防止因修改错误导致 SEO 受损。 - 自动缓存,提高性能。
2.2.3 robots.ts 的存放位置
- 需要 **手动创建
app/robots.ts,它不会默认存在。 robots.ts必须放在app/目录下的根路径**,保证https://example.com/robots.txt能够正确访问。- ⚠️ 注意:如果
robots.txt和robots.ts同时存在,Next.js 只会使用robots.txt(静态文件优先)。
2.2.4 robots.ts 高级用法
如果你需要 对不同搜索引擎设置不同规则,可以 传递数组 让多个爬虫遵循不同的规则。
📌 示例:针对不同搜索引擎设置不同的爬取规则
import type { MetadataRoute } from 'next'export default function robots(): MetadataRoute.Robots {return {rules: [{userAgent: 'Googlebot', // 仅针对 Googlebotallow: ['/'], // 允许访问所有页面disallow: ['/private/'], // 禁止访问 /private/},{userAgent: ['Applebot', 'Bingbot'], // 适用于 Applebot 和 Bingbotdisallow: ['/'], // 禁止访问所有页面},],sitemap: 'https://example.com/sitemap.xml',}
}
📌访问 https://example.com/robots.txt,你会看到:
User-Agent: Googlebot
Allow: /
Disallow: /private/User-Agent: Applebot
Disallow: /User-Agent: Bingbot
Disallow: /Sitemap: https://example.com/sitemap.xml
✅ 适用场景
- 你希望 不同搜索引擎有不同的爬取规则。
- 你想 屏蔽某些爬虫(如 Applebot、Bingbot)。
- 你希望 Googlebot 访问全部内容,但屏蔽
/private/目录。
2.2.5 robots.ts 的完整规则
Next.js 的 robots.ts 支持以下参数:
type Robots = {rules:| {userAgent?: string | string[]allow?: string | string[]disallow?: string | string[]crawlDelay?: number}| Array<{userAgent: string | string[]allow?: string | string[]disallow?: string | string[]crawlDelay?: number}>sitemap?: string | string[]host?: string
}
📌可选参数
| 参数 | 作用 |
|---|---|
userAgent | 指定爬虫(如 Googlebot、Bingbot),*代表所有爬虫 |
allow | 允许爬取的路径(如 /表示所有路径) |
disallow | 禁止爬取的路径(如 /private/) |
sitemap | 指定站点地图的 URL |
crawlDelay | 设置爬取延迟(秒) |
host | 指定主机(如 https://example.com) |
📌示例:完整 robots.ts
export default function robots(): MetadataRoute.Robots {return {rules: [{ userAgent: '*', allow: '/' }, // 允许所有爬虫访问整个网站{ userAgent: 'Googlebot', disallow: ['/private/'], crawlDelay: 10 }, // Googlebot 禁止访问 /private/,并设置爬取间隔 10 秒],sitemap: ['https://example.com/sitemap.xml'],host: 'https://example.com',}
}
📌 访问 https://example.com/robots.txt,你会看到:
User-Agent: *
Allow: /User-Agent: Googlebot
Disallow: /private/
Crawl-Delay: 10Sitemap: https://example.com/sitemap.xml
Host: https://example.com
✅ 适用场景
- 你希望 Googlebot 爬取速度较慢,防止服务器压力过大。
- 你有 多个
sitemap.xml文件,希望统一管理。 - 你希望 为网站设置主机 URL,提高 SEO 规范性。
2.3 生成 sitemap.xml
在 SEO 优化中,sitemap.xml 站点地图能够帮助搜索引擎更快地发现并索引网站上的重要页面。Next.js 允许 **手动添加sitemap.xml 文件,或者通过 sitemap.ts自动生成 站点地图,从而大大简化维护工作。
2.3.1 使用静态 sitemap.xml
如果你的网站页面较少,并且 URL 结构比较稳定,可以 手动创建 sitemap.xml 文件,然后放置在 app/ 目录下,Next.js 会直接提供该文件。
📌 **创建 app/sitemap.xml
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url><loc>https://example.com</loc><lastmod>2023-01-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url><url><loc>https://example.com/blog</loc><lastmod>2023-01-01</lastmod><changefreq>daily</changefreq><priority>0.8</priority></url>
</urlset>
📌 访问 https://example.com/sitemap.xml,你会看到:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url><loc>https://example.com</loc><lastmod>2023-01-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url><url><loc>https://example.com/blog</loc><lastmod>2023-01-01</lastmod><changefreq>daily</changefreq><priority>0.8</priority></url>
</urlset>
✅ 适用场景
- 小型网站,页面数量少,URL 结构不会经常变化。
- 你希望**手动控制
sitemap.xml,无需额外代码逻辑。 - 你不需要自动更新
lastmod(页面最后更新时间)。
🚨 但如果你的网站页面较多、结构复杂,或者经常有新页面上线,建议使用动态生成 sitemap.xml 的方式。
2.3.2 通过 sitemap.ts 动态生成 sitemap.xml
Next.js 允许 自动生成 sitemap.xml,只需创建 sitemap.ts 文件,即可根据动态路由生成站点地图。这种方法更加灵活,适用于 大型站点或频繁更新的内容。
📌步骤:在 app/sitemap.ts 中创建 sitemap.xml
import type { MetadataRoute } from 'next'export default function sitemap(): MetadataRoute.Sitemap {return [{url: 'https://example.com',lastModified: new Date(),changeFrequency: 'weekly',priority: 1.0,},{url: 'https://example.com/blog',lastModified: new Date(),changeFrequency: 'daily',priority: 0.8,},]
}
📌 访问 https://example.com/sitemap.xml,你会看到:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url><loc>https://example.com</loc><lastmod>2023-01-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url><url><loc>https://example.com/blog</loc><lastmod>2023-01-01</lastmod><changefreq>daily</changefreq><priority>0.8</priority></url>
</urlset>
✅ sitemap.ts 作用
- 自动更新
lastmod,确保搜索引擎知道页面最新更新时间。 - 支持动态 URL(如博客文章、商品页等)。
- 搜索引擎可以更快发现新页面,加快索引速度。
- 无需手动维护
sitemap.xml文件,降低出错风险。
2.3.3 sitemap.ts 的存放位置
- 需要 手动创建
app/sitemap.ts,默认不会自动生成。 sitemap.ts必须放在app/目录下,确保可以通过https://example.com/sitemap.xml访问到。- ⚠️ 注意:如果
sitemap.xml和sitemap.ts同时存在,Next.js 只会使用sitemap.xml(静态文件优先)。
2.3.4 生成多语言 sitemap.xml
如果你的网站有 多个语言版本,可以在 sitemap.ts 中 添加 alternates.languages 选项,告诉搜索引擎哪些 URL 代表不同语言版本。
📌示例:支持多语言的 sitemap.ts
import type { MetadataRoute } from 'next'export default function sitemap(): MetadataRoute.Sitemap {return [{url: 'https://example.com',lastModified: new Date(),alternates: {languages: {'en': 'https://example.com/en','de': 'https://example.com/de',},},},{url: 'https://example.com/about',lastModified: new Date(),alternates: {languages: {'en': 'https://example.com/en/about','de': 'https://example.com/de/about',},},},]
}
📌 访问 https://example.com/sitemap.xml,你会看到:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>https://example.com</loc><xhtml:link rel="alternate" hreflang="en" href="https://example.com/en"/><xhtml:link rel="alternate" hreflang="de" href="https://example.com/de"/><lastmod>2023-01-01</lastmod></url><url><loc>https://example.com/about</loc><xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/about"/><xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/about"/><lastmod>2023-01-01</lastmod></url>
</urlset>
✅ 作用
- 帮助搜索引擎正确索引不同语言版本的 URL。
- 避免重复内容问题(
canonical+hreflang)。 - 自动维护多语言站点地图,无需手动管理。
2.3.5 生成大规模网站的 sitemap.xml
如果你的网站包含 大量页面(例如电商、博客、论坛等),建议 拆分 sitemap.xml,使用 generateSitemaps 方法。
📌示例:为大规模站点生成多个 sitemap.xml
import type { MetadataRoute } from 'next'
import { BASE_URL } from '@/app/lib/constants'export async function generateSitemaps() {return [{ id: 0 }, { id: 1 }, { id: 2 }]
}export default async function sitemap({ id }: { id: number }): Promise<MetadataRoute.Sitemap> {const start = id * 50000const end = start + 50000const products = await getProducts(`SELECT id, date FROM products WHERE id BETWEEN ${start} AND ${end}`)return products.map((product) => ({url: `${BASE_URL}/product/${product.id}`,lastModified: product.date,}))
}
📌 访问 /product/sitemap/1.xml,你会看到部分站点地图。 ✅ 适用场景
- 站点超过 50,000 个 URL(Google 单个
sitemap.xml限制)。 - 电商、博客、新闻类站点 需要拆分站点地图。
📌 3. Next.js 内置 sitemap.ts vs. next-sitemap
Next.js 提供了 内置 sitemap.ts 生成 sitemap.xml 的功能,但社区中也有专门的 next-sitemap 库用于生成站点地图。那么,这两者有什么区别?应该选择哪种方式呢?本文将深入对比它们的特点、适用场景和优缺点**。
3.1 Next.js 内置 sitemap.ts
📌 Next.js 13+ 提供的 sitemap.ts 是一种原生支持**的方式,可以在 app/sitemap.ts 文件中定义站点地图,并自动生成 sitemap.xml。
✅ 特点
- 基于
app/sitemap.ts:无需额外安装依赖,Next.js 原生支持。 - 动态生成:支持
**lastModified自动更新时间。 - 支持多语言 (
hreflang) 和多sitemap结构。 - 不需要手动执行命令,访问
/sitemap.xml即可获取站点地图。
✅ 优点
- 内置支持:不需要安装
next-sitemap,减少外部依赖。 - 自动化:无需手动运行
npx命令,每次访问/sitemap.xml都是最新的。 - 支持
hreflang:适用于多语言网站。
🚨 缺点
- 功能较基础:不支持自动解析
next的pages目录结构,需要手动添加 URL。 - 不适用于大型网站:
sitemap.ts适用于小型/中型站点,但对于有 10w+ URL 的大站,性能可能有限。
3.2 next-sitemap
📌 next-sitemap 是 Next.js 官方推荐的 sitemap.xml 生成工具,适用于大型项目,可自动爬取 pages/ 目录,批量生成 sitemap.xml。
✅ 特点
- 支持 SSR/SSG:可自动抓取
next.config.js中的pages/目录。 - 支持
robots.txt生成,无需手写。 - 支持
sitemap index(多个sitemap.xml文件)。 - 提供
next-sitemap.js配置文件,可以批量管理 URL,无需手动维护sitemap.ts。
📌 安装 next-sitemap
npm install next-sitemap
📌 配置 next-sitemap.config.js
module.exports = {siteUrl: 'https://example.com', // 站点根路径generateRobotsTxt: true, // 自动生成 robots.txtsitemapSize: 5000, // 拆分 sitemap.xmlchangefreq: 'daily', // 默认所有页面更新时间priority: 0.8, // 默认优先级exclude: ['/admin', '/private'], // 排除不想被索引的页面
}
📌 运行命令,生成 sitemap.xml
npx next-sitemap
📌 生成的 sitemap.xml
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><sitemap><loc>https://example.com/sitemap-0.xml</loc></sitemap><sitemap><loc>https://example.com/sitemap-1.xml</loc></sitemap>
</sitemapindex>
✅ 优点
- 自动解析
pages目录,无需手动维护 URL。 - 支持
robots.txt,可自动生成并配置。 - 适用于大规模网站,可以拆分多个
sitemap.xml,每个最多 50,000 个 URL。 - 支持
next export,可用于静态站点。
🚨 缺点
- 需要手动执行
npx next-sitemap以生成sitemap.xml,不像sitemap.ts那样是实时的。 - 需要额外安装依赖,增加项目体积。
3.3 sitemap.ts vs. next-sitemap 对比
| 特性 | **Next.js sitemap.ts | **next-sitemap |
|---|---|---|
| 是否需要安装依赖 | ❌ 不需要 | ✅ 需要 (next-sitemap) |
| 是否自动更新 | ✅ 实时生成 | ❌ 需要 npx运行 |
是否支持 robots.txt | ❌ 需手动写 robots.ts | ✅ 自动生成 |
是否支持 hreflang | ✅ 支持 | ✅ 支持 |
| 是否适合大站点 | ✅ 可拆分多个 sitemap | ✅ 更适合,自动拆分 |
是否支持 next export | ❌ 仅支持 app/目录 | ✅ 适用于 pages/目录 |
是否支持 sitemap index | ✅ 通过 generateSitemaps | ✅ 自动拆分 |
✅ 推荐选择
- 如果你的网站规模较小(小于 50,000 个 URL),并且在
app/目录下开发,建议使用sitemap.ts。 - 如果你的网站是一个大型站点(超过 50,000 个 URL),或者使用
pages/目录,建议使用next-sitemap,可以自动解析目录并生成多个sitemap.xml。 - 如果你还需要
robots.txt自动生成,next-sitemap是更好的选择。
📌 4. 总结
Next.js 提供了 强大的内置 SEO 工具,简化了 SEO 配置:
- ✅
metadataAPI** 轻松设置<title>、meta、canonical - ✅
robots.ts自动生成robots.txt,控制爬虫行为 - ✅
sitemap.ts生成sitemap.xml,加快搜索引擎索引 - ✅ 多语言
hreflang轻松管理,提高全球搜索排名
利用 Next.js,你可以 更轻松地管理 SEO,提升网站在搜索引擎中的可见度!🚀
相关文章:
SEO炼金术(4)| Next.js SEO 全攻略
在上一篇文章 SEO炼金术(3)| 深入解析 SEO 关键要素 中,我们深入解析了 SEO 关键要素,包括 meta 标签、robots.txt、canonical、sitemap.xml 和 hreflang,并探讨了它们在搜索引擎优化(SEO)中的作…...
ONES 功能上新|ONES Copilot、ONES Project 新功能一览
ONES Copilot 智能 AI 助手模型可配置多种类型模型,服务提供方 Dashscope 的模型列表中新增 DeepSeek V3 与 DeepSeek R1;选择自定义模型配置时,填写私有部署的 DeepSeek 模型相关参数即可。 应用场景: 企业内部自部署或在模型服务…...
STM32寄存器控制引脚高低电平
一. 引子 最近在学习32代码的过程当中,虽然在学习IMX6ULL开发板的过程中接触过很多寄存器,最近在返回去看32的时候,在研究代码的时候发现自己对于寄存器的有些特性理解的不够深刻,所以下来的时候去查了资料,以及问了一…...
SOC-ATF 安全启动BL1流程分析(1)
一、ATF 源码下载链接 1. ARM Trusted Firmware (ATF) 官方 GitHub 仓库 GitHub 地址: https://github.com/ARM-software/arm-trusted-firmware 这是 ATF 的官方源码仓库,包含最新的代码、文档和示例。 下载方式: 使用 Git 克隆仓库: git…...
QVariantList使用详解
QVariantList 1. 基本概念2. 使用场景3. 基本操作3.1 创建和初始化3.2 访问元素3.3 修改元素3.4 删除元素 4. 实际应用示例5. 总结其他QT文章推荐 QVariantList 是 Qt 框架中的一个类,用于存储和操作 QVariant 对象的列表。 QVariant 是 Qt 中用于封装各种类型的通…...
TDesign:Cascader 级联选择器(省市区三级联动)
Cascader 级联选择器API 参考官方示例代码 在自己的模板中使用:view import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import package:get/get.dart; import package:tdesign_flutter/tdesign_flutter.dart;import i…...
Ubuntu20.04下各类常用软件及库安装汇总
1.Miniconda的安装 Ubuntu 20.04版本快速安装 Miniconda(宝宝级攻略) 2.Nvidia显卡驱动/CUDA/cuDNN安装 Ubuntu 20.04安装nvidia显卡驱动/CUDA/cuDNN Ubuntu 20.04:CUDAcuDNN安装&卸载 Y9000P24款 win11ubuntu20.04 双系统教程 3.SGL…...
linux中安装部署Jenkins,成功构建springboot项目详细教程
参考别人配置Jenkins的git地址为https,无法连上github拉取项目,所以本章节介绍通过配置SSH地址来连github拉取项目 目录: 1、springboot项目 1.1 创建名为springcloudproject的springboot项目工程 1.2 已将工程上传到github中,g…...
2025系统架构师(一考就过):案例之四:架构复用、架构评估、特定架构(DSSA)、架构开发方法(ABSD)
二、软件架构复用 ◆软件产品线是指一组软件密集型系统,它们共享一个公共的、可管理的特性集,满足某个特定市场或任务的具体需要,是以规定的方式用公共的核心资产集成开发出来的。即围绕核心资产库进行管理复用、集成新的系统。 ◆软件架构…...
基于定制开发开源AI大模型S2B2C商城小程序的商品选品策略研究
摘要:随着电子商务的蓬勃发展和技术的不断进步,商品选品在电商领域中的重要性日益凸显。特别是在定制开发开源AI大模型S2B2C商城小程序的环境下,如何精准、高效地选择推广商品,成为商家面临的一大挑战。本文首先分析了商品选品的基…...
后端之JPA(EntityGraph+JsonView)
不同表之间的级联操作或者说关联查询是很多业务场景都会用到的。 对于这种需求最朴素的方法自然是手动写关联表,然后对被关联的表也是手动插入数据。但是手写容易最后写成一堆shit代码,而且修改起来也是非常麻烦的。 学会使用现成的工具还是非常有利的…...
linux--卡顿
1,swappiness swappiness是一个影响操作系统如何使用交换空间(swap space)的内核参数。它的值范围是从0到100,这个数值决定了系统将数据从物理内存(RAM)移动到交换分区或交换文件的倾向程度,交…...
【Python pro】函数
1、函数的定义及调用 1.1 为什么需要函数 提高代码复用性——封装将复杂问题分而治之——模块化利于代码的维护和管理 1.1.1 顺序式 n 5 res 1 for i in range(1, n1):res * i print(res) # 输出:1201.1.2 抽象成函数 def factorial(n):res 1for i in range(1…...
Docker 2025/2/24
用来快速构建、运行和管理应用的工具。帮助部署。 快速入门 代码略 解释 docker run :创建并运行一个容器,-d是让容器在后台运行 --name mysql :给容器起个名字,必须唯一 -p 3306:3306 :设置端口映射 -e KEYVALUE :是设置环境变量 mysql :指定运行的…...
4. 示例:创建带约束的随机地址生成器(范围0x1000-0xFFFF)
文章目录 前言代码示例:运行方法:查看结果:关键功能说明:扩展功能建议: 前言 以下是一个完整的SystemVerilog测试平台示例,包含约束随机地址生成、日志输出和波形生成功能: 代码示例࿱…...
爱普生SG-8101CE可编程晶振赋能智能手机的精准心脏
在智能手机高速迭代的今天,高性能、低功耗与小型化已成为核心诉求。智能手机作为人们生活中不可或缺的工具,需要在各种复杂场景下稳定运行。爱普生SG-8101CE可编程晶振凭借其卓越性能,成为智能手机中不可或缺的精密时钟源,为通信、…...
指针解剖学:穿透C/C++内存操作的核心密码与避坑指南
一、指针的本质与内存模型 指针是C/C的核心特性,本质是内存地址的变量化表示。每个变量在内存中占据连续的字节空间,地址是内存单元的唯一编号(如0x0028FF40)。指针变量存储的是目标数据的首地址,通过地址间接操作数据…...
Qt关于平滑滚动的使用QScroller及QScrollerProperties类说明
一、触控时代的滚动工具:QScroller类设计介绍 1.1 从机械滚轮到数字惯性 在触控设备普及前,滚动操作如同老式打字机的滚轴,只能通过鼠标滚轮或滚动条进行离散式控制。QScroller的出现如同给数字界面装上了"惯性飞轮",…...
【音视频】编解码相关概念总结
NALU RTP PS流 三者总体关系 NALU在RTP中的应用:视频流的RTP传输通常将NALU作为基本的单元进行传输。每个RTP包携带一个或多个NALU,这些NALU包含了视频编码数据。RTP协议通过其头部信息(如时间戳、序列号等)帮助接收端重新排列和…...
Vue3 + Vite + TS,使用 配置项目别名属性:resolve
使用 resolve 配置全局项目路径别名 1.优化了开发中单页面引用其他模块的路径复杂性 2.妥妥解决了,组件复用当中提高开发效率 // 不使用配置 import { useStore } from ../../../stores // 使用配置 可根据开发者需求任意定义,较多 import { useStore…...
docker创建nginx
docker run -d -p 8080:80 --name my-nginx-container nginx docker:命令 run:命令 -d:在后台运行容器 -p:8080:80:将容器内部的80端口映射到宿主机的8080端口。 --name my-nginx-container:为容器指定一个…...
StableDiffusion打包 项目迁移 项目分发 1
文章目录 SD项目迁移前置知识webui-user.batwebui.batlaunch_utils.py 下一篇开始实践 SD项目迁移 显卡驱动更新:https://www.nvidia.cn/geforce/drivers/ 下载安装三个程序: python3.10.6: https://www.python.org/downloads/release/python-3106/gi…...
【数据结构进阶】哈希表
🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:数据结构 目录 前言 一、哈希表的概念 二、哈希函数的实现方法 1. 直接定址法 2. 除留余数法 三、哈希冲突 1. 开放定址法(闭散列࿰…...
【蓝桥杯嵌入式】各模块学习总结
系列文章目录 留空 文章目录 系列文章目录前言一、LED模块1.1 赛题要求1.2 模块原理图1.3 编写代码1.4 赛题实战 二、LCD模块2.1 赛题要求2.2 模块原理图2.3 编写代码2.4 赛题实战 三、按键模块3.1 赛题要求3.2 模块原理图3.3 编写代码3.4 赛题实战 四、串口模块4.1 赛题要求4…...
Rust学习总结之-枚举
枚举是一个很多语言都有的功能,不过不同语言中其功能各不相同但是要表达的意思是一致的,枚举就是对于一个事物可以穷举出所有可能得值。比如说人的性别就可以用枚举,男人和女人两种。下面我们来学习Rust中的枚举。 一:枚举定义 …...
Linux系统管理(十七)——配置英伟达驱动、Cuda、cudnn、Conda、Pytorch、Pycharm等Python深度学习环境
文章目录 前言安装驱动下载安装Cuda编辑环境变量安装Cudnn安装conda验证安装成功配置conda镜像退出conda环境创建python环境查看当前conda环境激活环境安装python包安装pytorch 安装pycharm安装jupyter notebook 前言 深度学习和大语言模型的部署不免会用到Linux系统ÿ…...
SLAM算法工程师的技术图谱和学习路径
SLAM(Simultaneous Localization and Mapping)算法工程师是负责开发和实现用于机器人、自动驾驶车辆等领域的SLAM算法的专业人士。下面是SLAM算法工程师需要掌握的基础理论知识: 机器人运动学和动力学:理解机器人在空间中的运动方式和控制方法,包括轮式、蜘蛛腿、飞行器等…...
【第三天】零基础学习量化基础代码分析-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 记录量化基础代码总览引言基本概念量化投资 伪代码示例:量化投资模型框架总结 每日-往期回看 第一天零基础学量化基础知识点总览-持续更新 第二天零基础…...
深入了解 Python 中的 MRO(方法解析顺序)
文章目录 深入了解 Python 中的 MRO(方法解析顺序)什么是 MRO?如何计算 MRO?C3 算法的合并规则C3 算法的合并步骤示例:合并过程解析 MRO 解析失败的场景使用 mro() 方法查看 MRO示例 1:基本用法 菱形继承与…...
如何防止 Instagram 账号被盗用:安全设置与注意事项
如何防止 Instagram 账号被盗用:安全设置与注意事项 在这个数字化时代,社交媒体平台如 Instagram 已成为我们日常生活的一部分。然而,随着网络犯罪的增加,保护我们的在线账户安全变得尤为重要。以下是一些关键的安全设置和注意事…...
