开发

可可托海没有海2.0上线

船新版本,需要你的反馈

2023年3月8日
可可托海没有海2.0上线
本文共有1628字,预计阅读时间8分钟
距离上一版博客上线已有小半年时间,当初那个基于Gatsby的网站是我开发的第一个项目,踩了不少坑,留下不少遗留问题。在当时我就说过将来要用更复杂的技术重构一版,实现更多的功能。
现在开发水平略有提升,尤其是又有了AI的加持,我终于实现了这个目标。

技术架构

CMS依然采用Strapi,但前端框架从Gatsby换成了Next.js。Gatsby只有静态模式,虽然快,但每次更新都要重新构建;Next.js有多种模式,还可以组合。其渐进式静态生成Incremental Static Regeneration功能可以实现在构建后依然能生成新内容的缓存。
好吧,Gatsby没什么满足不了我的,我就是单纯地想学个新框架。
另外语言选择了Typescript。写的很痛苦,可以说一大半debug时间花在了消类型警告上。
我延续使用了GraphQL,这也是Gatsby的方式。对比过后我很喜欢这种按需索取的方式,虽然那么多括号看着真的很头大。
图片展示方面我没有选择自己造轮子,因为上一版自己造的既丑又难用。这一版我直接用了React Photo AlbumYet Another React Lightbox实现了摄影卡片页图片网格和摄影详情、文章详情的大图预览效果。
https://darmau-image-1256887306.cos.ap-hongkong.myqcloud.com/2023_03_08_22_16_27_85b7de66b6_bc2d593c2a.jpg
摄影页
https://darmau-image-1256887306.cos.ap-hongkong.myqcloud.com/2023_03_08_22_16_27_85b7de66b6_bc2d593c2a.jpg
大图浏览
Strapi编辑器用的是CKEditor 5,正文转换用的是html-react-parser
另外还有个Node.js服务用于提取图片中的EXIF信息,具体可见这篇《利用ChatGPT实现一个Node.js API

AI的作用

这次最大的变化就是,我开始利用ChatGPT来帮我实现很多逻辑和功能。没有AI我不可能在这么短时间内把这个项目开发出来。

Typescript

最常用的用法就是帮我找出Typescript报错的原因并告知如何修改。我不知道是不是我之前学的教程设计的不好,总之我遇到的Typescript问题都不是那么容易解决的,也完全不知道该怎么解决。还好有ChatGPT,帮我消除了所有类型警告。

React Hooks

借助AI,我使用了大量React高阶(……应该算吧)用法。想要一种效果不知道怎么实现,问它就好了。

Next.js

不得不说Gatsby的文档写的就是比Next.js详细,我遇到的很多问题在Next官方文档里并不能找到解答。利用AI,就算得不到正确答案,但稍作修改往往就没问题了。

新的变化

设计最大的变化是,写样式的方式从CSS Module换到了Tailwind。虽然一大堆className的确严重影响代码阅读体验,但这次我的样式来源基本都取自tailwindUI,大多数时候不需要写太多样式。代价就是个性没那么强,但总体效果我还挺满意的。
除了上文提到的相册浏览和展示方式的变化以外,我还比较满意正文的设计。目前的正文浏览体验我个人感觉比上一版要好很多。
我还加了一些小细节,比如文章字数统计和预计阅读时间,区分正文里的内外部链接以获得路由支持,摄影详情页支持显示EXIF和拍摄地点——只显示第一张,因为地图是按加载次数收钱的。
功能方面最大的变化应该就是增加了英文版。当初在这个多语言切换上花了超多时间。未来的打算是希望这个网站能有更大影响力,不仅在汉语使用者中。

准备要做的

因为Strapi的查询并没有支持按某个字段排序并找到相邻项,所以目前还没有上一版拥有的“上一篇/下一篇”功能。未来打算自己实现一版。毕竟这个功能对留存还是挺重要的。
相关推荐。我就没本事写算法搞自动推荐了,只有手动推荐。目前在CMS这边早就留有配置,会将相关主题的文章、摄影或视频链接起来,比如在《一个时代的结束——哈密三道岭之废墟》中会推荐关于三道岭的视频《三道岭·废墟》。
搜索。之前在上一个版本中,我做了一个基于algolia的搜索功能。但它是按请求次数算钱的,不知道当时搜到的代码对不对,总之每敲一次键就会产生一次请求,对汉语来说打一个字会产生三四次请求。导致很快就触发付费门槛。但一查记录,发现最多的搜索的都是什么“sou suo”、“测试”、“test”这种……
那还花什么钱啊!撤掉!
但在这一版中,我已经部署好了开源的meilisearch,也和Strapi集成好了,就等前端集成了。在未来肯定会加实时搜索功能的。

不打算做的

黑暗模式。因为我明白了,我并不喜欢黑暗模式,之前做只是因为跟风。黑暗模式对阅读效率的影响很大,设计起来还很费功夫。这种花费高收益低的事没必要做。
跟博客无关的个人板块,如作品集。博客应该保持纯粹,应该只有一种内容:输出。
作品集属于展示,应该放到其他个人展示网站上。

反馈

因为本站含有大量图片,在测试阶段就已经耗费了大量Vercel的图片处理点数,估计上线后很快就会耗尽免费资源。于是我把next服务放到了我的服务器上。在访问的时候,偶尔会遇到卡顿,那是正常显现,因为服务器在压缩图片。
网站刚上线,需要各位的反馈。不管是产品还是设计,或者是性能及网络,有任何问题和建议请在评论区留言。

评论