前端SSG:静态站点生成的艺术

前端SSG:静态站点生成的艺术

毒舌时刻

前端SSG?这不是给博客用的吗?

"我的应用需要动态内容,SSG不适合"——结果首屏加载慢,SEO差,
"SSG就是静态HTML,太简单了"——结果构建时间长,数据更新困难,
"我用SSR就够了"——结果服务器压力大,响应慢。

醒醒吧,SSG不是简单的静态HTML,而是一种现代化的前端架构!

为什么你需要这个?

  • 性能优异:静态文件加载快,无需服务器渲染
  • SEO友好:所有内容都是静态的,搜索引擎容易收录
  • 部署简单:可以部署到任何静态文件服务器
  • 安全性高:没有服务器端代码,减少攻击面

反面教材

// 反面教材:纯静态HTML <!DOCTYPE html> <html> <head> <title>我的博客</title> </head> <body> <h1>我的博客</h1> <div> <h2>第一篇文章</h2> <p>文章内容...</p> </div> <div> <h2>第二篇文章</h2> <p>文章内容...</p> </div> <!-- 手动更新内容,非常麻烦 --> </body> </html> 

正确的做法

// 正确的做法:使用Next.js SSG // pages/index.js export async function getStaticProps() { // 在构建时获取数据 const res = await fetch('https://api.example.com/posts'); const posts = await res.json(); return { props: { posts }, // 重新验证时间(秒) revalidate: 10 }; } function Home({ posts }) { return ( <div> <h1>我的博客</h1> <div className="posts"> {posts.map((post) => ( <div key={post.id} className="post"> <h2>{post.title}</h2> <p>{post.content}</p> </div> ))} </div> </div> ); } export default Home; // 正确的做法:使用Astro // src/pages/index.astro --- // 前端组件 import Header from '../components/Header.astro'; import Footer from '../components/Footer.astro'; // 在构建时获取数据 const res = await fetch('https://api.example.com/posts'); const posts = await res.json(); --- <html lang="zh-CN"> <head> <title>我的博客</title> </head> <body> <Header /> <main> <h1>我的博客</h1> <div> {posts.map((post) => ( <div key={post.id}> <h2>{post.title}</h2> <p>{post.content}</p> </div> ))} </div> </main> <Footer /> </body> </html> // 正确的做法:使用Gatsby // gatsby-node.js exports.createPages = async ({ graphql, actions }) => { const { createPage } = actions; // 查询数据 const result = await graphql(` query { allMarkdownRemark { edges { node { frontmatter { path } } } } } `); // 创建页面 result.data.allMarkdownRemark.edges.forEach(({ node }) => { createPage({ path: node.frontmatter.path, component: path.resolve('./src/templates/blog-post.js'), context: { // 传递数据到模板 } }); }); }; // src/templates/blog-post.js import React from 'react'; import { graphql } from 'gatsby'; export const query = graphql` query($path: String!) { markdownRemark(frontmatter: { path: { eq: $path } }) { frontmatter { title date } html } } `; const BlogPost = ({ data }) => { return ( <div> <h1>{data.markdownRemark.frontmatter.title}</h1> <p>{data.markdownRemark.frontmatter.date}</p> <div dangerouslySetInnerHTML={{ __html: data.markdownRemark.html }} /> </div> ); }; export default BlogPost; 

毒舌点评

看看,这才叫前端SSG!不是简单的静态HTML,而是使用Next.js、Astro、Gatsby等现代化框架,在构建时生成静态页面。

记住,SSG不是只能用于博客,它可以用于任何需要高性能、SEO友好的网站。通过增量静态再生(ISR)等技术,它还可以支持动态内容。

所以,别再觉得SSG简单了,它是现代前端开发的重要选择!

总结

  • Next.js SSG:支持静态生成和增量静态再生
  • Astro:专注于静态站点生成,支持多种框架
  • Gatsby:基于React的静态站点生成器,生态丰富
  • 构建时数据获取:在构建过程中获取数据,生成静态页面
  • 增量静态再生:定期重新生成页面,保持内容新鲜
  • 客户端交互:通过JavaScript添加动态交互
  • 部署灵活:可以部署到Vercel、Netlify等平台
  • 性能优化:自动代码分割、图片优化等

SSG,让你的网站既快又友好!

Read more

Nanbeige4.1-3B多轮对话效果展示:Chainlit中持续追问、记忆保持、角色扮演实录

