重新给自己做了个博客系统,技术栈为:
从普通用户的视角解释
1. 无后端
- 由服务端渲染页面(SSR),就是打开网页的时候,所有的动态数据在服务端已经全部渲染处理好了,只是把静态的html资源返回给浏览器,所以打开速度会非常快(构建时预处理所有内容,运行时零开销)
- 不需要额外花成本去维护后端的逻辑和部署,因为就没有后端
2. 无数据库
- 不用担心数据丢失(除非微软的github突然无预警倒闭)
- 写文章就是写markdown的过程
markdown格式自带了与word文档不相上下的排版能力,但是打开以及编辑它,比word快的不是一两个数量级,且文件大小也不是一个量级(.md较.docx小很多)。而且本网站还支持mdx,就是markdown的加强版,具体可以参考MDX
3. 一切基础设施都是免费的
- 通过前面两点的技术基础,我们可以把本博客的代码,部署到Vercel,以省去服务器的成本,当然,部署到Netlify、Cloudflare Pages和GitHub Pages等等都是可以的,他们都是免费
- 对比那些付费的,在稳定性、可靠性、访问快速方面,甚至还要强很多
- Vercel在我开发这个博客的时候,估值已达32.5亿美金,GitHub Pages就不用说了,大家都知道它是全球最大的代码托管平台
4. 本网站的代码开发过程全程用AI
- 本人几乎没写一行代码,且我本身也不是做Web开发的
- 但是我在此提醒,不要相信那些自媒体鼓吹的什么没有xx经验,就能用AI做一个什么什么系统,更多的是博眼球。省略了很多思考过程和经验,尤其是对AI能力的边界认知、对AI能做到的事的预期等等,没有讲到。我之后会结合我的AI开发实战经验再来展开这个话题……
从开发者的视角解释
样式: Tailwind CSS
- 采用原子化CSS方案,通过组合预定义的工具类来构建UI
- 按需生产,最终打包时只包含使用到的样式,保证了最小的CSS体积
- 内置响应式设计系统,使用 sm:、md:、lg: 等前缀轻松实现多端适配
- 支持暗黑模式(dark:前缀),自动适配系统主题切换
- JIT(即时编译)模式,开发时即时生成所需样式,提升开发体验
前端技术:React
- 采用函数式组件 + Hooks 的现代React开发模式
- 使用 TypeScript 进行类型检查,提升代码可维护性
- 状态管理采用 React Context + useReducer 的组合
- 组件设计遵循原子设计模式,确保组件的可复用性
框架: Next.js
- Next.js 13+ 采用 App Router 架构
- Server Components 革新
- 默认使用服务端组件,减少客户端 JavaScript 体积
- 组件可以直接访问数据库、文件系统等服务端资源
- 支持异步组件,可以直接在组件中使用 async/await
- 流式渲染(Streaming),支持 UI 的渐进式加载
- 灵活的渲染策略
- 静态页面生成(SSG):构建时预渲染所有博客文章
- 服务端渲染(SSR):动态内容实时渲染
- 增量静态再生成(ISR):定期更新静态内容
- 智能组件边界
- 通过 'use client' 指令精确控制客户端代码
- 自动代码分割,优化加载性能
- 服务端组件和客户端组件无缝协作
部署:Vercel
- 通过 Vercel 实现自动化部署,配置 CI/CD 流程
- 与 GitHub 仓库直接集成
- 每次提交自动触发构建和部署
- 提供预览部署环境(Preview Deployments)
- 利用 Vercel 的边缘网络提供全球CDN加速
- 自动的边缘缓存策略
- 通过遍布全球的边缘节点提供低延迟访问
- 支持即时缓存失效
Contentlayer + MDX
内容管理:- 使用 MDX 2.0 作为内容编写格式
- 支持在 Markdown 中直接嵌入 React 组件
- 自定义 MDX 组件映射,增强文章交互性
- 传统文章内容,如wordpress,会把文章+样式都保存在数据库,且严重依赖wordpress平台本身,使得很不好迁移
- 颠覆传统 CMS 的内容管理方式
- 不需要数据库,直接用 Git 管理文章内容
- 不需要后端 API,内容就是代码的一部分
- 不需要单独的 CMS 管理界面,用任何喜欢的编辑器写作
- 不需要考虑数据备份,Git 仓库就是最好的备份
其他背景
我上一个博客系统,是基于当时还比较新颖的 HEXO框架 来构建,但因为这几年前端的技术发展实在是过于迅速,所以想接触点更主流的技术
我记得我第一个博客,是在高中的时候建立的,那时候用的技术还是 Flash,后来转到 Wordpress,转眼现在已经是AI时代了,我想结合它来做点适应现代技术潮流的事
网上现在很多在鼓吹:用AI就能让人不懂编程也能开发程序的教程,我之前的一篇文章,就是来泼冷水的,我想继续通过我的亲身经历,来更进一步去把一些自媒体不会去讲的细节体现出来,让大家对AI在实际应用中,对它能力的边界和以及对它的期望值有个更加立体的认识。所以这一次我故意挑选了我几乎不懂的技术栈来让AI去写代码,以积累素材