前言

所需材料:腾讯云实名账号,PicList

俗话说:“工欲善其事,必先利其器。” 博客首先要有一个较优的访问速度。

这是我的博客的网站速度测试

优化思路

一般来说访问速度是较快的,主要由两个原因导致,可以看这张思维导图

服务器地区(法一)

氪金换服务器

Gitee本身的服务器地理位置优势是占比较大的,如果选用Github或Vercel(被墙了)可能会出现根本打不开或访问速度较慢的情况,无法保证其访问质量。所以如果想建站,我推荐你选用国内(包括港澳台)的服务器并且要选“靠谱”的云服务提供商,或者干脆自己买个树莓派来用,这也是比较划算的方法。

手动优化博客访问速度(法二)

对象存储

对象存储是用来描述解决和处理离散单元的方法的通用术语。对象在一个层结构中不会再有层级结构,是以扩展元数据为特征的。可以把它理解成一块“硬盘”,可以把博客文件(图床,源代码)上传,并且是随时可以访问的。

对象存储云服务平台较多,例如:阿里、腾讯、七牛、又拍等多家云服务厂商,这里选用腾讯云作为示例。

选择腾讯云因为它不需要自定义域名

登录 - 腾讯云 (tencent.com)

登录腾讯云官网,并完成实名认证操作。显示已实名认证即可。

总览 - 控制台 - 腾讯云 (tencent.com)

进入腾讯云控制台,悬停云产品栏,选择基础存储服务-对象存储

无需购买资源包,只需按照腾讯云按量计费付款即可,建议提前存入一些软妹币,以免欠费

进入对象存储页面,单击存储桶列表栏,可以选择创建存储桶(没有创建过的话),或者用已有存储桶。

单击创建存储桶,可以直接照抄选项

存储桶访问权限一定要选“公有读私有写”,否则上传的文件无法访问

存储桶所属地域选择中国 (建议选我国中部的地域,访问速度较为均衡)。其他国家访问效果肯定不佳,但需要看你网站的具体访问对象来源,需不需要境外访问。

名称自定义即可

其余选项均可自行选择

数据无价,如果需要云备份,可开启版本控制与多AZ特性,提高数据的可用性

接下来下一步并创建即可。

此时,你已经拥有了一个对象存储桶了,可以愉快的上传文件了☆: .。. o(≧▽≦)o .。.:

建议你提前开启全球加速功能并使用全球加速域名,降低后续更改工作量

但文件慢慢变多你会发现访问速度有些许降低,你只需要点击博客存储桶,并选择域名与传输管理-全球加速并开启功能即可(需额外付费)类似于CDN

在文件详情页选择全球加速域名即可使用。

此时上传文件+加速的功能也已经基本完成,但我们可以用它做一个“CDN”。

Gulp压缩静态资源

Gulp压缩博客静态资源(源文件/魔改文件)

1
2
3
4
5
6
7
8
9
npm install --global gulp-cli 
npm install gulp --save
npm install gulp-htmlclean --save-dev
npm install gulp-html-minifier-terser --save-dev
npm install gulp-clean-css --save-dev
npm install gulp-terser --save-dev
npm install gulp-fontmin --save-dev
#以上均为Gulp本体、插件NPM安装指令,可用CMD/Powershell执行
#npm install gulp-fontmin --save-dev指令只适合在本地存放ttf字体文件的博客使用,其余无效

此时,Gulp插件安装工作便已完成,下面需要创建压缩规则文件

