废了很多精力终于改版结束,上一次Python改版至今已有六年,本次改版有很多想法都是基于这些年的对个人博客系统的逐渐深入认识,最后得出本次改版的目的一切从简
无数据库
之前一直使用关系型数据库MySQL做为数据存储引擎,由于个人文章数量不太多所以没有遇到性能瓶颈问题,虽然在设计表的时候做了很多查询优化。使用数据库会有以下几个问题:
在线编辑器
: 通常需要搭建一个HTML在线编辑工具编写内容,然后通过程序往数据库读写,但这种在线编辑器经常在贴代码的时候不太好处理,浏览器的性能还是有限的,页面卡死崩溃内容丢失就有发生过需要部署
: 虽然现在部署一个MySQL有很多方式可以非常容易做到,但我认为能不用就不用更好维护
: 不用担心数据库挂了影响使用,也不需要总是关心MySQL日志异常或者慢查询
所以这次我就决定不使用数据库,全部静态化,也就不需要自己做评论功能,页面访问量记数功能,这些都可以使用第三方插件解决。
使用Markdown
经过这些年的成长,我发现其实使用Markdown去写技术类的文档其实更舒服,主要有两点:
- 简单的结构,容易上手
- 样式与结构分离,很容易做出想要的样式
- 通用,Github上几乎所有的README都是Markdown格式
- 我认为比
在线编辑器
要更好用,比如我可以使用VSCode写
全静态化
每一篇文章都是一个Markdown文件,部署前先把这堆Markdown文件渲染成HTML,然后把这堆HTML丢到Nginx下运行,有几个好处:
- 不用担心Python进程挂,原来需要有MySQL, Python和Nginx组件,现在只需要Nginx即可,甚至Nginx都不需要,文章末尾会说
- 由于是预处理好所有HTML,所以不需要服务器端渲染HTML内容
- 减少程序运行时错误
- 非常容易部署,比如容器化,CDN
代码高亮
在旧版本里这个代码高亮是浏览器端处理的,一直有个问题就是页面打开后的10秒左右代码才会被高亮处理结束,非常影响用户体验。而现在还是使用highlight.js
,但我使用它提供的NodeJS API预先把代码高亮处理好,而发布后浏览器仅仅加载个样式即可,这种方式解决以下几个问题:
- 工作量不在浏览器端,高亮效果没有延迟,用户体验更好
- 在列表页或者大量代码高亮的页面,移动端的浏览器性能有限,可能会卡死
- 不需要在发布后加载
highlight.js
的js插件,只需要加载css样式即可
移动端支持
在旧版本里没考虑过移动端,一直觉得不太友好。在新版本的样式里使用了响应式设计,无论是手持设备还是PC端都很好的支持。除了样式支持以外内容也从简,脚本样式引用最小化,还开启了Nginx的gzip压缩,虽然解压会稍微耗一点客户端的CPU,所以综合考虑这一点我使用了中等强度压缩,非常平衡的一个值,因为大部分都是文字,测试多个页面压缩比高达75%
HTTPS
HTTPS这几年是一个趋势,甚至现在Chrome的版本里访问HTTP网页会直接醒目的提示你这个网页不安全。
一般个人类站点使用免费证书就好,比如大家熟悉的Let's Encrypt
一直在免费提供HTTPS证书,不舒服的是每三个月就到期,可以写一些脚本程序通过DNS API自动续签。我目前使用的是阿里云提供的免费证书,一次只能签一年,这个比Let's Encrypt
舒服点,缺点是续签需要人工干预审核不能自动续签,所以你得自己操点心别让证书过期了还没续签新的证书。
评论系统
综合考虑了以下,决定使用第三方的评论系统,这样省事。大概搜罗了一圈,发现国内好多评论系统在这些年已经陆续关闭,就连分享插件JiaThis也都关闭了。虽然它们用户量都不少,但找不到比较好的商业模式又找不到风投只能放弃了。
最终选用Disqus
- 做了挺长时间,有很多积累
- 有很多高访问量的站点在使用,应该是不太容易随便关停的
- 是一款国际化的评论系统,缺点就是对国内支持不好
启用CDN
传统的部署方式几乎都是找一家云服务商购买一台ECS,装上系统再把程序上传到服务器部署应用,而对于全静态站点来说根本都不需要,这就类似Github Pages一样。所以部署全静态化的站点使用CDN是最好的方式:
- CDN 本身就能解决不同区域用户访问站点资源的优化
- 它天然就是分部署、高可用、无单点故障
- 它的费用可能比你买一台ECS的费用还要更便宜
综合以上情况,我选择使用阿里云的CDN服务,并使用它家的OSS做为源站,搭配OSS有几点好处
- OSS的可靠性很高
- 便宜
- 自带OSS内容变更时自动刷新CDN缓存功能,这个非常省事
所以一切从简不仅界面设计,程序功能从简,部署也从简。