Nicholas' blog

关于本博客的开发技术选型

# 开发# AI实践

重新给自己做了个博客系统,技术栈为:

从普通用户的视角解释

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 仓库就是最好的备份

其他背景

  1. 我上一个博客系统,是基于当时还比较新颖的 HEXO框架 来构建,但因为这几年前端的技术发展实在是过于迅速,所以想接触点更主流的技术

  2. 我记得我第一个博客,是在高中的时候建立的,那时候用的技术还是 Flash,后来转到 Wordpress,转眼现在已经是AI时代了,我想结合它来做点适应现代技术潮流的事

  3. 网上现在很多在鼓吹:用AI就能让人不懂编程也能开发程序的教程,我之前的一篇文章,就是来泼冷水的,我想继续通过我的亲身经历,来更进一步去把一些自媒体不会去讲的细节体现出来,让大家对AI在实际应用中,对它能力的边界和以及对它的期望值有个更加立体的认识。所以这一次我故意挑选了我几乎不懂的技术栈来让AI去写代码,以积累素材