第三个网站 Read PDF Aloud 上线了。

12 月 14 日开工,1 月 1 日凌晨上线第一版,到今天把已知的 bug 和不完善的地方全部修改完,一共花了大半个月的时间,是我工期最长的一个站。
Read PDF Aloud 核心的功能和交互相比之前的网站都要复杂,所以踩了不少坑,都是经验不足导致的。
程序设计上,这次核心的交互逻辑是用面向对象的方式完成。
svelte 的状态管理方式天然适配面向对象范式,官网文档上也专门就 runes 在 class 内的使用做了介绍。这次真正使用面向对象,我也感受到了面向对象的优势,心智负担低,越写越顺手。
但这一切建立在对象设计合理的基础上。如果一开始规划有问题,后面少不了返工。我这次就经历了推到重来的过程。
第二个坑是 CloudFlare Workers。这次的涉及到 PDF 的文字提取和 TTS Api 的调用,所以需要一些简单的后端功能。我最初为 PDF 解析和 TTS Api 调用编写了相应的后端接口,都非常简单。
但是,在我第一次部署到 Worker 后,我就遇到了后端报错。一开始我还以为是我部署方式不对,后来我又怀疑是不是我用的库不适配 Worker 环境。
看完 Worker 的后台日志以后,我才发现,错误原因是 Error 1102: Worker exceeded resource limits。
简单来说,就是 Worker 对单次请求消耗的 cpu 时间有限制。免费版是 10ms,付费版是 30s。一些计算量比较大的任务,难免会占用更多 cpu 时间。当时我心都凉了,一度考虑要不要租个服务器。我还上网查了一下,发现踩到这个坑的,不止我一个。
后来理智说服了我,在没有赚钱的情况下,不能乱花钱。那就只能让用户体谅一下我的难处了,把 PDF 解析放在了用户的浏览器里。
剩下的坑就是一些交互设计上的问题了。
我一直觉得写 ui 最浪费时间,因为很容易陷入细节调试的地狱,我就看这个设计不顺眼,但是又不知道怎么改好,想太久,时间就白白浪费了。
之前做的网站交互都比较简单,这个问题不明显。这次的交互方式更复杂,尤其是阅读器的界面,我边想边写边改,来来回回拉扯了两天。昨天上线,发现交互有问题,又改了一天。现在这版算是没有大毛病了。
编程好难啊。
截图来自: