Andre Alves Garzia · 2025-10-03

为何我选择 Lua 构建个人博客

摘要

Andre Garzia 分享了他将博客从 Racket 迁移到 Lua 的决策过程。他发现 JavaScript 生态虽然熟悉但更新过快导致维护困难,而 Lua 凭借缓慢演进(5.1 到 5.4 跨越 14 年)、仅需 C89 编译器、依赖极少等特点,成为理想选择。他采用 CGI + SQLite 的"老派"架构,自行实现 Micropub、IndieAuth 等功能,将依赖控制在约 10 个,确保整个系统可完全理解和长期维护。

内容框架与概述

文章开篇介绍了作者原有博客系统的困境:基于 Racket + Pollen 的静态生成器试图模拟动态网站体验,导致运维复杂度不断攀升,写作频率受阻。面对重写选择,作者虽然最熟悉 JavaScript,却观察到整个 JS/NodeJS 生态存在严重的兼容性问题——浏览器端 JS 极度向后兼容,但 NodeJS 和 NPM 生态却频繁引入破坏性更新,十年前的代码往往无法正常运行。

作者随后阐述了选择 Lua 的核心理由。Lua 演进极为缓慢,从 2006 年的 5.1 到 2020 年的 5.4,变化量远小于同期其他语言。语言本身小巧,仅需 C89 编译器即可启动,嵌入和扩展都非常便利。作者坦言自己的博客访问量峰值也不过每周 5 万,完全不需要 NodeJS 那样的高并发能力。

在实现层面,作者采用了 CGI 脚本配合 SQLite 数据库的传统架构,每个请求独立运行一个进程。他刻意将依赖控制在 10 个左右,许多功能如 CGI 库、Micropub、IndieAuth 都亲手实现。这种极简主义策略让他能够完全理解并掌控整个系统,避免了"依赖地狱"带来的升级压力。文章最后总结了技术选型的核心心法:选择缓慢演进、可完全理解的技术栈,让内容能与时间同行。

核心概念及解读

缓慢演进(Slow-moving):指编程语言或技术栈更新频率低、保持长期向后兼容的特性。Lua 从 5.1 到 5.4 跨越 14 年,变化极小,这让基于它构建的系统可以在未来十年甚至二十年内无需大幅修改。

依赖地狱(Dependency Hell):大量外部依赖包带来的维护风险。作者将博客依赖控制在约 10 个,并自行实现核心功能,避免因第三方包更新或废弃导致系统无法运行。

Batteries-not-included:Lua 的设计哲学,核心语言精简,不内置大量功能。这迫使开发者按需扩展,虽然初期工作量增加,但换来了对代码的完全掌控和理解。

CGI(通用网关接口):一种传统的 Web 服务架构,每个请求启动独立进程处理。虽然资源效率不如现代方案,但架构简单透明,非常适合低流量个人博客。


原文信息

字段内容
原文Why I choose Lua for this blog • AndreGarzia.com
作者Andre Alves Garzia
发表日期未知

此摘要卡片由 AI 自动生成