blog/_posts/2025-06-02-optimize.md
mayx d60d41a008 Update 3 files
- /404.md
- /_data/ai-cache.json
- /_posts/2025-06-02-optimize.md
2025-06-07 07:09:48 +00:00

85 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
layout: post
title: 近期对博客的修改与优化记录
tags: [博客, 优化, IndieWeb]
---
在修改博客的时候也能学到不少新知识啊~<!--more-->
# 起因
在两个月前,我写了一篇[针对博客搜索功能优化的记录](/2025/04/04/search.html)。在写完之后没几天,有位名叫[@xymoryn](https://github.com/xymoryn)的大佬看到了我的博客并且进行了[吐槽](https://github.com/Mabbs/mabbs.github.io/issues/167),内容很值得参考。不过我自从用[minimal](https://github.com/pages-themes/minimal)主题以来从来没有改过样式的原因主要还是写不来CSS😂并不是真的不想改但其中提到可以让AI优化我觉得也很有道理现在AI这么发达实在不会用AI改就好啦
# 对博客样式的优化
虽然大佬给出了参考的CSS但我不太喜欢那种风格尤其还把之前的左右布局改成了上下布局。我当年之所以选择minimal主题就是因为它是左右布局的如果选择上下布局的话我还不如用[hacker](https://pages-themes.github.io/hacker/)这个主题另外那个参考的CSS可能是因为AI写的有很多没有考虑到的地方比如主题自带的CSS鼠标放到链接上字体会变粗然后可能会变宽导致影响整体的布局而参考的CSS选择直接让所有的链接放到上面都变细即使原来是粗字体也变细比如标题之类的这就更难受了。像这种情况要怎么改呢我还是希望能用minimal主题的CSS但让链接变粗的体验确实不太好所以我选择问问AI。
最后AI给出的答复是使用`font-weight: inherit;`看起来确实解决了问题不过如果鼠标移到链接上没有任何反应也不太好所以就学GitHub在鼠标移到链接时加上了下划线。
除此之外就是字号、行高和布局字号和行高我也不希望改的太激进所以就稍微加了一点点看起来没那么密就好。至于布局之前minimal主题的宽度是写死的左边是270px右边是500px对于我的MacBook看起来也还好因为MacBook的屏幕比较小屏幕的利用率还是比较高的。不过对于更大的屏幕总共860px大小的区域确实不太够尤其是4K屏幕可能只有中间一点点的区域有内容会看着很难受所以我想了一下还是改成百分比布局比较好这样无论屏幕有多宽也能利用得到。
还有一点就是分段虽然我也知道在Markdown中两个换行是分段但是感觉在文本中两个换行隔得太远了所以一开始写文章的时候就选择只换行。不过在中文里确实不分段也不太好看但是又不想去动之前写的文章那该怎么办呢思来想去干脆把换行全部替换成分段好啦在Jekyll中可以用replace过滤器把所有的“\<br\>”替换成“\</p\>\<p\>”因为Markdown解析本来就会有一个段落所以直接闭合加开始就能分割成多个段落了。那么加了分段是为了什么其实主要是为了首行缩进有首行缩进对阅读还是有挺大帮助的至于怎么做也非常简单直接给p标签设置`text-indent: 2em;`就可以了。
最后就是评论授权的问题我用的Gitalk也有人问了[这个问题](https://github.com/gitalk/gitalk/issues/95)我仔细看了一下GitHub官方文档中[OAuth可以授权的作用域](https://docs.github.com/zh/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-apps)发现确实是没办法限制只写Issues😥至于其他的评论系统对后端的依赖又太多了尤其是Giscus居然是直接用iframe引用Giscus网站中的页面😅如果Giscus哪天挂了那评论系统不也挂了虽然GitHub也不可靠……至于自托管就更不可能了我能让服务器持续运营可比不上大厂😆。所以最后我选择给Gitalk加个提示不想登录也可以跳转到GitHub上进行评论至于怎么加还是让AI来吧最后AI给我写了这么一串CSS
```css
.gt-btn-login::after {
content: "如果不想登录请点击上方评论数跳转至对应ISSUE进行评论";
position: absolute;
top: 100%;
left: 50%;
transform: translateX(-50%);
background: #333;
color: #fff;
padding: 8px 12px;
border-radius: 4px;
font-size: 12px;
white-space: nowrap;
opacity: 0;
visibility: hidden;
transition: opacity 0.2s, visibility 0.2s;
z-index: 10;
}
.gt-btn-login:hover::after {
opacity: 1;
visibility: visible;
}
.gt-btn-login::after {
margin-top: 8px;
}
.gt-btn-login::after {
box-shadow: 0 2px 8px rgba(0,0,0,0.15);
}
```
至此,关于博客样式的部分我觉得已经提高不少读者的用户体验了,也感谢大佬提出的建议。
# 对博客兼容性的优化
最近由于某些原因我又用起Windows 7了。其实我觉得Windows 7是一个很不错的操作系统有很多人性化的东西比如桌面小工具自带Feed订阅还有[Windows Live Essentials](https://archive.org/details/wlsetup-all_201802)等等可惜后来全部被微软砍掉了🤣。考虑到Windows 7如此优秀那要不然兼容一下它旗下的Internet Explorer 8浏览器吧
其实GitHub给的那些Jekyll主题本身都是兼容IE8的包括我在用的minimal主题也一样。但随着我这么多年加了许许多多的功能绝大多数功能都没有考虑兼容性只想着能用就行。不过我写的功能基本上都非常简单如果想改得让它兼容IE8也并非难事只要理论上可行就可以。当然也有些理论上不可能的东西比如WebGL。因此我的[Live2D看板娘](/Live2dHistoire/)就没有任何可能性被支持了至于其他的……也许有一些理论上可以支持但是改起来比较麻烦的就也算了吧比如Gitalk之类的
## 对文章点击计数器的兼容性优化
其实我的文章点击计数器从[之前](/2019/06/22/counter.html)改成用jQuery调用自己的接口以后就没有什么兼容性的问题了因为jQuery本来就是处理浏览器之间差异的库而且也是兼容IE8的。只不过有个问题是IE8不支持用XHR跨域请求只能用“XDRXDomainRequest”进行跨域请求……还好有个[现成的库](https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest)能让jQuery在遇到这种情况时使用XDR请求于是我就用条件注释让IE9以下的浏览器引入这个库这样在IE下也能正常显示文章点击数了😆。
## 关于响应式布局的兼容性优化
在IE8中的CSS是不支持媒体查询的所以在修改窗口大小时也不能根据情况使用合适的样式。本来我没打算解决这个问题结果恰好看到了一个库[Respond.js](https://github.com/scottjehl/Respond),所以就直接拿来用了😝。
## 关于全文搜索的兼容性优化
其实从功能的角度来说这种东西肯定是在IE8下可以实现的但是我用的[那个库](https://github.com/christian-fei/Simple-Jekyll-Search)有点迷到处都用的是const关键字结果还莫名其妙[判断XHR](https://github.com/christian-fei/Simple-Jekyll-Search/blob/master/src/JSONLoader.js#L29)搞的好像是在兼容旧浏览器改起来有点麻烦懒得搞了……不过除此之外还有个取巧的方式既然我搜不了干脆让谷歌来搜吧至于谷歌支不支持IE8就不是我的事了🤣所以直接给搜索框外面套了一个form表单这样甚至可以在不启用JS的情况下搜索假设谷歌支持没有JS的情况
## 对于订阅软件的兼容性支持
之前我的博客对订阅的支持是使用的官方的[jekyll-feed](https://github.com/jekyll/jekyll-feed)插件它只支持Atom格式的订阅一般的阅读器也是支持这种格式的即使是IE8也是完美支持。但是我发现有非常少数的某些网站没办法解析Atom只支持RSS……所以我只好特地加了[对RSS格式的支持](https://github.com/Mabbs/mabbs.github.io/blob/master/rss.xml)还顺带搞了支持Atom和RSS格式的[XSLT模板](https://github.com/Mabbs/mabbs.github.io/blob/master/feed.xslt.xml)来预览。既然RSS也支持了那干脆连[JSONFeed](https://github.com/Mabbs/mabbs.github.io/blob/master/feed.json)也一起做了吧😆,虽然意义不是很大……
## 给博客添加网页快讯
既然要兼容IE8那当然是能用的都用啦在IE8订阅网站源的地方有一个添加网页快讯的功能。因为没有可以参考的网站我甚至都没理解这个功能展现的效果是什么样的。我看这个网页快讯好像是抄了一部分[hAtom Microformat](http://microformats.org/wiki/hatom)的规范我还以为是每个条目都单独需要一个entry-title和entry-content结果发现并不是😅一个hslice只能有一个entry-title……
这个功能其实非常简单主要作用就是把网页的一部分切出来单独展示当这一部分发生更新的时候IE浏览器就会提示用户。然后在这之中hslice要包裹所有需要处理的元素写到最外面元素的class中就可以entry-title是希望用户订阅时展示的名字而entry-content是被切下来展示的网页。具体的内容可以在[微软官方文档](https://learn.microsoft.com/en-us/previous-versions/windows/desktop/cc304073(v=vs.85))中看到。
# 让网站增加对IndieWeb的支持
既然说到Microformat那就要提到[IndieWeb](https://indieweb.org/IndieWeb)了。虽然这个东西网络上也没几个人搞,但看起来有点意思就整下玩玩呗。
## 第零级:域名
根据他们的[入门教程](https://indieweb.org/Getting_Started)来看成为IndieWeb最重要的一点就是有自己的域名。看到这一点我都怀疑这是不是卖域名的用来忽悠人的玩意我一分钱也不想给域名注册商虽然DNS这套系统确实维护需要成本但是能有多大成本呢绝大多数不都让ISP摊了另外他们所说的大公司的服务可能会消失那么域名就不会吗注册商和注册局完全有能力让你的域名用不了这也是我们不可控的东西因此尽管这对于IndieWeb很重要但是我不打算搞于是我的博客就不是IndieWeb了🤣。
## 第一级:识别身份
没有域名也不影响接下来的步骤大公司的域名也是域名虽然不属于我。根据教程来看支持IndieAuth非常简单只需要在head中加一个`rel=me`的link标签指向IndieAuth支持的个人主页并且那个个人主页有一个反链指向自己的网站就可以比如指向自己的GitHub主页那么就可以使用GitHub登录来验证这个网站属于我。这一步可以使用[IndieWebify.Me](https://indiewebify.me/validate-rel-me/)来验证。
## 第二级:发布内容
在发布前为了更好的让其他软件读取网站内容需要用microformats2来标注网站内容这个倒也不复杂可以根据[这个教程](https://microformats.org/wiki/h-entry)按照上面所说的东西用class名去标注对应的元素标注完之后就可以用[IndieWebify.Me](https://indiewebify.me/validate-h-entry/?url=https%3A%2F%2Fmabbs.github.io%2F2025%2F06%2F02%2Foptimize.html)验证了。
除此之外还需要用[h-card](https://microformats.org/wiki/h-card)标注网站的身份,解析完之后可以当网站名片用,具体可以看[这里](https://indiewebify.me/validate-h-card/?url=https%3A%2F%2Fmabbs.github.io)。
另外还有一点就是Webmentions在网站上声明Webmentions可以让别人引用你的文章时通知一下你。不过对于静态博客不是很友好。一是要收收完还要展示二是要发引用了别人的文章如果对面支持Webmentions要把自己引用的文章链接发给对方。虽然Jekyll有[插件](https://github.com/aarongustafson/jekyll-webmention_io)可以支持但是我用GitHub额外装插件还得自己写Actions而且我发布一次要在一堆Pages上更新也不太适合所以我打算光收不发只需要在link标签中添加Webmentions的端点就可以也不展示了而且国内根本没几个人用Webmention🤣。如果有人对谁给我发了Webmention感兴趣可以在[这里](https://webmention.io/api/mentions.html?token=Dan9NrE8CLsFJ1qdRq2hjg)查看(不过绝大多数都是我自己手动发的🤣)
如果谁有兴趣给自己的网站添加完整的Webmention可以用[Webmention Rocks!](https://webmention.rocks/)进行测试如果使用了WordPress是自带的只需要打开相关的功能就可以
## 第三级:进行交流
在IndieWeb中有一个很重要的事情就是相互交流搞这个比较重要的目的是为了避免大公司的服务炸了所以要替代比如推特Facebook之类的服务但是在这些服务还没炸的时候仍然可以在上面发自己的网站也算是引流吧。他们把这个行为叫做[POSSE](https://indieweb.org/POSSE)。对我来说我在微信、QQ之类的上面发自己新写的文章就算是POSSE了毕竟我又不玩国外的社交平台😆。
除此之外似乎还要把别人的评论同步到自己网站我能做到的顶多就是Gitalk了更多的就算了吧
## 额外的内容
既然已经支持了IndieWeb那么不妨加入IndieWeb Webring吧。在[IndieWeb Webring 🕸💍](https://xn--sr8hvo.ws)中的大多数网站都是适配了IndieWeb的加入他们也算是证明自己适配IndieWeb的努力了吧😊。
# 对博客可靠性的优化
以前为了应对[GitHub](/2022/01/04/banned.html)的不可靠我仅仅是在各个Pages上部署了我的网站但是后来我想了想Git本身就是分布式的分发是一件很简单的事情啊我要是想提高博客的可靠性不如直接用Git分发到各个Git托管商就好了啊因此我就利用GitLab镜像仓库的功能一键把我的网站同步到数十个知名的Git托管商提高了网站的可靠性具体的列表可以在[这里](/proxylist.html#git列表)查看。
# 感想
在这次的博客优化中了解了不少新的东西啊不仅学习了CSS还有了解如何提高网站兼容性以及提高了博客的可靠性和曝光度。果然折腾博客本身也能提高自己啊还能写文章分享一下折腾的经验😆。虽然折腾的内容不一定能在未来的生活中用得上但是有意思就足够了😁。