发现这博客几乎没有更新了,一年也就更新几篇……反而是空间换地有点勤。之前用的国内空间这两天一直催着备案,加上之前看了一些静态博客的东西,感觉不错,干脆借机迁移到静态博客。
所谓静态博客,它是在写好文章后,在本地生成静态页面后再上传到服务器(Jekyll在Github Page上的例子有点特殊,后面会讲到),而不是像传统的Wordpress等基于动态语言、数据库博客那样在访问的时候从数据库读取数据动态生成页面。静态博客最大的优点是速度快,对网站使用的空间要求也不高,想找一个不支持静态页面的空间也是挺难的,缺点嘛,功能没有Wordpress等传统博客那么强。静态博客的”静态”主要体现在浏览者的角度,而不是写作者的角度,其最终的HTML文件,也是计算机生成的。静态博客与动态博客的差别就好像去超市里买一罐咖啡与去咖啡厅点一杯咖啡的差别。
现在人气比较高的的静态博客系统有Jekyll,Hexo,Octopress等,除了这三个之外,其他的感觉都不是特别主流,加上静态博客本身就不是什么主流的东西,用的人少了,维护性及系统的完善程度肯定没那么好。Octopress是在Jekyll上的一个框架,网上褒贬不一,而且意见有点极端,说它好的人爱到简直是没了它不行,说它不好的人贬地一无是处。最终我试用了一下Hexo跟Jekyll。
Jekyll应该是现在最火的静态博客系统了,从Github Pages支持Jekyll上就能看出来。所谓Github Page支持Jekyll,并不是说Github Page上面可以放Jekyll的博客而不能放Hexo的博客,而是说Github Page支持直接上传Jekyll的源文件,由Github Pages的服务器生成静态页面,无需在本地生成好后再上传。这样就能利用Github强大的版本管理功能维护博客内容、皮肤、设置之类的东西,而别人clone下来的也不再只是博客的HTML文件,而是包括皮肤、设置、文章等源文件。从开源的角度讲,更加方便了别人“拿来主义”你的东西,当然也方便了你“拿来主义”别人的东西。我现在用到的皮肤、搜索功能就是从别人那里clone下来的。
关于Jekyll的使用教程网上很多,官网的文档其实也很详细,过一遍之后做一个比较简单的站并不麻烦,关于Jekyll的用法我就不多说了。
Jekyll与其说是一套博客系统,不如说是一个生成静态网站的框架、或者编程语言,在Jekyll站源文件的根目录下,有一个重要文件_config.yml,其本质就是一个定义了一系列变量参数,比如我的配置文件前几行:
# Jekyll configuration
name: 大傻师的博客
description: 记录了一堆乱七八糟的东西
# url is currently only used only for the RSS feed in feed.xml
url: http://www.dashashi.com
对Jekyll来说,name、description之类的参数名本身并没有啥意义,只是用来在其他文件中引用的。在index.html中,加入
<title>{{ site.name }}</title>
则在生成最终页面的时候,”{{ site.name }}”会被自动替换成”大傻师的博客”。
通过编写合适的包含Jekyll函数、变量的html、markdown、json等文件,就能实现博客内容跟博客皮肤界面的分离。从这点上来看,Jekyll跟php其实有点像。
在Jekyll中,无论是文章的markdown文件还是网页模版的html文件,只要文件是以类似 — author: dashashi layout: post — 这样的由两个—夹着几个变量这样的形式开头的,Jekyll就会以一定的规则处理这个文件中的Jekyll命令。这点比Hexo要强大一些,这也是我最终没有用Hexo的原因。
Jekyll功能很强大,但是用起来比较麻烦,如果懂一点HTML、JS的语法,用起来会更加得心应手。在Jekyll中,修改、使用皮肤的方式还是属于比较原始,在基本的框架下,没有办法同时保有多套皮肤、并方便的切换皮肤。另外,个人感觉Jekyll的皮肤相对于Hexo来说,普遍功能都简单一些。估计也就是因为Jekyll易用性的不足,才会有很多基于Jekyll的框架,比如OctoPress。
Hexo是一个台湾人写的基于Node.JS的静态博客框架。据说他最初之所以要写Hexo,是因为受不了OctoPress的生成速度,两者的页面生成速度据说是百倍级的差距。
相比于Jekyll,Hexo就更像是一套博客系统了,在设计之初就实现了文章与皮肤的分离。在Hexo里面有专门的皮肤目录,把皮肤放进去之后,只需要在_config.yml文件中写上theme: xxx 就能指定皮肤。易用性带来的是灵活性的不足,在Hexo中,只有皮肤相关的文件能执行函数,包含文章内容的markdown文件是无法执行函数的。
如果想在一篇文章中插入另外一篇文章的链接,直接插入那篇文章的固定链接当然可以,但是如果被应用文章的固定链接变了,添加的链接就失效了。为此,Jekyll提供了一种方法,就是在文章中调用post_url函数,{% post_url /subdir/2010-07-21-name-of-post %}。在Hexo中,想实现类似的功能就需要添加插件了。
引用知乎里一个人的说法,静态博客不是为 hacker 做的,是为”萨比西”的人做的。相比之下,Jekyll比Hexo更加”萨比西”。