[成功解决]hexo next主题大量空白行问题

因为感觉hexo好看的主题比jekyll要多,而且hexo是用JavaScript写的,相比较Ruby,对JavaScript也更熟悉,所以干脆使用hexo作为博客框架!但是使用一段时间后发现hexo框架也存在很多小问题,比如生成的html代码有大量的空白行,不知道是我使用的next主题才有这样的问题,还是Hexo框架本身的特性造成的,我注意到,相比jekyll,hexo主题的模块小而多。

本文固定地址: http://blog.jiangjiaolong.com/hexo-next-theme-minify.html

大量空白行的弊端

hexo生成的html文件,空白行就大概占据着三分之二,个人感觉大量的空白行有以下弊端:

  1. 可读性差,如果想检查html代码的话,大量的空白行使源代码可读性非常差!
  2. 影响访问速度,虽然换行符本身占用的内存很小,但是大量的无用换行符也会使温度变大,影响访问速度!
  3. 不利与SEO优化,这一点有待考证,但是估计爬虫应该也不喜欢大量的换行符吧。

开始解决

在网上搜索了一下解决方案,大多是使用第三方插件,例如Gulp,使用方法点这里,我也下载试用了。首先压缩速度非常慢,大概是hexo生成静态页面时间的两倍!还有就是压缩的html代码不仅会去掉空白行,所有的的换行符都会被删除,因为看下了几个大型的门户网站,都没有这样的压缩处理,担心这样压缩后不利于SEO优化,所以还是放弃这种压缩方式。不过还是保留了对js及css的压缩处理,仅仅是注释掉了中间的html处理函数!

自己写一个小工具

问题还是要解决,既然现成的工具不满意,那就自己写一个!用什么语言写?当然是Python!
不到30行代码,搞定!测试了一下效果不错,速度也很不错,二三十个页面基本上一秒钟搞定!
附上源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/env python3
# coding: UTF-8
import re,os
def minify_html(filename):
with open(filename,'r',encoding='utf-8') as p:
with open(filename+'.tmp','w',encoding='utf-8') as t:
while True:
l = p.readline()
if not l:
break
else:
if re.search('\S',l):
t.write(l)
os.remove(filename)
os.rename(filename+'.tmp',filename)
print('%s 已压缩!'%filename)
def yasuo(dir_path):
if dir_path[len(dir_path)-1] == '/':
dir_path = dir_path[:len(dir_path)-1]
file_list = os.listdir(dir_path)
for i in file_list:
if i.find('html') > 0:
minify_html(dir_path+'/'+i)
elif os.path.isdir(dir_path+'/'+i) and not re.match('\.|\_',i):
yasuo("%s/%s"%(dir_path,i))

yasuo('your_path')

将your_path替换成你的网站目录即可,请使用绝对路径,请使用python3运行!

去空行前:
去空行前

去空行后:
去空行前

本文历史

  • 首次发表于 2018年3月18日 22:05