一个计算机技术爱好者与学习者

0%

Hexo本地搜索加速

1. 前言

随着文章数量的增长,search.xml文件越来越大。因此在加载这个文件时,需要的时间很长,而且偶尔会出现加载不出来的情况。

有没有什么办法能够加快加载速度呢?必须是有的,本文就来研究一下。

《Hexo使用Gulp压缩静态资源》一文中,提到search.xml大小为3.5M。今天又看了一下,文件大小变成了4.3M(加载时会压缩传输,大小约为1.3M)。从文中的实验可以得出结论,在文件大小方面,没有什么优化的空间了。

再想优化,就得从网络方面入手:CDN加速。主要参考jsDelivr+Github 使用方法

更多Hexo相关内容,参考Hexo系列文章

2. 思路

修改 search.xml 的文件链接,改成cdn的地址。

3. 实现

1、测试jsdelivr链接,search.xml的cdn地址为
https://cdn.jsdelivr.net/gh/voidking/voidking.github.io/search.xml

2、编辑 next/source/js/local-search.js ,如下修改:

1
2
3
4
// const path = CONFIG.root + searchPath;
const jsdelivr = 'https://cdn.jsdelivr.net/gh/'
const userRepo = 'voidking/voidking.github.io/'
const path = jsdelivr + userRepo + searchPath;

3、本地测试,提交代码,使用修改后的主题进行部署

实测加载速度飞快,4.3M的search.xml能够稳定在2秒内加载完毕,完美。

4. 提高通用性

1、cdn的配置放在 _config.yml 文件中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Local Search
# Dependencies: https://github.com/theme-next/hexo-generator-searchdb
local_search:
enable: true
# If auto, trigger search by changing input.
# If manual, trigger search by pressing enter key or search button.
trigger: auto
# Show top n results per article, show all results by setting to -1
top_n_per_article: 1
# Unescape html strings to the readable one.
unescape: false
# Preload the search data when the page loads.
preload: false
# Use CDN to accelerate the speed of loading search.xml
cdn:
enable: false
# url: //cdn.jsdelivr.net/gh/<username>/<username>.github.io/search.xml
url:

2、编辑 next/source/js/local-search.js ,如下修改:

1
2
3
4
5
let path = CONFIG.root + searchPath;
// Use CDN to accelerate the speed of loading search.xml
if ('cdn' in CONFIG.localsearch && CONFIG.localsearch.cdn.enable === true && CONFIG.localsearch.cdn.url !== null){
path = CONFIG.localsearch.cdn.url;
}