内容提要
作者翻新博客:统计页三图合并、精简菜单、打赏二维码换源并居中缩小、139个友链体检后81个失联移入失联组、相册改为单文件自动分页、侧栏新增日历与倒计时卡、美化面板按内容自适应尺寸、新增AI页面助手并将Key移至服务端、拆解fomal.js等三座“屎山”,首屏资源从2.72MB降至约1.82MB。
延伸解读
从“还能用”到“必须修”:老站维护的临界点
文章指出,外部资源是逐个失效的,单个图标或模块坏掉不影响阅读,因此容易被长期搁置。但当失效从边角蔓延到骨架——统计脚本、CDN、核心 JS 库接连报错——维护成本会突然放大。作者用 F12 控制台的红字作为触发点,说明定期体检比等到页面明显异常再动手更划算。
换源不是改个 URL:国内镜像的路径与“假 200”陷阱
文章记录了换源时踩到的具体坑:npmmirror 并非每个包都有 .min 版本,路径规则与 jsDelivr 不同;lib.baomitu 对不存在的路径返回 HTTP 200 但正文只有 14 字节。作者因此强调,判断源是否可用必须同时看状态码、响应字节和内容,只看状态码会误判。
905KB 的 Vue + Element-UI 只换来 14 个提示框
作者发现全站 Vue 用法仅 14 处 this.$notify,却加载了 905KB 的 Vue 与 Element-UI,且 Element-UI 的 CSS 同步阻塞渲染。删除后手写 7KB 原生通知组件,首屏第三方资源从 2.72MB 降至约 1.82MB。这提醒读者:引入大型 UI 库前,先确认实际用到的功能是否值得这份体积。
静默故障比报错更危险:统计图空白与 Service Worker 缓存
文章提到统计页三张图空白是因为百度统计 token 过期,而 .catch 只打日志,页面看不出“没数据”和“服务挂了”的区别。Service Worker 也有类似问题:注册后长期驻留,源码删除后老访客仍被旧逻辑拦截。作者建议为接口异常增加可见提示,并手动确认新版本接管。
Q&A
博客首屏资源从2.72MB降到1.82MB,主要删减了哪些内容?
主要删减了Vue和Element-UI(共905KB),替换为自研的7KB通知组件;同时将cdn.staticfile.org的资源(1.01MB)换源或本地化,并移除了cdn.jsdelivr.net的引用。
为什么MathJax公式一直显示不出来?
因为Butterfly主题不读取_config.butterfly.yml中的mathjax.cdn字段,实际使用的是cdnjs.cloudflare.com,而该域名国内基本不通,导致35个页面全部加载失败。
博客背景图突然消失,可能是什么原因?
可能原因包括:Service Worker的fetch错误导致资源加载失败;背景图依赖JS运行时写入CSS变量,JS未执行则背景空白;随机壁纸API失效或localStorage中存储了拼写错误的值(如'deafult')。
如何解决博客中$ is not defined和LazyLoad is not defined报错?
对于$ is not defined,是因为jQuery从CDN加载失败,导致fomal.js中断。解决方案是添加本地兜底:CDN活着时用CDN,死了用自托管的jQuery备份。LazyLoad is not defined类似,需确保依赖库加载顺序或本地化。
博客的统计页三张图空白,如何修复?
原因是百度统计的access_token过期(有效期30天),且错误被静默吞掉。修复需用refresh_token刷新(注意一次性),并更新census.js中的三处token。同时添加错误显示,让故障可见。
如何将博客的节日提醒从弹窗改为卡片?
重写为基于FESTIVALS表的festival.js,支持公历、农历、节气、星期等条件,使用fomalNotify在左上角显示卡片,10秒后自动关闭,一天只弹一次。同时抽离lunar.js处理农历换算。