本站全面静态化改版施工中
缘起
本站之前使用wordpress建站,它有不少优点,例如开箱即用,主题众多等。但是写作体验极差,延迟之大匪夷所思。其原因一是vps性能不太行,二是网络实在不好。另一方面,wordpress虽然主题众多,但只能用别人的,说实话我觉得用别人的就和拾人牙慧差不多,自己能掌握想怎么改就怎么改那才好呢。所以,心里一直以来手工建站的想法就又萌动起来了。
本站历史
很早很早以前,大概还是背景音乐使用midi的年代,我就开始建立个人站点了。依稀记的第一版有最近新闻,关于我等栏目吧,还放上了当时最喜欢人物的头像,觉得太有范了。但看了会还是不太满意,当天晚上就动了改logo的心思,可惜水平不到家,改来改去也不成样。再后来,流行起来dreamweaver建站,ps建站,都一一尝试过,总是不得法就抛诸脑后。如今有空,正好再次尝试一下。
定性分析响应体验差的原因
动态网站的动态,主要是相对静态而言,服务器端处理程序实时对客户端的访问状态做出响应,体现在网页内容上,即“动态”地改变了网页的内容。显然,服务器端的处理程序需要保持客户端状态并做处理,这需要消耗不小的存储资源和处理资源。
可是,我这个人网站并没有太多需要和读者实时交互的需要。
wordpress对我来说,我提供了它所需要的100分的资源,只用到了它20分的功能,而且还要忍受这么差的体验,太不划算了。
方法
解决网站访问体验的主要方法就是网站静态化,如果我将每个网页都处理成html文件,服务器基本只需要按请求传送数据,而不做其他服务器端的资源消耗,那响应速度就能上来。我实测,基本和本地反应速度接近了。
缺点是服务器没有实时状态了。可还是之前说的,我并没有太多需要和读者实时交互的需要。唯二需要服务器保持的信息,大概就是评论和阅读量了。我会在后续考虑如何解决这个问题。
关键问题解决方案
本章节记录已完成事项的解决关键
wordpress历史文章导出并解析
wordpress导出的历史文件是xml格式的,文章主体的html代码和其他一些tag信息都有保留。解析起来并不难。python的minidom可以解决这个问题。
文章样式
使用CSS,自学CSS有挺多好处。这里推荐 https://www.bilibili.com/video/BV1yx411d7Rc 这个网站
写文章
wordpress自带了文章编辑器,转为纯静态后,网站没有了文章编辑器,只能在项目工程中直接写文章。然而有许多优秀的md编辑器可以以非常好地体验来书写md文档,而且md文档是可以转化为html代码的。
我使用VScode编写MD文章,然后使用python的markdown来对HTML进行转译。注意markdown在转译代码块时,需要添加插件。它的插件有很多,还能生成目录,可是我思索了挺久,觉得页面上加目录太难看了。我又不写长文,就不用TOC了。
html = markdown(s, extensions=['markdown.extensions.fenced_code'])
使用GIT上传MD到自己的NAS。服务器与NAS之间进行持续的同步,即发布文章。所以我的写文章过程如下:
- 编写MD
- 运行项目中的python脚本
- 文件夹git push
- 服务器自动或手动pull
- 登陆查看
这个步骤说起来烦琐,但比起wordpress糟糕的编辑体验不知道高到哪里去了。
代码高亮
引入highlight.js即可。
顺便一提,highlight.js没有行号功能,它还特意解释了为什么不添加行号。大意是加行号没啥用。我觉得多少有点道理。但其实加上也无妨吧,但似乎在细节处理上是比较复杂的,比如空行、tab、空格等处理。
添加看板娘
沿用了原来的live2d,引入相应的js和css即可。可以看我建站系列的文章。它需要PHP支持。
添加评论功能
使用remark42提供服务。感谢remark42的杰出工作。
添加阅读量功能
使用移植版不蒜子,感谢soxft的杰出工作。值得一提的是,它部署后自带的usage及官网提供的使用说明有点问题。阅读源码后发现应该手动加上data-api属性才可以。
对于历史文章,使用JS处理,使用setInterval待不蒜子获取到阅读量数据后再加上历史阅读数据。
自动提交
利用git hook的post-receive,在git提交后,向远程服务器发起拉取的命令。实现了一处提交即更新服务器。
为站点生成RSS
分析了RSS文件的基本格式,并不复杂。大概是标题、时间、内容之类。按既定的格式将文章内容放置对应位置,即可。本站已经具备了RSS功能,欢迎各位读者大人订阅。
待施工项 [暂缓]
源站图片复制或移动。这一项意义不太大了。
提交搜索引擎。好像已在搜索引擎的收录范围内了。