Levy's ink.
Doodles, whimsy & life.
About
Blog
Mess
Catalog

个人博客上线

15年7月6号,也就是考完GRE的第二天,我收到通知拿到了Github的Student Pack,里面最诱人的莫过于Digital Ocean的100刀vps coupon。所以果断开工从零开始架构个人博客。架构的想法早已有之,但苦于没有固定的服务器可以用,只做前端又实在缺乏成就感,故一拖再拖;现在既然有了一个vps并打算一直保留下去,就着手开始弄了一个博客系统。

为什么要自己写一个博客系统?

我是那种并不爱用重框架的人...框架轻尚可作为工具方便开发,重了对我而言更像桎梏写法的手铐,实在麻烦。用各种流行的博客搭建系统(WordPress,Blogger)又不够有趣,最后决定自己开发一个,让每一个细节都能自己定制。

总体来说,这一套博客系统有这么几个特点:

  • Markdown驱动:由于懒得排版,博客中所有你看到的内容均使用Markdown存储并在展现层将其转化为HTML。优点在于排版简单,而且成熟的美化工具多。相应地顺手弄了一个在线md编辑器,当然也是响应式的,可以戳这里围观,由于是管理界面,为了赶时间很多地方做得很丑_(:з」∠)_。当然,没有登录权限是不能post日志的。MD渲染引擎由Showdown提供,代码高亮由Prettify提供。
  • 全RESTful:为了方便以后换前端或稍作修改就复用,博客中一切数据交换均基于ajax+json。例外是为了方便搜索引擎收录,博客原文页面是后端直接渲染的,当然,其对应的RESTful API也有所提供。
  • 自定义字体支持:仔细看页面会发现,博客中使用的中英文字体均不是系统自带,但考虑到用fontface引入中文字体实在过于恐怖,我利用Nodejs的fontmin组件(似乎是百度前端支持的)简单包装了一个在线剪裁字体并缓存的服务器并托管在Github。关于这个之后会另起一篇博文介绍。
  • 动态JS加载:这个是多余的话。为了更优雅地处理作者管理而不给阅读方带来额外的代码,所有和作者管理相关的js是从后端管理的虚拟路径动态加载的,如果没登陆将会得到空JS,否则得到的JS将负责创建相关DOM。

当然,由于我开发经历实在不多,对于很多实现方式仅限于意淫,可能出现的诸多naive的地方也请各位原谅...能指出当然更好。

前后端实现

后端:Nodejs+Express+MongoDB

既然不喜欢重框架,很多Web后台框架自然已经出局。加上我又是Node粉,Express的轻重量级也还算拿捏的不错,最后选择了这一套东西作为自己的开发工具。

至于为何是MongoDB,这个纯粹是开发紫荆之声后的后遗症,再加上博客系统不需要对数据一致性和原子性有过于复杂的要求,故加一些简单的数据锁即可实现。由于这一套工具本身已经足够流行,此处也就不再赘述。

前端:没有框架

适逢三字班学习前端,突然觉得一年前(到开发该博客前也是)没手写过一个完整的响应式布局实在不爽。再加上前段时间对Bootstrap出现了审美疲劳,进而心血来潮弃用前端框架,全程自己搭了一个响应式布局。但是BUG实在是挺多,并且架构方式也很不优雅:几乎都利用resize时间进行布局。之后再继续学习改进...

另外考虑到电脑和手机端的操作有别,对于一些操作(回到顶部、一次跳多页等)的实现是有所区别的。大家自行探索 :)

评论系统

说实话,评论系统的确有点费力不讨好。思前想后觉得还是找一个成熟的评论插件使用比较好。最后看了半天(其实是看脸)选择了HyperComments,整体风格比较符合该博客,且简洁好使,用一段时间再看看稳定性如何吧。

后话

总体来说,这一次开发还是挺爽的... 整个博客代码也公开托管在Github上,不过我相信不会有人看的o(╯□╰)o。

开发的过程中衍生了两个很独立的项目: Fonttailor和mdEditor,当然都很naive,不说也罢,由于发布匆忙,之后在完善后在git单开仓库也有可能。

目前该博客处于测试期,出现一切bug都是有可能的,如果碰到了大可以联系我个人邮箱levy@levy.at。感激不尽。