引言
自从我启动英国2029年大选网站已经过去8个多月,现在正是撰写介绍文章的好时机,以便后续深入讨论更详细的技术主题。
2024年英国大选宣布后不久,我创建了一个小型网站(https://jonskeet.uk/election2024),最初用于追踪Sam Freedman的选举预测并与实际结果进行对比。网站范围有所扩大,但从未打算做得特别精致或面向广大受众。从首次代码推送到选举日总共历时约4周。
然而在选举日当天,我决定将这个体验延续下去,注册了election2029.uk域名,创建了新的GitHub仓库和GCP项目,并推送了初始占位页面。关于2024年网站的技术细节,请参阅我早先关于选举之夜的博文——除非为了对比目的,我不打算重复讨论任何技术细节。
对于2029年网站,我设定了更广泛的目标受众和更长的开发周期。很少有"小型"项目(就贡献者数量和预期投入时间而言)的截止日期如此长远。虽然下次英国大选日期尚未确定,但我个人推测很可能在2029年5月。如果预计对下次选举的关注度将在2028年底或2029年初升温,那么从首次注册到网站需要真正具有吸引力,我还有超过4年时间。
选举日期作为一个截止时间点很有趣,它既"非常宽松"(我从未在如此长的时间尺度上工作过),又非常紧迫(如果网站在选举结束后才完成,就将毫无意义)。
截至2025年3月,网站已具备我预期包含的大部分功能,因此我希望大部分数据模式都是合适的,即使数据呈现方式可能会有很大变化。仅在过去8个月中,我在技术方面就获得了许多乐趣,并希望通过博客文章分享这些经验。
需求目标
- 对选举爱好者和普通公众都具有价值和信息量(思考"普通选民"想知道什么可能是最大挑战)
- 用户完全免费使用——无订阅、广告甚至Cookie
- 用户访问速度快——任何页面都应瞬间加载,且数据传输量极小(外部JavaScript库可能是数据传输的主要部分,仅在看地图、图表等可视化内容时需要)
- 个人成本低廉——除非网站意外爆红,否则不应担心日常运营成本(即使最乐观情况下,也仅在选举活动几周内可能产生财务影响)
- 个人开发乐趣——如果项目变成负担而非乐趣(且没有重要用户群会感到失望),我可以随时关闭
- 事实准确性——不旨在表达政治倾向或进行政治分析(在选择纳入哪些投票数据时可能存在偏见风险,但实际不会排除任何主流数据)
未来技术主题
我计划逐步撰写以下技术主题的博文(某些文章可能包含多个主题):
- 高层架构和技术选型
- 数据模型:ElectionContext和ElectionCoreContext
- 第三方API和数据转换
- 存储方案选择(Firestore和文件存储)
- JavaScript开发实践
- 在1MB文档中存储超过200万个邮政编码
- 不可变性、记录和性能优化
- 业余项目中的多环境配置
- 在Cloud Run中实现"后台服务"的技巧
欢迎在评论中提出其他希望我涵盖的技术主题。