(Updated: 2024年9月27日
)
我的博客终于上线了!
#博客
#技术
#Next.js
折腾了两个周末,我的个人博客终于上线了!说实话,这比我预想的要复杂一些,但也学到了不少东西。想在这里记录一下整个过程,也算是个小小的里程碑。
为什么要做这个博客?
其实我一直想有个自己的博客,但总觉得太麻烦。之前试过几个平台,要么限制太多,要么广告太多。最后还是决定自己动手,丰衣足食。
主要想通过这个博客:
- 记录技术学习笔记,免得到处找
- 分享一些项目经验,帮到有需要的人
- 练习写作,毕竟程序员也得会表达
- 顺便展示一下自己的技术能力
技术选型的纠结
一开始我在技术选型上纠结了很久:
方案一:静态站点生成器
- 优点:简单快速,免费托管
- 缺点:定制性差,功能有限
方案二:从头开始写
- 优点:完全可控
- 缺点:工作量太大,可能做不完
方案三:用现成框架(最终选择)
最后选了 Next.js,原因很简单:
- 我平时工作就在用,比较熟悉
- 性能好,SEO 友好
- 生态丰富,遇到问题容易解决
- 部署简单
开发过程中踩的坑
设计问题:完美主义害死人
一开始我想做个特别炫酷的设计,结果花了一个周末还在调 CSS。后来醒悟过来,先做个能用的再说。
现在的设计很简单,但我觉得够用了:
- 干净的排版,阅读体验好
- 响应式设计,手机也能看
- 暗黑模式,晚上看文章不刺眼
功能取舍:MVP 思维
我一开始想加很多功能:
- 评论系统
- 用户登录
- 文章点赞
- 搜索功能
后来意识到这些都不是核心功能,先砍掉,专注把基础功能做好。现在的博客只有:
- 文章列表和详情
- 标签分类
- 简单的搜索
- RSS 订阅
性能优化:意外的收获
本来以为性能优化很简单,结果发现坑不少:
// 图片懒加载,这个真的很有用
const LazyImage = ({ src, alt }) => {
const [isLoaded, setIsLoaded] = useState(false);
const [isInView, setIsInView] = useState(false);
const imgRef = useRef();
useEffect(() => {
const observer = new IntersectionObserver(
([entry]) => {
if (entry.isIntersecting) {
setIsInView(true);
observer.disconnect();
}
},
{ threshold: 0.1 }
);
if (imgRef.current) {
observer.observe(imgRef.current);
}
return () => observer.disconnect();
}, []);
return (
<div ref={imgRef} className="lazy-image-container">
{isInView && (
<img
src={src}
alt={alt}
onLoad={() => setIsLoaded(true)}
style={{ opacity: isLoaded ? 1 : 0 }}
/>
)}
</div>
);
};
这个简单的懒加载组件让页面加载速度提升了 40%,真是意外的收获。
部署的波折
Vercel 还是自建?
我一开始想自己租服务器部署,觉得这样更自由。但后来算了一下成本:
- 服务器费用:每月至少 50 元
- 维护时间:每周至少 2 小时
- 可靠性:自己处理各种问题
最后还是选择了 Vercel,虽然有一些限制,但省心太多了:
- 免费额度够用
- 自动部署
- CDN 加速
- SSL 证书自动处理
域名和 HTTPS
域名倒是简单,在阿里云买了个 .com 域名,一年 60 元。HTTPS 也不用自己配置,Vercel 自动处理了。
现在的技术栈
简单总结一下现在的技术栈:
- 前端:Next.js 15 + React 19 + TypeScript
- 样式:Tailwind CSS(写起来真的很爽)
- 部署:Vercel(免费版本)
- 域名:阿里云
- 图片存储:Vercel(暂时够用)
接下来的计划
博客只是个开始,我还有一些想法:
短期计划
- 多写几篇技术文章
- 优化搜索功能
- 添加文章统计
- 做个友链页面
长期想法
- 添加评论系统(可能用 GitHub Issues)
- 做个邮件订阅功能
- 开放 API 给其他开发者
- 也许做个移动端 App?
写在最后
做这个博客的过程比我想象的要长,但也学到了很多。不仅是技术上的,还有产品思维、用户体验等方面的思考。
如果你也在考虑做个个人博客,我的建议是:先做个能用的,再慢慢优化。完美主义是项目的大敌。
希望这个博客能坚持下去,也希望我的文章能帮到一些人。如果你有什么建议或者想交流,欢迎随时联系我!
最后,感谢你读到这里,这对我来说意义重大!