折腾博客表里站复盘

type
Post
status
Published
date
Oct 1, 2025
slug
blog-site2
summary
虽然原本博客站点个人体感上加载速度还好,但从后台数据上看,确实改进空间较大,对于网络状况欠优的情形可能体验不佳。无意逛到了性能不错的,同样基于notion的博客项目,于是进行部署并在其基础上进一步做了一定的定制与改进,过程里为了与原博客知识库的兼容引入了隐藏部分文章的特性,考虑到其相比原博客少一定特性,同时空闲的域名也巧合不能在bing使用,仅能在google使用(意味着不能国内直接检索),且原站点被bing屏蔽,也没怎么做google index,恰好用来区分表(public)里(insider)站点。
tags
建站
开发
category
技术分享
titleIcon
password
icon
insider
🥭
虽然原本博客站点个人体感上加载速度还好,但从后台数据上看,确实改进空间较大,对于网络状况欠优的情形可能体验不佳。无意逛到了性能不错的,同样基于notion的博客项目,于是进行部署并在其基础上进一步做了一定的定制与改进,过程里为了与原博客知识库的兼容引入了隐藏部分文章的特性,考虑到其相比原博客少一定特性,同时空闲的域名也巧合不能在bing使用,仅能在google使用(意味着不能国内直接检索),且原站点被bing屏蔽,也没怎么做google index,恰好用来区分表(public)里(insider)站点。

速度对比

原博客动态站点测速移动端与桌面端
notion image
notion image
原博客静态站点(next build)测速移动端与桌面端
notion image
notion image
现博客(表站)测速移动端与桌面端
notion image
notion image
 
原博客切换主题后测试移动端与桌面端
notion image
notion image

表站建立过程

域名

  • 首先备选的域名都来源于白嫖的cloudns三个域名,最新的是abrdns.com,但新的域名已经不支持托管CF。
notion image
  • 作为已经托管的次选ip-ddns域名,虽然因为商业试用结束,已经不能再调整ALIAS字段,但对应到CF的Worker坑位是不变的,只需要重新修改CF后台反代的地址就可以了。
notion image
notion image
  • 诡异的在于,google的search console可以录入ip-ddns的域名,但bing这边已经不允许,需要bing的收录就需要更换别的域名,不过另一方面来说,如果仅为google收录(仅海外检索),比较适合再做一个站点,放一些额外的内容,也就是做里站。
notion image
  • 于是更改为复用原本的cloudns.ch域名,由于是注册比较早的域名,既可以用ALIAS,也可以托管CF,唯一的问题是没法删除已有的bing与google的记录。
  • 最终计划使用cloudns.ch做表站 ip-ddns后续做里站
  • 暂时使用vercel的做里站,恰好只允许海外访问

部署

  • 考虑到需要国内直连,只有三种方式:vercel+修改域名解析,netlify,CF绑域名(可选+HF Space),第一种可以排除,对于camelliav.cloudns.ch这样的域名,vercel要求在cloudns.ch这一级加,而vercel又不支持添加如blog.camelliav.cloudns.ch这一级的域名,所以排除。第二种netlify,完全可用,但移动端速度相对不稳定,时好时坏。第三种CF绑域名,稳定可用,最终选择。
netlify测速
notion image
notion image
  • 项目使用:原项目里的版本设置有一定问题,直接部署HF Space与Vercel都不会成功,需要先做修改nodejs改为20.x版本,canvas改为3.1版本,并且clone一次到本地,把pnpm-lock重新生成一次,再使用。
notion image
原项目里的Dockerfile已经是3年前的东西,不能直接使用,可以自行尝试AI修改,以下附自用参考

定制与改进

  • 基本的组件引入与配置:
    • utterances评论
    • bing收录(Google导入)
    • Google收录(域名验证)
    • clarity(自行修改代码引入)
    • bing indexNow(public加个txt)
    • sitemap(改baseUrl),参见blog.config.js相关修改
  • 代码修改:clarity引入,标题与图片darkMode调暗,移动端的table of contents与progress bar
  • 可进一步修改:代码块的行数显示与语言显示,折叠
  • 以下按commit进行归类描述改动与如何解决issue中常见问题
notion image
1.部署报错
notion image
  • 纯版本问题,clone到本地后按前两个commits修改,然后更新pnpm-lock提交
2.toggle组件不显示
notion image
notion image
  • 这个很有意思,第一时间先去代码里看了一下
  • 代码逻辑上没有问题,代码里写了toggle使用的自定义组件
notion image
  • 转而想应该是依赖库的问题,考虑到项目比较久,隔壁notionNext也没这问题,try fix里先提交一次升级版本,然后并没有作用,但比较有意思的是netlify部署的toggle可以用,HF Space部署的里面的toggle不能用,重新检查一下两边的部署命令,netlify走的是pnpm,HF Space用的是在notionNext上改的Docker镜像,保留了yarn,这是唯一的差别。
  • 转头回到package.json,看到了pnpm下patchedDependencies,左边还有个patches目录单独存放了react-notion-x的依赖,意味着实际上这两个库并不是额外install在node_modules的,而是代码库的一部分,使用修改的版本,并且是交给pnpm的配置,意味着如果不使用pnpm,比如yarn,npm都会因为使用的react-notion-x不匹配导致toggle渲染失败。属于是包管理器里藏代码了(
notion image
3.darkMode优化;引入clarity;目录功能优化
  • 具体代码变动都在这一commit中
notion image
  • 对标题,图片的darkMode降低亮度,博客里有一些白色背景的图片,原始的亮度太高刺眼,可以f12把brightness改1还原对比。
notion image
  • 修改代码块的样式,项目自带原本的代码块样式纯白背景,在darkMode下太过抽象,修改为更友好的样式。
notion image
notion image
  • 增加移动端悬浮导航,原本的项目移动端直接导航栏显示在最顶上,只能无限回跳顶部然后再跳回去,体验十分糟糕,修改添加悬浮的导航并添加进度条。
notion image
notion image
notion image
notion image
  • 最新的提交修改导航栏响应式的条件,从md到lg,覆盖全部的宽度范围,避免中间一小段的区间退回原版。
notion image
notion image
  • 可拓展:修改为里站的darkMode颜色方案
  • 兼容notionNext知识库,可以在以下文件里找到筛选规则,只认Published的Post与Page,所以其他Menu等不会冲突,主要考虑1.不支持密码,需要筛掉加密文章2.添加insider字段,筛掉里站文章3.给这边用的Page文章不能带外链slug
notion image
  • 避免这种外链slug的Page,或者使用insider字段
notion image
  • 其他需要注意的是这边没有category,只有tags用于分类
  • 也可以拓展在首页里显示blog所属的tags
  • 修改了文章内作者栏的头像请求url,以下为修改过程中遇到的nextjs报错,提示信息很清晰,可以直接根据报错推导出该怎么改,改哪里
notion image
notion image

里站的部分优化难题

TODO:首屏gif与封面webp avif

首屏gif

  • 简单来说就是:降低大小→降色彩位数/缩小尺寸→像素缺乏区分度/糊
  • 尝试起点:600+kb
notion image
  • 压缩:200+kb,但是糊的很
notion image
压缩网站前后对比
notion image
notion image

封面

TODO:
notion image
notion image
notion image
notion image
notion image
notion image
notion image
notion image
 

© Camelliav 2025