开发

可可托海没有海1.0项目复盘和2.0计划

螺旋型前进

2023年1月3日
可可托海没有海1.0项目复盘和2.0计划
本文共有1079字,预计阅读时间5分钟
在去年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,让这个过程自动化。​
​功能方面,把之前想做但没实力或懒得做的诸如全屏大图预览、实时搜索做了,评论、访问分析从第三方服务改成自部署。
​增加i18n支持,提供中英两种版本。
​​设计上精简首页内容,只展示文章、摄影、图片。优化微交互。优化黑暗模式效果,支持手动切换。

最后

顺便一说,learning by doing真的是最有效率的学习方式。虽然看上去经常要脱离主线,但学习支线的经历不仅会拓宽能力,还会加深对主线的理解。
​此前我就陷入了这种误区,深陷于繁杂的知识体系而迈不出第一步。
​其实可以完全不用管细节,设定一个实际目标去实现就行了。遇到瓶颈就离开主线去支线。
​写完以后才发现代码重复太多很不优雅?那时候再去了解设计模式。
​新增功能的时候发现积重难返?推倒重写,再来一次你考虑的肯定更周全。
​无法理解闭包、原型链、科里化?那就不要管,等需要的时候再去理解。
关键是走出第一步。

评论