Profile Image of the Author
Coding
GreenRoc
ATKPr/Ae/PS
INTC++/Java/Py
AGIWin/Mac/Lin
熟练掌握以上软件的 安装与卸载
精通以上语言的 单词拼写
熟悉以上系统的 开关机
本周在折腾:kimi-k3 + kimi-code
1628 字
8 分钟
给博客做了一轮性能收口,又塞进了一只会动的看板娘

最近看博客,总觉得它有点像我本人:功能越来越多,细节越来越顺手,但也越来越容易在不该用力的地方使劲。

首页有 Banner,文章页有图片灯箱,所有页面有滚动条增强、主题切换、Swup 换页、搜索、侧栏卡片……单独看都还行,堆在一起就开始值得算账了。

于是这次不做那种“Lighthouse 红了,随便删两个库”的优化,而是把每一项东西都问了一遍:你是不是每一页、每一台设备、每一秒都必须存在?

顺手还往右下角塞进了一只看板娘。

先把全站常驻的东西拆开#

之前 PhotoSwipe 灯箱逻辑放在全局 Layout 里。意思是无论你是在首页看文章卡片、去归档翻旧文,还是打开一个根本没图的页面,浏览器都得准备好一整套图片灯箱。

这就有点像去便利店买瓶水,店员先把投影仪、幕布和音响搬出来待命。

现在它被拆成了独立的 Lightbox 组件:

  • 只有文章页、关于页和碎碎念页会挂载它;
  • 只有页面里真的存在正文图片或封面图时,才会动态导入 PhotoSwipe;
  • 没图的页面不会下载灯箱主体,也不会初始化相关事件。

功能没少,图片点开还是能放大、缩放、关闭;只是没图的地方终于不用为这件事提前买单。

手机端别再硬上自定义滚动条#

桌面端的 OverlayScrollbars 看着不错,代码块横向滚动也比较顺手。

但手机上,本来就有原生滚动、惯性、回弹和系统级手势。为了把滚动条“美化”一下,再额外加载脚本和样式,多少有点本末倒置。

所以现在的策略很简单:

  • 细指针的桌面设备才启用 OverlayScrollbars;
  • 而且等浏览器空闲后再动态导入;
  • 触控设备直接使用原生滚动。

这不是“功能降级”,而是承认手机浏览器在滚动这件事上,确实比我这点 JavaScript 更懂用户。

字体也得克制#

之前页面通过 Google Fonts 一口气加载了好几套字体和字重。视觉上当然没问题,但每次首访都得多一次跨域请求、多一段 DNS/TLS 流程,还要看网络和 CDN 心情。

一开始我本来想把中文字体整个本地化,后来发现这事不太对。

完整的中文字体不是一张小图标,光常规字重就是大文件;即使做了分片,页面里也会出现一串字体请求。为了“本地化”把首屏拉得更重,那就属于为了治头疼把脑袋卸了。

最后定了一个比较现实的平衡:

  • 保留本地的 Lora 拉丁字形,只留下 400 和 700 两个常用字重;
  • 中文回归系统字体栈,让不同设备用自己最合适的中文字体;
  • 移除不再使用的 Plus Jakarta Sans;
  • 顺手删掉了一大段已经没有播放器使用的 APlayer 样式。

现在站点不再依赖 Google Fonts,Lora 的两个 WOFF2 文件加起来也就四十多 KB。该省省,该让系统干活就让系统干活。

然后,右下角多了一只鲸鱼娘#

性能账算完之后,当然要干点不那么“理性”的事。

我看到 whale-girl 这个桌宠项目时,第一反应是:这东西放博客右下角应该很合适。

但它本身是给 DSH 用的插件,不是拿个 <script> 往 Astro 里一塞就能跑的网页组件。它依赖一套状态接口、事件流和资源路由。为了一个看板娘再给博客接一套常驻服务端,不值当。

于是走了另一条路:只使用角色精灵素材,交互逻辑全部自己写。

首版保留了七种最有用的状态:

  • idle:平时发呆;
  • think:思考;
  • working:认真营业;
  • celebrate:发现好东西时庆祝;
  • error:留给以后做小彩蛋;
  • welcome:第一次见面打招呼;
  • drag:被拎着到处挪时的状态。

原始七张 PNG 精灵表大约 1MB。我把它们转成保留透明通道的 WebP,最后总大小约 224KB。

更重要的是,它不会一上来就把全部动作图拉下来:

  • 首屏只用 idle
  • 第一次互动后,其他状态才在后台准备;
  • 没点她之前,她就是一只安静待着的鲸鱼娘,不抢首页带宽。

看板娘该有的基本礼貌#

看板娘最怕两个问题:挡内容,和赖着不走。

所以这里给她定了几条规矩:

  1. 桌面端默认在右下角,能拖拽,位置会保存在本地。
  2. 手机端默认折叠成小入口,点开才展开,别一进站就占半个屏幕。
  3. 点击会有随机台词和爱心特效,但遵循系统的“减少动态效果”设置。
  4. Escape 可以收起,右上角按钮也能缩回入口。
  5. 她挂在 body 的直属层,不在 Swup 的页面替换区域里,所以站内换页不会反复重建出好几只。
  6. 开启文章的禅定模式时,她也会淡出,不来打扰你看字。

看板娘不需要知道我正在写什么,也不需要连任何后端。她只要在你点一下时说两句话,被拖走时老实进入拖拽状态,偶尔自己发会儿呆,就够了。

这轮改完之后#

这次没有做什么“把所有东西砍掉,博客快了 300%”的神话。

做的事情更朴素:

  • 无图页面不再带着图片灯箱跑;
  • 手机不再为了自定义滚动条多背一份脚本;
  • 字体不再依赖外部服务,也不硬塞巨大的中文字库;
  • 无用播放器样式被清掉;
  • 新加的看板娘也按首屏资源预算来,不搞一只 2MB 的右下角装饰品。

性能优化不是让网站看起来像一张白纸。

真正舒服的状态应该是:该出现的东西有存在感,不该出现的东西安静消失。现在右下角那只鲸鱼娘会动,会聊天,会被拖走;但在你还没理她之前,她不会抢走任何不属于她的注意力。

给博客做了一轮性能收口,又塞进了一只会动的看板娘
https://gr114.com/posts/blog-performance-and-mascot/
作者
GreenRoc
发布于
2026-08-25
许可协议
CC BY-NC-SA 4.0

评论

滚动到此处加载评论…