type
status
date
slug
summary
tags
category
icon
password
catalog
sort
作为一名写了7年Java的后端程序员,我对“技术选型”的核心判断标准始终是“性价比”——既要满足需求,又要少花钱、少折腾。这份执念,在我5年的博客建站史里体现得淋漓尽致:从最初用SpringBoot Halo扛着服务器压力“全栈硬刚”,到Hexo静态生成的“快却低效”,再到NotionNext+ISR的“躺平式维护”,每一次切换都绕不开“省心”与“省钱”这两个核心诉求。而最后让我彻底停下折腾脚步的,正是NotionNext与增量静态再生(ISR)的组合——它不仅解决了前两个框架的所有痛点,更让我这个后端开发者不用再为“博客技术”分心,能把精力全放在写内容上。
一、5年建站迭代:从“花钱费力”到“省心省钱”的三次试错
我的博客初衷很简单:记录Java后端的技术笔记,偶尔分享项目踩坑经验。但就是这么一个简单的需求,在前4年里却让我花了不少冤枉钱、耗了很多没必要的时间——直到遇见NotionNext,才真正实现“零成本+分钟级维护”。
1.1 前2年:SpringBoot Halo——Java开发者的“舒适区”,却是“烧钱区”
2019年刚开始写博客时,我几乎没犹豫就选了SpringBoot Halo——毕竟它是Java生态的开源博客框架,技术栈全是我熟悉的:SpringBoot做后端、MySQL存数据、Thymeleaf做模板渲染,连管理后台都是“后端主导”的半分离模式。作为刚做完SpringBoot电商项目的我来说,上手Halo就像“写业务接口”一样顺手。
当时的“舒适”与“代价”
- 技术顺手,但服务器成本高:Halo需要独立的云服务器才能跑起来,我一开始买了阿里云最低配的ECS(2核4G,每月120元),再加上RDS MySQL(1核2G,每月80元),光这两项每月就要200元,一年就是2400元——对个人博客来说,这可不是小数目。更麻烦的是,随着文章从10篇涨到100篇,访问量偶尔破万时,服务器经常“扛不住”:Tomcat线程池满了,用户刷新页面要等3-5秒,日志里全是“MySQL连接超时”;我还得手动加Redis缓存页面片段(用Spring Cache注解),半夜起来看服务器监控,生怕宕机——这哪是“写博客”,分明是“多了个运维任务”。
- 维护繁琐,改篇文章要“走全流程”:想改一篇文章的标题,得先登Halo的管理后台(还得担心后台安全,定期改密码),找到文章编辑页修改,保存后数据存到MySQL,用户访问时还要等后端重新渲染页面——虽然是“实时更新”,但背后是服务器的持续消耗。有次我想给博客加个“文章点赞”功能,得自己写Java接口(Controller+Service+DAO),改Thymeleaf模板,再重新打包部署到服务器,前后花了3个小时——作为后端,我能搞定,但这完全偏离了“写内容”的初衷。
- 扩展性虽强,但“用不上”:Halo支持改源码、加插件,比如我能自己集成Elasticsearch做全文搜索,但对个人博客来说,这些“高级功能”根本用不上——我只需要“写文章、别人能看到”,却要为“可能用不上的扩展性”付出维护成本,性价比太低。
1.2 第3年:Hexo——静态生成的“快”,却躲不开“全量构建的痛”
2021年,我实在受不了Halo的服务器成本和维护压力,跟风换成了Hexo——这个基于Node.js的静态站点生成器(SSG),当时在技术圈里因“轻量、免费”火得一塌糊涂。它的核心逻辑和Halo完全相反:本地写Markdown文章,用命令生成全量静态HTML,再上传到GitHub Pages或CDN,不用服务器、不用数据库。
短暂的“省钱快乐”与长期的“低效折磨”
- 成本骤降,但“全量构建”太耗时:Hexo确实帮我省了钱——GitHub Pages免费托管,CDN用Cloudflare的免费版,每月成本直接降到0元。但新的问题来了:文章越多,构建越慢。我当时有300篇文章,每次改一篇文章的标点符号,都要执行
hexo clean && hexo g
(清理旧文件+生成新文件),这个过程要遍历所有文章生成HTML,每次都要等8-12分钟;要是换个主题(比如从Next主题换成Butterfly),生成时间直接飙到20分钟——我经常改完文章,得等十几分钟才能看到效果,耐心全被磨没了。
- 维护“变味”,从“写内容”变成“管文件”:Hexo的文章是本地Markdown文件,我得自己管理文件目录(按年份分文件夹),备份也得手动复制到云盘;要是想给文章加标签、分类,得在每篇Markdown的“头部配置”里写(比如
tags: [Java, SpringBoot]
),300篇文章改一遍标签格式,我花了整整一个周末;更麻烦的是,GitHub Pages的访问速度在国内不稳定,我又得折腾Cloudflare的CDN配置,改DNS、清缓存——省钱了,但没“省心”。
- 扩展性弱,想加功能“没头绪”:作为Java后端,我对Node.js不熟,Hexo的插件虽然多(比如评论插件gitalk),但出了问题根本不知道怎么修——有次gitalk评论区加载不出来,我查了3天文档,才发现是GitHub OAuth配置错了;想加个“文章阅读量统计”,得集成第三方工具(比如不蒜子),还得改主题的HTML模板,对我这个前端新手来说,比写Java接口还难。
1.3 近3年:NotionNext——ISR+Notion,把“省心”和“省钱”焊死
2022年,我在GitHub上刷到NotionNext时,第一反应是“这不就是我要的吗?”——它的slogan直接戳中我:“基于Next.js和Notion API,无需数据库,自动增量生成静态博客,部署到Vercel免费”。作为后端开发者,“无需数据库”“增量生成”“免费部署”这三个点,简直是为“省心省钱”量身定做的。
3年“零折腾”体验:只写内容,不管技术
- 成本归零,维护时间“按分钟算”:NotionNext完全不用服务器、不用数据库——内容存在Notion(免费版足够用),部署到Vercel(个人开发者免费),CDN用Vercel的Edge Network(免费),三年来我没花过一分钱。维护也简单到极致:想写文章,直接在Notion里新建页面;想改内容,Notion里编辑后点保存,NotionNext会自动通过ISR更新页面;甚至不用备份——Notion会自动保存历史版本,误删了也能恢复。我现在维护博客,每周花在技术上的时间不超过5分钟,剩下的全是写内容的时间。
- ISR解决“快与更新”的矛盾:这是NotionNext最核心的优势。之前Halo“实时但慢”、Hexo“快但更新慢”,而ISR直接把两者的优点捏合在一起——既像Hexo一样用CDN分发静态页(访问快),又像Halo一样支持增量更新(改内容不用全量构建)。比如我改了一篇文章,NotionNext不会重新生成所有300篇文章,只会在后台偷偷更新这一篇,用户下次访问时看到的就是新内容,整个过程不用我手动操作。
- 扩展性“恰到好处”,后端能插手:NotionNext的扩展性对我这个Java后端很友好——它支持插件(比如评论用Giscus、统计用Google Analytics),配置一下就能用;要是想加自定义功能,比如“Java接口统计访问量”,我可以用SpringBoot写个简单的接口,再在NotionNext的页面里加个脚本调用接口,不用改NotionNext的核心代码。比如我现在加了个“文章来源统计”:用户访问文章时,前端脚本调用我写的Java接口,记录访问IP和来源,我在Notion里建个“数据面板”,用Notion API拉取统计数据——既不折腾NotionNext,又能发挥我的后端优势。
二、深度解析ISR:为什么它是“省心省钱”的核心?(后端视角类比)
很多前端技术对后端开发者来说,只要找到“类比对象”,理解起来就很简单。ISR(增量静态再生)就是如此——它本质上是“前端的多级缓存策略”,和后端的“本地缓存+Redis缓存+数据库”逻辑完全一致,只是把“缓存的对象”从“数据”变成了“页面”。
2.1 ISR的核心原理:3步实现“快访问+增量更”
ISR是Next.js在2020年推出的技术,NotionNext基于Next.js实现了这套逻辑,核心是“预生成静态页+增量更新+异步再生”,用后端的话讲就是“预热缓存+局部刷新+后台更新”。
第一步:预生成(对应后端“预热缓存”)
- 后端类比:项目上线前,先把热门接口的返回数据缓存到Redis(比如首页商品列表),用户访问时直接拿缓存,不用查数据库。
- ISR逻辑:NotionNext部署时,会先根据你的配置,预生成“热门页面”——比如首页、文章列表页、阅读量前20的文章详情页。这些页面会被生成静态HTML,存到Vercel的Edge CDN(全球分布式节点)。用户访问这些页面时,直接从最近的CDN节点拉取静态页,TTFB(首字节时间)能压到20-50ms,比Hexo还快,因为Hexo的静态页可能只存在一个CDN节点,而Vercel是全球节点。
- NotionNext实例:我博客的首页,NotionNext会预生成“最新10篇文章列表”的静态页,用户访问时不用等数据拉取,直接显示页面——这和我之前在Halo里用Redis缓存首页列表的逻辑一模一样,只是ISR把“缓存数据”变成了“缓存页面”。
第二步:增量更新(对应后端“局部缓存刷新”)
- 后端类比:数据库里某条商品数据改了,只更新Redis里该商品的缓存,不用清空整个Redis。
- ISR逻辑:当你在Notion里修改了某篇文章,NotionNext不会像Hexo那样“全量生成所有页面”,而是只更新“这篇文章的详情页”和“包含这篇文章的列表页”(比如首页、该文章的标签页)。更新的触发方式有两种:
- 自动触发:NotionNext在页面配置里加了
revalidate
参数(默认60秒),比如首页的revalidate: 60
——意思是“60秒内用户访问首页,用CDN里的旧页面;60秒后第一个用户访问时,先返回旧页面,同时后台偷偷拉取Notion的新数据,生成新页面并更新CDN”。下次用户访问,看到的就是新页面。 - 手动触发:如果想立刻更新,不用等60秒,可以调用Vercel的“重新验证”(Revalidate)API。我在Notion里加了个“同步按钮”(用Notion的“按钮块”+Webhook),改完文章点一下按钮,就会触发API,让NotionNext立刻更新对应页面——这就像后端里“改完数据库数据,手动调用接口刷新Redis缓存”,灵活又高效。
- NotionNext实例:我改了一篇《SpringBoot缓存注解实战》的文章,点完Notion的“同步按钮”,NotionNext只更新了这篇文章的详情页和首页(因为首页有这篇文章的链接),整个过程不到10秒,而Hexo要等10分钟——这就是ISR“增量”的核心价值。
第三步:fallback机制(对应后端“降级处理”)
- 后端类比:Redis里没有某条数据的缓存,先返回默认数据,同时后台异步查数据库并更新缓存。
- ISR逻辑:NotionNext不会预生成所有文章(比如我有300篇文章,预生成20篇热门的),对于“未预生成的文章”,用户第一次访问时,ISR会触发
fallback: true
——先返回一个“加载中”页面,同时后台拉取Notion数据、生成静态页并缓存到CDN;下次再有用户访问这篇文章,直接显示静态页。
- NotionNext实例:有篇《Java并发编程笔记》的文章,阅读量不高,NotionNext没预生成。第一个用户访问时,看到“加载中”,1秒后显示文章;第二个用户访问时,直接显示文章,没有加载时间——这和后端“缓存穿透时的降级处理”逻辑一样,既保证了用户体验,又避免了“预生成所有页面”的资源浪费。
2.2 ISR vs 后端渲染(Halo)vs 全量静态(Hexo):核心差异对比
作为后端,我用“缓存逻辑”做了个对比表,能更清晰看到ISR的优势:
特性 | 后端渲染(Halo) | 全量静态(Hexo) | 增量静态再生(ISR/NotionNext) |
核心逻辑 | 每次请求查库→拼HTML→返回 | 本地全量生成HTML→上传CDN | 预生成热门页+增量更新+异步再生 |
访问速度 | 慢(TTFB 500-1000ms) | 快(TTFB 30-80ms) | 极快(TTFB 20-50ms) |
更新效率 | 实时更新(改完立即生效) | 全量构建(改1篇更所有,耗时久) | 增量更新(改1篇更1篇,10秒内) |
服务器依赖 | 必须有云服务器+数据库 | 无服务器(依赖GitHub/CDN) | 无服务器(依赖Vercel CDN) |
“缓存”类比 | 无缓存(或手动加Redis缓存) | 全量缓存(一次生成所有页面) | 智能缓存(预生成+增量刷新) |
用户体验 | 高峰期卡顿(服务器压力大) | 第一次访问慢(构建耗时) | 无卡顿(CDN分发)+ 无等待(增量更) |
三、SpringBoot Halo vs Hexo vs NotionNext:成本、可维护、可拓展性终极对比
这三个框架我用了5年,最直观的感受就是“成本、维护、拓展”的差异直接决定了“能不能长期用”。下面我从“真金白银”和“实际操作”出发,做个详细对比——数据都是我实际使用中的真实记录。
3.1 成本对比:从“每年2400元”到“0元”
成本项 | SpringBoot Halo(2年) | Hexo(1年) | NotionNext(3年) |
云服务器 | 阿里云ECS(2核4G):(首年400元)120元/月 → 1440元/年 | 无(GitHub Pages免费) | 无(Vercel免费) |
数据库 | 阿里云RDS MySQL(1核2G):(首年9.9)80元/月 → 960元/年 | 无(本地Markdown文件) | 无(Notion免费版) |
CDN | 阿里云CDN:10元/月→ 120元/年 | Cloudflare免费版(0元) | Vercel Edge CDN(免费) |
其他工具 | Redis(服务器内置,无额外费用) | 本地构建工具(Node.js,免费) | Notion API(免费版:1000次/秒) |
年总成本 | 1440+960+120 = 2520元 | 0元(但需自己折腾CDN) | 0元(全免费,不用折腾) |
我的真实感受:用Halo时,每年光服务器和数据库就要花2400元,相当于我半个月的房租;Hexo虽然免费,但国内访问GitHub Pages慢,我后来加了个国内CDN,每月又多花30元;NotionNext三年来没花过一分钱,Vercel在国内的访问速度也比GitHub Pages快——这才是“个人博客该有的成本”。
3.2 可维护性对比:从“每天半小时”到“每周5分钟”
可维护性的核心是“日常操作的复杂度”和“出问题后的解决难度”,我用“操作步骤”来对比:
维护场景 | SpringBoot Halo | Hexo | NotionNext |
写一篇新文章 | 1. 登Halo管理后台;<br>2. 新建文章;<br>3. 富文本编辑器写内容;<br>4. 保存(数据存MySQL) | 1. 本地用Typora写Markdown;<br>2. 按格式写头部配置(标题/标签);<br>3. 放到指定文件夹;<br>4. 执行 hexo g 生成;<br>5. 执行hexo d 上传到GitHub | 1. 打开Notion;<br>2. 新建页面写内容;<br>3. 拖到指定数据库(自动分类);<br>4. (可选)点“同步按钮”触发更新 |
改一篇旧文章 | 1. 登后台找到文章;<br>2. 编辑保存;<br>3. (可选)清Redis缓存 | 1. 本地找到对应Markdown文件;<br>2. 编辑;<br>3. 重新执行 hexo g && hexo d | 1. Notion里找到文章;<br>2. 编辑保存;<br>3. 自动更新(或点同步) |
备份数据 | 1. 手动导出MySQL数据;<br>2. 备份服务器上的Halo配置;<br>3. 传到云盘 | 1. 复制本地Markdown文件夹;<br>2. 传到云盘(或用Git提交) | 1. Notion自动备份历史版本;<br>2. (可选)用Notion导出为PDF/Markdown |
解决访问卡顿 | 1. 查Tomcat日志;<br>2. 优化MySQL查询;<br>3. 调整Redis缓存策略;<br>4. 可能需要升级服务器 | 1. 查CDN缓存是否生效;<br>2. 优化HTML体积(压缩图片);<br>3. 切换更快的CDN节点 | 1. 查Vercel监控(是否CDN节点问题);<br>2. (极少出现)重新部署一次 |
每周维护耗时 | 约30分钟(备份、监控、优化) | 约15分钟(构建、上传、备份) | 约5分钟(偶尔同步、看统计) |
我的真实感受:用Halo时,我每天都要登服务器看监控,生怕宕机;用Hexo时,每次改完文章都要等十几分钟构建,耐心全没了;用NotionNext后,我甚至忘了“博客需要维护”——写文章就在Notion里写,改完自动更,出问题Vercel会发邮件提醒,解决起来也只是“重新部署”一下,太省心了。
3.3 可拓展性对比:从“能拓展但用不上”到“需要啥加啥”
可拓展性不是“能加多少功能”,而是“加功能的成本是否匹配个人博客的需求”——对我这个Java后端来说,“能用上自己的技术栈”很重要。
拓展需求 | SpringBoot Halo | Hexo | NotionNext |
加评论功能 | 1. 后台安装“评论插件”(如畅言);<br>2. 配置API密钥;<br>3. (可选)改Thymeleaf模板 | 1. 安装Hexo评论插件(如gitalk);<br>2. 配置GitHub OAuth;<br>3. 改主题模板(HTML/CSS);<br>4. 重新构建上传 | 1. 后台开启“Giscus评论”;<br>2. 配置Giscus仓库;<br>3. 自动生效(不用改代码) |
加访问量统计 | 1. 写Java接口(记录访问IP);<br>2. 改Service层逻辑;<br>3. 部署到服务器;<br>4. 后台加统计页面 | 1. 集成第三方统计工具(如不蒜子);<br>2. 改主题模板,加统计脚本;<br>3. 重新构建上传 | 1. 开启“Google Analytics”配置;<br>2. (或)用Java写接口,前端加脚本调用;<br>3. Notion里建数据面板展示 |
改页面样式 | 1. 找到Thymeleaf模板文件;<br>2. 改HTML/CSS;<br>3. 重新部署服务器 | 1. 找到主题的CSS文件;<br>2. 编辑样式;<br>3. 重新构建上传 | 1. 后台选择主题(支持切换);<br>2. (可选)改Next.js组件样式;<br>3. 部署后自动生效 |
适合的拓展人群 | Java后端开发者(熟悉SpringBoot) | Node.js/前端开发者(熟悉Hexo生态) | 全人群(新手用现成插件,后端可加自定义接口) |
我的真实感受:Halo的拓展性强,但对个人博客来说“太 heavy”——我花3小时加的“点赞功能”,一年也没几个人用;Hexo的拓展对后端不友好,出了问题没法修;NotionNext的拓展“刚刚好”——新手能直接用现成功能,我这个后端能加Java接口,不用折腾核心代码,性价比最高。
四、最终选择NotionNext:不是它“最牛”,而是它“最省心省钱”
5年换了三个框架,我最后选择NotionNext,不是因为它的技术最先进,而是因为它完美契合了“个人博客的核心需求”——用最少的钱、最少的时间,实现“写内容+别人能看到”。
4.1 省钱:每年省大几百元,对个人开发者很重要
作为兼职写博客的后端,我没必要为“博客”花太多钱。Halo每年大几百元的成本,相当于我买两本技术书、参加一次线上课程的钱;Hexo虽然免费,但国内访问要折腾CDN,隐性的“时间成本”也是钱;NotionNext全免费,Vercel的免费额度完全够个人用,Notion免费版的API调用次数也用不完——这省下的服务器内存,我能用来专研更多新技术。
4.2 省心:不用再为“技术问题”分心
我写博客的初衷是“记录Java学习笔记,帮助更多人”,而不是“当博客的运维”。用Halo时,我要担心服务器宕机、MySQL超时;用Hexo时,我要等全量构建、解决插件问题;用NotionNext后,这些问题全没了——写文章就在Notion里写,改完自动更新,访问速度还快。现在我每周花在博客上的时间,99%是写内容,1%是偶尔看一下统计数据——这才是“写博客该有的状态”。
4.3 契合后端思维:ISR的“缓存逻辑”很亲切
作为Java后端,我对“缓存”和“增量更新”的逻辑很熟悉,ISR的设计让我一看就懂——预生成是“预热缓存”,增量更新是“局部刷新”,异步再生是“后台更新”。这种“熟悉感”让我不用花太多时间学新技术,就能轻松上手NotionNext;甚至能结合自己的后端优势,加一些自定义功能(比如Java统计接口),既不折腾,又能发挥特长。
最后:技术选型的本质,是“匹配需求”
5年的博客建站史,让我明白一个道理:技术没有“最好”,只有“最适合”。Halo适合需要深度定制的团队博客,Hexo适合熟悉Node.js的前端开发者,而NotionNext适合像我这样“想写内容、不想折腾”的个人开发者。
现在,我用NotionNext写了100多篇Java后端笔记,访问量从每月几十涨到几千,没花过一分钱,没耗过太多时间——这就是“省心省钱”的价值 这大概就是“技术选型”的终极快乐吧。
- 作者:Honesty
- 链接:https://blog.hehouhui.cn/archives/blog-tech-stack-chahge
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。