Hexo博客优化记录
环境
Hexo 5.4.0,NexT 8.14.1
Highlight.js高亮问题
1 | highlight: |
启用Highlight.js后,代码块高亮效果无效。
解决方法
- 法1:
改用prismjs - 法2:改用csr渲染,在模板文件
hexo-theme-next\layout\_layout.njk
中插入
1 | <link rel="stylesheet" href="//cdn.bootcss.com/highlight.js/9.2.0/styles/github.min.css"> |
这种方法在使用了Pjax特性后并不好用,需要手动刷新才能生效,可以考虑在<script>
标签中添加data-pjax="" async=""
属性,但是有时会失效,目前没有找到完美的解决方案。
法3:Highlight.js自带的语法检测过于辣鸡,且十分耗费资源。故可以选择手动配置Markdown文件。在Markdown文件中,使用代码语言标记必须加空格,否则失效。
首先需要先将Highlight.js自带的语法检测关闭。
1
2
3highlight:
enable: true
auto_detect: false然后使用[```][空格][语言标记]的格式进行标识。
过于愚蠢的匹配规则。
夜间模式优化
夜间模式基于Darkmode.js实现,目前已经有专用于NexT的插件hexo-next-darkmode。其CSS样式文件位于blog\node_modules\hexo-next-darkmode\lib
暗黑模式激活后,hexo-next-darkmode
插件会将 darkmode--activated
CSS 类添加到 body
标签,可以利用它覆盖插件默认自带的 CSS 样式,这样就可以实现暗黑模式 CSS 样式的高度自定义。
以下内容在实现前均需要先安装并启用hexo-next-darkmode
,或者自行引入Darkmode.js
。
Prism.js代码块优化
修改代码文字反白样式
1 | .darkmode--activated code { |
代码块框颜色优化
1 | .darkmode--activated pre { |
**注意:**在当前Prism.js主题下,强行改变代码块框颜色会导致代码难以看清。因此选用改变透明度的折中方案,当然也可以选择其他Prism.js主题再进行样式修改。
支持Waline的夜间模式
hexo-next-darkmode
现已兼容Waline的深色样式,修改NexT配置文件hexo-theme-next\_config.yml
即可。
1 | waline: |
自定义暗黑样式
在夜间模式下,Waline 客户端默认会使用以下样式,若希望自定义夜间模式的 CSS 样式,直接覆盖以下 CSS 样式即可。
1 | /* 根据用户设置 ↓ */ |
更换资源CDN
在jsDelivr
被吊销ICP许可证后,cdn.jsdelivr.net
开始遭到污染,非魔法上网已经不能正常加载,其原因不做讨论。
修改Next主题CDN
运营方 | 节点 | 地域 | 链接及格式 | 上游 |
---|---|---|---|---|
75CDN(360前端) | 360自有节点 | 全球 | https://lib.baomitu.com/{cdnjs格式} | cdnjs |
知乎 | 阿里云 | 全球 | https://unpkg.zhimg.com/{unpkg格式} | unpkg |
百度 | 百度云 | 全球 | https://code.bdstatic.com/npm/{unpkg格式} | 内建npm镜像(上游淘宝cmpnjs) |
饿了么 | 阿里云 | 中国大陆 | https://npm.elemecdn.com/{unpkg格式} | unpkg |
修改主题根目录下_config.next.yml
,这里我采用了75CDN(360前端),它已经维护很长时间,是最适合NexT的CDN。
1 | # It's recommended to use the same version as in `_vendors.yml` to avoid potential problems. |
修改谷歌字体库以加速页面加载
修改主题根目录下_config.next.yml
配置项
1 | font: |
针对NexT8.11.0以后的特殊问题
由于NexT自8.11.0
以来加入了Pjax自动更新功能,其使用的Pjax版本更新至0.6.0
。然而75CDN(360前端)资源库中没有0.6.0
的Pjax,只有0.5.0
的Pjax,这导致修改CDN后我们无法使用Pjax。
可通过修改主题根目录下_vendors.yml
来强行改变Pjax引入的版本。
1 | pjax: |
必须保证version
与integrity
字段值完全如上所示,任何一个值出错都会导致Pjax无法引入。
评论系统优化
服务端升级
在Waline官网根据流程走即可。新建一个Github仓库,然后部署于Vercel。环境变量可使用旧版Waline的,这样可以无损保留评论数据。绑定域名建议新建,以防止翻车还得重新解析。
也可以通过修改仓库中修改 package.json
文件中的 @waline/vercel
版本号为最新版本,再Redeploy。
客户端升级
1 | npm i @waline/next@latest |
客户端由1.6.0
升级至2.14.7
更新配置文件
Waline V2更新了配置文件格式,旧版的配置文件不再支持。
1 | # Waline Config File |
Waline V2评价
- 评论管理更加便捷,很多操作不再需要通过管理后台。
- 支持点赞,支持删除评论,能够显示更多访客信息,并且修复了博主头像不显示的 bug ,还是很值得更新的。
现存问题与后续优化计划
现存问题
- 更换CDN后,中国大陆地区访客无法正常加载
Darkmode.js
与Aplayer.js
等资源,因而夜间模式、全局音乐等功能不可用。 - 由于DNS污染等原因,中国大陆地区暂时无法使用评论系统。
(非中国大陆地区访客可完美浏览博客)
后续优化计划
- 寻找新的CDN服务商进行资源分发。
- 考虑DNS Server转发或采用其他Severless服务解决无法使用评论系统的问题。