在去年9月底我开始个人网站的设计和开发,10月中旬上线。到现在已进行了多次新增功能、修复bug和性能优化。这些变动有肉眼可见的:移动端布局的调整、新增订阅表单、hover动效优化、点击文章目录跳转时锚点定位更准确等等。也有不太容易发现的调整:将文章详情导出为PDF时样式不会再错乱、输出的RSS支持全文预览并且附加了样式、增加了结构化搜索信息……上线三个多月来我也逐渐发现了很多设计和开发上的问题。
设计存在的问题
设计上最大的一个问题是结构不合理。既想在首页介绍自己又想展示各类内容,结果就是首页内容太多,重点不明显,还拖慢了加载速度。另外还有很多细节上的缺陷,都是当初设计过程没有考虑周全导致的。开发存在的问题
版本管理
因为这是个人项目,所以我完全没有考虑怎么用Git。总共有两个分支,一个main是线上版,一个dev用于测试。在dev写完就merge到main发布。commit非常随意,选择哪几个文件提交、怎么记录,全看心情。pull request时选择直接merge、rebase还是squash也很随意。最终累积出了几百个commit,乱七八糟没法看。测试
另外我也没有测试流程。写差不多了就merge到main发布,经常发生上线后才发现bug,于是赶紧修复再merge一次。很多时候的修改仅仅只是修改typo。可扩展性
最初我完全没考虑运维这回事。数据库、CMS就按官方教程来。但到后来我希望在同一个服务器跑其他服务的时候才发现瓶颈:我没法做到开发部署其他服务的时候不影响主站。2.0计划
因为有了这么多技术负债,我决定今年来一次大改版。除了重新设计,考虑所有细节,技术上也会有翻天覆地的升级。目前用的是Gatsby,这种静态框架速度非常快,但随着功能增加,构建时间越来越长,生成的文件越来越多。下一版我打算用Next.js写前端,结合服务端渲染。后端的改进首先就是容器化。数据库、CMS、Web服务、搜索、评论、分析全部上docker。还要重新设计数据结构。比如现在在CMS上文章封面是可选的,但在前端没写相应逻辑,导致如果没有给文章设置封面build的时候会报错。目前每次添加内容的时候,都要去Gatsby Cloud上手动构建。这次需要研究下CI/CD,让这个过程自动化。功能方面,把之前想做但没实力或懒得做的诸如全屏大图预览、实时搜索做了,评论、访问分析从第三方服务改成自部署。设计上精简首页内容,只展示文章、摄影、图片。优化微交互。优化黑暗模式效果,支持手动切换。最后
顺便一说,learning by doing真的是最有效率的学习方式。虽然看上去经常要脱离主线,但学习支线的经历不仅会拓宽能力,还会加深对主线的理解。此前我就陷入了这种误区,深陷于繁杂的知识体系而迈不出第一步。其实可以完全不用管细节,设定一个实际目标去实现就行了。遇到瓶颈就离开主线去支线。写完以后才发现代码重复太多很不优雅?那时候再去了解设计模式。新增功能的时候发现积重难返?推倒重写,再来一次你考虑的肯定更周全。无法理解闭包、原型链、科里化?那就不要管,等需要的时候再去理解。