博客文件目录下新建JS文件,重命名为gulpfile.js

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//用到的各个插件
var gulp = require('gulp');
var cleanCSS = require('gulp-clean-css');
var htmlmin = require('gulp-html-minifier-terser');
var htmlclean = require('gulp-htmlclean');
var fontmin = require('gulp-fontmin');
// gulp-tester
var terser = require('gulp-terser');
// 压缩js
gulp.task('compress', async() =>{
gulp.src(['./public/**/*.js', '!./public/**/*.min.js'])
.pipe(terser())
.pipe(gulp.dest('./public'))
});
//压缩css
gulp.task('minify-css', () => {
return gulp.src(['./public/**/*.css'])
.pipe(cleanCSS({
compatibility: 'ie11'
}))
.pipe(gulp.dest('./public'));
});
//压缩html
gulp.task('minify-html', () => {
return gulp.src('./public/**/*.html')
.pipe(htmlclean())
.pipe(htmlmin({
removeComments: true, //清除html注释
collapseWhitespace: true, //压缩html
collapseBooleanAttributes: true,
//省略布尔属性的值,例如:<input checked="true"/> ==> <input />
removeEmptyAttributes: true,
//删除所有空格作属性值,例如:<input id="" /> ==> <input />
removeScriptTypeAttributes: true,
//删除<script>的type="text/javascript"
removeStyleLinkTypeAttributes: true,
//删除<style>和<link>的 type="text/css"
minifyJS: true, //压缩页面 JS
minifyCSS: true, //压缩页面 CSS
minifyURLs: true //压缩页面URL
}))
.pipe(gulp.dest('./public'))
});
//压缩字体
function minifyFont(text, cb) {
gulp
.src('./public/fonts/*.ttf') //原字体所在目录
.pipe(fontmin({
text: text
}))
.pipe(gulp.dest('./public/fontsdest/')) //压缩后的输出目录
.on('end', cb);
}

gulp.task('mini-font', (cb) => {
var buffers = [];
gulp
.src(['./public/**/*.html']) //HTML文件所在目录请根据自身情况修改
.on('data', function(file) {
buffers.push(file.contents);
})
.on('end', function() {
var text = Buffer.concat(buffers).toString('utf-8');
minifyFont(text, cb);
});
});
// 运行gulp命令时依次执行以下任务
gulp.task('default', gulp.parallel(
'compress', 'minify-css', 'minify-html','mini-font'
))

此时,gulp压缩便已基本上大功告成,只需要在CMD中执行 gulp即可

例如:

1
hexo cl && hexo g && gulp && hexo d

(Powershell不支持连写“&&”)

Gulp+腾讯云COS实现“CDN”

通过上面的两个示例,我想你已经明白了两个优化博客访问速度的基本方法,接下来,我们将他们结合一下。

因为国内Jsdelivr访问速度较慢,无法起到CDN的作用,可以使用Gulp文件将链接更改一下,首先,你需要在主题页选择Jsdelivr CDN加速。

需要npm安装几个库

1
2
3
npm install gulp-cli -g
npm install gulp -D
npm install --save-dev gulp-replace

再根据上文提到的Gulp文件增加一些代码

1
2
3
4
5
6
7
8
const gulp = require('gulp'); //如果之前有gulp相关插件,请删除此行代码
const replace = require('gulp-replace');
gulp.task('templates', async() => {
gulp.src('public/**/*.*')
.pipe(replace('这里填写jsd官方域名', '您需要使用的cdn地址'))
.pipe(gulp.dest('public/')), { overwrite: true };
});
gulp.task("default", gulp.parallel('templates'));

也可以直接下载我整合的

此时,将原本的gulpfile替换,并替换你自己的全球加速地址即可,在代码的75行

你问我静态文件去哪找?去Jsdelivr/CDN官网再安装一个Resources Saver 找到里面的具体文件,并按照链接格式添加到Cos桶即可

例如这样:

Pjax

Butterfly主题下支持直接开启Pjax功能

1
2
3
4
pjax: 
enable: true
exclude:
- /xxx/

一些魔改/自带功能页面不支持开启Pjax,可使用Exclude排除

ServiceWorker

小白也能用的 SW 构建插件 | 山岳库博 (kmar.top)

可直接查看这篇文章,比较清晰直观

至此,大功告成!