人生中第一个比较简单的全栈项目。水一水博客。
过去谈论 JavaScript 多是口嗨,从无实践,现在终于有点真实体验了。
首先是开发体验。学校电脑是 i3-6100,3.7Ghz 主频,8G 内存。按理说是完全够用的,结果 vscode 加 Astro 插件编辑代码极不流畅,甚至字符敲击到显示都有一定滞后感。不知道同机房用 vscode 写代码的体验如何。不过我没有仔细分析卡顿原因,大概是硬件老化了吧。
实现过程中遇到了这样的问题:有一个二元组列表,需要多次查找给定二元组是否在列表中。本以为随便用 Set 存一下就能处理了,结果发现 JavaScript 只支持 primitive 比较,非 primitive 比较的实际上是元素地址。这就相当烦人,多数情况需要 serialize 成字符串。好在我的情形中数据本就是字符串二元组,容易处理,但如果是浮点数呢?更复杂的 object 呢?
实现功能时总有各种担心。平常做 OI 题的时候各种输入数据范围什么的都是标识好的,可以一键提交测试。今写项目,则是处处不确定,不确定 CWOI api 返回什么,不确定用户会输入什么。但最终我还是一点测试都没有写,相信用户输入,出错就直接 500 摆烂。
处理登录是最麻烦的。虽然用了 auth-astro(封装 auth.js),但它文档不太详细,大概是希望大家多用 OAuth 登录吧。折腾半天才让 TypeScript 不报错。错误处理完全做不来,也只能无脑给用户抛个 500。
在前端更新网页极头痛。明明是特别简单的功能,写起来就及其烦人。曾我试图写一个点赞的组件,希望不刷新就能更新点赞数,结果就是同样的渲染代码,Astro JSX 得写一边,还得前端用各种 DOM api 写一边。最后由于懒,且考虑到点赞确实没有什么用,终没写。而评论添加,删除之类的功能也都是直接通过刷新更新页面的。后悔用 Astro 了,少一丁点 JavaScript 并无什么意义,反而还增加了更多刷新和更多开发困扰,若引入 React 之类的话还又不如用 Next.js 这种专门的。不过屎山已经写好了,懒得改,不去碰才是最好的。
额,好像少点 JS 好像性能确实好不少:
还有样式,完全不懂得怎么设计网页。想着丑点就丑点吧,能用就行。
数据库也很头疼,用的 Vercel 提供的 postgresql,当然我这个数据量用什么数据库好像都可以。我比较懒,直接生产服务器调试 sql。后头看到 Astro DB 支持基于 libsql,可能会方便一点,至少本地容易搭建,容易 dump 数据,但暂不打算迁移。
还有 Cloudflare 绕地球一圈在学校访问速度比用 Vercel 香港快,国内网络太神秘。
必须感叹 JavaScript 就是一个奇迹。初只用十天就设计完成,各种神秘语言特性,处处给人「玩具语言」之感,现今竟有如此庞大的生态。有「世界是个巨大的草台班子」之感。
