一个多月前,我第二次开始了 WordPress to Hexo 的工作。拖拖拉拉的,现在总算弄完了。记在这里,做个汇报。

Theme

我选择了一个支持 bootstrap 的主题 freemind ,并进行了修改。

AID 服务

正如 WordPress to Hexo(1) 中提到的,我写了一个独立的 AID 服务来提供 Download 和 PageView 功能。

例如这个 API 就直接从 WordPress 的数据库中读取下载信息。

同样的,PageView 的信息也是直接从 WordPress 数据库读取。

嵌入标签处理

在 WordPress 中我使用最多的嵌入标签就是 [kml_flashembed][download] 。 我写了一些脚本将这些嵌入标签转换成为 Hexo 支持的 flash 和 download 标签。

为了让 Hexo 支持 flash 和 download 标签,我在主题中加入了一段 script 来进行处理。本来准备写一个 package 级别的 Hexo 插件来处理这些标签的。但在 Hexo 插件开发过程中不知道如何获得 Hexo 和 Theme 的配置文件内容,没时间看源码,就干脆用 script 来处理了。

Flash Movie 支持

在 WordPress 中嵌入的 kml_flashembed 代码:

1
[kml_flashembed width="450" height="250" movie="/wp-content/uploads/2006/06/Video2BitmapData_1.swf" /]

会被转换成下面的样子:

1
2
3
4
5
{% flash %}
width: '450'
height: '250'
movie: /uploads/2006/06/Video2BitmapData_1.swf
{% endflash %}

最终 Hexo 会使用 flash.ejs 模版进行渲染。

在博客中的效果如下: BitmapData类不能正常获取Video中的像素

Download 服务

在 WordPress 中嵌入的 download 代码:

1
[download id="142"]

会转换成下面的样子:

1
2
3
4
{% download %}
id:
- '142'
{% enddownload %}

最终 Hexo 会使用 download.ejs 模版进行渲染。

由于我的服务器性能很差,为了避免每次展示下载页面的时候都去读取数据库影响性能,我在模版中将下载交互方式设置为,先点击下载按钮,做一次 AJAX 调用展示下载信息,在下载信息中提供直接下载链接。

在博客中的效果如下: MacBook Pro Retina 睡眠耗电现象深究

域名更换

博客的域名目前更改为 blog.zengrong.net ,要考虑以下两点访问问题:

  1. 在搜索引擎中缓存的文章地址更改;
  2. 各种引用(包括博客自身的引用)的文章地址更改。

博客自身的引用,可以使用替换完成,而搜索引擎中的地址更改,就要动用 301 重定向 了。下面是部分重定向内容:

1
2
3
4
5
6
7
8
location ~ /post/ {
rewrite ^/post/(\d+).html? http://blog.zengrong.net/post/$1.html permanent;
rewrite ^/post/date/(.*) http://blog.zengrong.net/archive/$1/ permanent;
rewrite ^/post/tag/(.*) http://blog.zengrong.net/tag/$1/ permanent;
rewrite ^/post/category/(.*) http://blog.zengrong.net/category/$1/ permanent;
rewrite ^/post/author/.* http://zengrong.net/about/ permanent;
return 404;
}
需要注意的是,URL 最后部分的锚点(#及其后面的内容)是 **不会** 被发到服务器的,因此锚点的重定向只能放弃了。

性能

Hexo 生成的博客内容全部上传到又拍云提供的 CDN 中,域名在 CDN 中作了绑定,因此现在博客中全部都是静态内容。

目前的博客文章数量近千篇,编译一次耗时 1 分钟以上,上传使用又拍提供的 upx 同步客户端工具,速度也不快。

这才是硬伤啊……

1
2
3
4
5
hexo g
INFO Start processing
INFO Files loaded in 13 s
...
INFO 2694 files generated in 1.85 min

剩余工作

  • 早期的一些文章使用了 gallery 标签,需要对其做替换。
  • 重写主题。因为实在不喜欢 EJS 模版,我考虑使用 Nunjucks 重写主题并进行美化。
  • 之前 WordPress 的畅言插件可以将畅言的评论同步到 WordPress 中。考虑自己写一个这样的功能。
  • 看到基于 Github 的 Issue 功能实现的 评论系统comment.js ,觉得挺有意思,考虑折腾一下。
  • 优化 Hexo 的编译性能,我这近千篇文章的编译速度的确是很糟糕。
  • 优化上传性能,目前使用的 upx 的同步功能上传,速度较慢,应该改为仅上传更新过的静态文件。

留言

2017-07-16
次访问