项目选型的一点个人看法
大概半年前,把 furryeventchina.com 域名捡起来做了一个兽展日历,现在回过头去看,当初做的一些选型还是略有草率,所以写篇日记水一下(不)。
熟练比什么都重要
除非你在做一个玩具性质(玩完就丢再也不动的那种)或者是纯粹为了想体验新的东西开的项目,否则尽量避免使用那些看起来又花哨又新的东西——尤其是UI库。
选择一个完全陌生的UI库开始项目意味着你的界面开发效率不会很高:你要频繁查阅文档,找出拼积木的最佳实践,从响应式布局(Layout)到各种组件,你基本都要看一遍,在你对这个库大致有哪些组件和它们的props了然于心前,你总是免不了要频繁在IDE和文档前切换。如果你很赶时间,那么这种事情会让你觉得无聊。
此外,还要注意谨慎选择那些年轻的库,并不是说年轻的库就一定不好,只是有的时候,存在时间更久的库相对来说功能更完备,我管这个叫“是经过业务锤炼的,屎山但是好用”,比如antd,一说起来好像大家都有意见,但是真要糊业务的时候会发现一个能打的都没有。而有的看起来还不错的东西,可能实际上手写业务的时候发现缺这缺那的,只能实现十分简单甚至是简陋的需求,再复杂一点的就做不了,要二开,而你调研的时候多半只是扫了一眼组件列表,以为该有的好像都有,就开心地跳进了坑里。
勿在浮沙筑高台
FEC启动的时候并没有想那么多,我甚至没打算要给它写一个CMS,当时我的想法是一年最多有十个兽展不得了了。这么点数据量拿 JSON 都能处理,我甚至期望我可以一年仅维护数次这个网站,结果后来脸打得啪啪响。(笔者注:光2023年全年就收录了26个兽展,2024年截止到1月就已经收录了17个兽展,这还不算某些体量太小没有搞大宣发的小聚。)
当然,我最后是肯定没有选择用JSON来存储数据的,之前在新小写serverless的时候用过一个简单的KV在线数据库,感觉还行。这次又调研了一些数据库即服务平台,横向对比后选择了 Xata。“这么点数据量其实选啥都无所谓。”,我抱着这样的想法在Xata上面构建了第一个可用版本。
然而随着时间的推移,我开始萌生了把网站改造成实时接口获取数据的想法,其中之一个原因是在1.0架构的时候,每次更新内容必须触发一次GitHub上Main分支的改动来启动CI/CD,所以要么改点什么推上去,要么手动触发一下工作流。第二个原因是我还想要支持站内搜索功能,本来Xata是原生支持的,如果不做改造,就要接入第三方搜索,比如:algolia。但是在大陆的话,这个服务的可用性和速度感觉又很堪忧。当然 Xata 也有这个问题,所以思来想去要不还是搬回国内云服务的机器上,再搞个ES什么的。但是这样一来,等于绕了一大圈还是回到了自己维护基础设施的路上,我所设想的一切infra都交给云的未来还是没有实现。(至少在国内这个网络情况下是不行,如果完全是出海产品问题应该不大)。
所以,如果一开始就把目光稍微放长远一点,选择了比较常用的基础设施和常见的做法,也许就不会在项目启动没多久后就面临着大修大补的境地。
总结
做了这么多年的玩具,个人最强烈的心得就是这两点,总结就是在严肃的场景下“选熟练的”和“别搞花活”。当然这也不是绝对正确的圣经,如果就是想体验一下新的轮子,那就开心就好~