Nanbeige4.1-3B多轮对话效果展示:Chainlit中持续追问、记忆保持、角色扮演实录 1. 引言:当小模型遇上大智慧 最近在测试各种开源模型时,我遇到了一个让人眼前一亮的“小家伙”——Nanbeige4.1-3B。说实话,刚开始看到“3B”这个参数规模时,我并没有抱太高期望。毕竟现在动辄几十B、上百B的模型太多了,3B能有什么表现? 但实际测试下来,这个模型给了我不少惊喜。特别是在多轮对话场景下,它的表现完全超出了我对这个参数规模模型的预期。 今天这篇文章,我就想带大家看看,这个“小身材”的模型,在Chainlit前端配合下,到底能展现出什么样的“大智慧”。我会通过几个真实的对话场景,展示它在持续追问、记忆保持、角色扮演等方面的实际效果。 2. 模型与部署环境简介 2.1 Nanbeige4.1-3B:小参数,大能力 Nanbeige4.1-3B是基于Nanbeige4-3B-Base构建的增强版本。简单来说,它是在基础模型上,通过进一步的监督微调和强化学习优化而来的。

如何用腾讯云轻量应用服务器内置OpenClaw应用搭建OpenClaw并接入QQ、飞书机器人,下载skill,开启对话

如何用腾讯云轻量应用服务器内置OpenClaw应用搭建OpenClaw并接入QQ、飞书机器人,下载skill,开启对话

诸神缄默不语-个人技术博文与视频目录 如需OpenClaw下载安装、配置、部署服务可以联系:https://my.feishu.cn/share/base/form/shrcnqjFuoNiBPXjADvRhiUcB1B 我发现腾讯云买服务器可以用QQ钱包,这不得狠狠把我多年来抢的红包狠狠利用一下。 OpenClaw我之前玩了几天,现在把gateway关了,因为我感觉第一是感觉AI对于一些细微的执行逻辑还是绕不明白,而且API太慢了等得我着急,慢得我都不知道它是死了还是只是慢,不如我直接一个古法编程下去开发一个自己的工具。我本来是想拿OpenClaw当时间管理助手的,但是研究了一番感觉它作为整个人完整的时间/项目/文件系统/财务/生活管理助手的潜力还是很大的。但是,也就仅止于潜力了,跟OpenClaw绕记账怎么记实在是把我绕火大了……第二,正如网上一直宣传的那样,这玩意太耗token了,我的混元和Qwen免费额度几乎都秒爆,GLM也给我一下子烧了一大笔。我觉得这不是我的消费水平该玩的东西……主要我也确实没有什么用OpenClaw赚大钱的好idea。 但是我仍然觉得OpenClaw

低代码赋能人事管理:高效提效降本,筑牢发展根基

低代码赋能人事管理:高效提效降本,筑牢发展根基

在企业数字化转型的浪潮中,人事管理作为企业发展的核心支撑,正面临着从传统人工操作向智能化、高效化升级的迫切需求。传统人事管理模式的瓶颈日益凸显,而低代码平台的崛起,为企业人事管理系统的快速落地、灵活迭代提供了全新路径,助力企业破解管理难题,激活人力资源价值。 需求背景 企业自身发展需求 企业规模扩大后,传统人事管理已无法适配高效运作,数字化转型势在必行。人事管理系统数字化可实现核心流程自动化,减少人工成本与失误,释放HR精力;同时整合各类人力数据,为战略决策提供支撑,并通过员工自助服务渠道,提升员工体验与留存率。 市场竞争与行业趋势 当前市场环境瞬息万变,企业人事管理的数字化转型,能够让企业快速响应市场变化,灵活调整人力资源配置,确保企业发展与市场需求同频同步。在行业内,诸多领先企业已通过人事管理数字化转型实现了效率提升、成本优化,其成熟经验为同行业企业提供了可借鉴的标杆示范,推动整个行业人事管理水平的提升。 技术进步的推动 移动互联技术支持员工移动端访问系统,提升操作灵活性与及时性;低代码平台降低人事系统建设成本与技术门槛,无需专业开发即可快速搭建,

ROS2中的TF(Transform)系统:机器人坐标系的管理神器

ROS 2 TF 概述 TF(Transform) 是ROS中用于跟踪多个坐标系之间变换关系的库。在ROS 2中,TF系统被重构为 TF2,提供了更高效、更灵活的坐标变换管理。 核心概念 1. 坐标系(Frame) * 每个机器人部件、传感器或环境物体都有自己的坐标系 * 例如:base_link(机器人基座)、laser(激光雷达)、camera(相机) 2. 变换(Transform) * 描述两个坐标系之间的平移(translation)和旋转(rotation)关系 * 表示为:frame_B 相对于 frame_A 的位置和姿态 3. 变换树(Transform Tree) * 所有坐标系通过父子关系连接成一棵树 * 必须有一个根坐标系(通常是map或odom) ROS