博客迁移到 Hexo

终于决定还是将博客从 Typecho 动态网站变为 Hexo 静态站 😳

为什么要迁移

个人博客从 2015 年 5 月 12 日 星期二 20 时 39 分 39 秒建立,一直使用的都是 Typecho。它轻巧、简洁、高效并且还是 PHP 开发,各项都能符合我的诉求。

Typecho 从 14 年 10 月发布 1.0 正式版发布后,时隔 3 年才在 2017 年 10 月发布了 1.1 版,果然是「念念不忘,必有回响」😒 。

从 2015 年到 2021 年,期间也少不了折腾:各种主题、插件、优化,后面也把自己折腾过的东西的稳定版部分开源来出来,然后被邀请加入 Typecho Fans 的插件开发小组,开源出来的东西当然也会继续维护 👌。

经历了各种折腾后,最后还是得回归到博客本身的意义上:沉淀、分享,而不是花费时间和精力在这些 fluff 上

Typecho 还适合我吗?当然!经过我不断的打磨和优化,已经能满足我绝大部份的诉求了。但是,它是需要自运维的,也就是说我总是得花费时间和精力在它的维护上,虽然我已经可以借助 Docker 把它的部署时间缩短到 1 分钟以内,但是还是得依赖我有个服务器来保证它的正常运转,我也不缺这个服务器,但是我缺的是精力。

其实有一个终极形态:自己实现一个静态化编译器,把 Typecho 编程静态化发布。但是那我为什么不直接用已经成熟的静态博客引擎呢?

选择博客引擎

既然决定了迁移到静态博客,从 Site Generators 里面经过成熟度、活跃度、流行度等方面比较,最终选择了 Hugo 和 Hexo。

二选一就比较简单了,直接都跑起来对比就行,都体会了一下,静态博客都大同小异,彼此之间的迁移成本不高。

Hugo 在性能上确实能打,这个在语言层面就决定了。除此之外 Hugo 对比 Hexo 没有明显的优势,在部署生态上俩者的支持都差不多,毕竟最后都是静态文件部署属,都是于 JAMstack。

但是在主题和插件生态上差别就大了,Hugo 目前排名较高的主题是 olOwOlo/hugo-theme-even,是 Hexo 的移植版,找了一圈基本没找到能和 next-theme/hexo-theme-next 打的,无论是完整度、成熟度、活跃度还是维护持续性,其实 Hugo 还有很多很漂亮但是最后烂尾的主题(好可惜):dillonzq/LoveIt

Hexo 用 JavaScript 写的,一堆搞前端的人做主题。

Hugo 用 Go 写的,一堆搞后端的人做主题。

你说哪个靠谱?

V2EX 网友

最后对比下来,除了编译速度这个实在打不过之外,Hexo 能匹配我的诉求:完整、成熟、持续维护。

Hexo 的编译我交给了 GitHub Actions,根据 Hexo 官方的 benchmark 结果来看 300 篇文章耗时 15s,到 300 篇再说✍️。

迁移实操

既然选择了 Hexo,那下一步就是主题了。

前端技术的发展是日新月异,没有长期维护,那用户体验是无法稳定保障的,还有不断出现的浏览器新特性。

比如部分浏览器有提供「图片懒加载」原生特性,无需 JavaScript 即可实现该功能,这块就需要主题维护者适配。

PS:开发版的 typecho-markdown 在图片渲染的时候会自动支持该特性👻 。

browser-native-lazy-loading

我自己也做过 Typecho 的主题优化,对细节的优化是无止境的,结合自身诉求,最后的主题诉求是:成熟 > 持续维护 > 功能完备。

最后选择了 next-theme/hexo-theme-nextppoffice/hexo-theme-icarus,还是俩者都体验了下。

从「撞衫概率」角度来说更倾向于 Icarus,但是它对自定义不够友好,需要直接修改主题源码实现,而 Hexo 5.0 是支持 NPM 方式安装主题的,那这样就没办法修改了,除非把主题源码提交到代码里面去,这样又会涉及到后续版本更新和潜在冲突的问题。

icarus-example

最后选择了 NexT,它对页面布局、样式的自定义修改提供了专门的配置和注入 API,除了「撞衫概率」高一点外,该主题确实很强👏。

后面就是常规操作了,相关资料很多,也有些过时的,这里备注下:

  1. 配置 GitHub Actions,push 代码自动编译输出到 GitHub Pages,只有 Pro 用户才能配置私有仓库给 GitHub Pages
  2. 记得把 CNAME 文件加到 source 目录下,不然每次编译后 CNAME 配置会丢失,CNAME 内容就是你期望的自定义域名
  3. 评论选择 Utterances,评论仓库必须是公开的
  4. 图片资源别用 GitHub + jsDelivr 方案,jsDelivr 已经更新协议明确注明不能用于图床了
  5. 图床可以试试 Backblaze B2 + Cloudflare 免备案方案,有备案还是国内 CDN,又方便又便宜又快

收尾

老的博客还是会存在,可能就一直不会更新了,把这俩年的草稿箱淘一淘,发在新博客上。

评论没有办法迁移,也不需要迁移,毕竟评论跟着文章才有意义。

性能优化这块是个长尾工作,最近会迁移到国内 CDN 上,静态文件就是爽,找个 CDN 放就行。

前段时间 Docker Images 升级到了 PHP8 也配置了 JIT,跑了一阵子了,没啥问题,捯饬捯饬准备开源了,完整的 Docker 部署加数据备份方案,思路可以点这里看