文章摘要
作者原本使用Racket和Pollen搭建博客系统,但发现过于复杂导致维护困难。在考虑重写时,虽然JavaScript是最熟悉的语言,但因其生态变化太快而放弃。最终选择Lua,因其简单稳定,适合长期维护个人博客。这反映了技术选型时长期可维护性的重要性。
文章总结
我为什么选择Lua搭建博客
技术栈的演变
这个博客最初采用基于Racket的技术栈,配合Pollen框架和大量自定义代码。但后来发现这套系统反而成了负担——静态生成器强行模拟动态网站编辑界面的设计,导致维护成本过高。虽然类似Grav CMS的方案能很好实现这种需求,但我的实现方式并不理想。
技术选型的考量
在重构博客系统时,JavaScript本是首选语言(作为日常使用最熟练的语言),但考虑到长期维护的可持续性,最终放弃了该方案。通过与同行交流发现,许多自建博客系统面临的核心挑战在于:技术生态的迭代速度远超代码库的更新频率,这在JavaScript生态中尤为突出。
JavaScript生态的困境: - 浏览器端的JS具有极好的向后兼容性(1995年的网页仍能运行) - 但NodeJS/NPM生态却频繁出现破坏性更新,十年前基于旧版Node的代码很可能已无法运行 - 类似问题也存在于Ruby等其他语言(例如朋友维护的Ruby 2.0博客系统)
Lua语言的优势
Lua的独特价值在于: 1. 极慢的演进速度:从2006年的Lua 5.1到2020年的Lua 5.4,核心语法几乎未变 2. 极简的依赖:仅需C89编译器即可构建 3. 轻量级运行时:比JavaScript更易掌握和内存驻留
现有架构设计
- 经典CGI模式:每个请求独立进程处理
- 数据存储:SQLite数据库
- 模板引擎:基于Mustache实现动态渲染
- 性能考量:历史最高单周5万访问量,现有架构足以应对
开发哲学
- 最小依赖原则:仅通过Luarocks引入约10个核心依赖
- 自主实现关键组件:包括200行的CGI库、Micropub、IndieAuth等协议支持
- 正在挑战:手工实现WebMentions和Microformats2解析
长期维护优势
- 代码可掌控性:所有逻辑都能保持在"大脑内存"中
- 跨时代兼容:预计未来10-20年无需重大修改
- 渐进简化:从JS到Racket再到Lua,每次迁移都使系统更轻量化
核心选择标准
- 可完全理解的编程语言
- 能自主构建运行时环境
- 低资源消耗且易于原生扩展
Lua完美契合这些需求,这种选择既非盲目追求"无聊技术",也不是妥协,而是对可持续开发的理性实践。自2001年在macOS 8开始博客生涯以来,这次的技术决策最能保障内容的长期可维护性。
(注:保留原文的技术术语链接和关键数据,删减了部分个人情绪化表达和冗余的技术细节)
评论总结
这篇评论主要围绕博客引擎实现和Lua语言使用展开讨论,主要观点如下:
- 支持简单博客实现的观点
- 认为简单工具即可满足需求:"I spend a lot of time blogging but all I use is a ~50 line Python file" (azhenley)
- 推荐轻量级方案:"You could also do something like this, have Caddy webserver parse your md files" (indigodaddy)
- 对Lua语言的争议
- 支持方认为Lua轻量高效:"LuaJIT is awesome. I've been converting my Bash scripts/functions to it" (pmarreck)
- 反对方批评其语法和兼容性:"I disliked the ergonomics of the language...Lua 5.1 to 5.2 was a fairly significant breaking change" (behnamoh, TheCycoONE)
- 其他技术方案建议
- 推荐替代工具:"redbean.dev could be just perfect fit for you" (mochja)
- 比较不同语言:"couldn't anything you say about Lua also be said about JS?" (mcdow)
- 怀旧与创新
- 怀念自制博客的传统:"I miss the days when 'implement your own blogging engine' was popular" (simonw)
- 探索新技术方案:"what are the advantages/drawbacks of making your own tech stack versus xslt?" (vogu66)
总结:讨论呈现了对博客实现方式的不同偏好,从极简主义到完整解决方案都有支持者;同时关于Lua语言的适用性存在明显分歧,既有忠实用户也有批评者。