引言

博客搭建这么久了发现并没有进行过优化,首页虽然打开速度勉强能够接受,但是 github 和 coding 提供的空间有限,是时候优化一下了。基本思路是采用 gulp 进行代码的压缩等。

分析

在浏览器输入url到页面打开,都做了些什么?

  • 浏览器里输入网址 https://zsyyblog.com
  • 浏览器查找域名对应的IP地址
    这一步包括DNS具体的查找过程,包括:浏览器缓存->系统缓存->路由器缓存…
  • 浏览器向web服务器发送一个HTTP请求
  • 服务器的永久重定向响应(从https://zsyyblog.comhttps://www.zsyyblog.com)
    关于为什么要重定向。其中一个原因跟搜索引擎排名有关。如果一个页面有两个地址,就像 https://zsyyblog.comhttps://www.zsyyblog.com ,搜索引擎会认为它们是两个网站,结果造成每一个的搜索链接都减少从而降低排名。所以要把带www的和不带www的地址归到同一个网站排名下。还有一个原因是用不同的地址会造成缓存友好性变差。
  • 浏览器跟踪重定向地址,发起GET请求
  • 服务器”处理”请求,向浏览器发回一个HTML响应
  • 浏览器解析显示HTML
  • 浏览器发送请求获取嵌入在 HTML 中的资源(如图片、音频、视频、CSS、JS等等)
  • 浏览器发送异步请求(ajax请求等)

从上面的过程可以看出,其实大部分过程我们是控制不了的,我们只能从浏览器端入手来找一些可以做的事情。那么,我们可以做些什么呢?

  • 少发送请求
    把要加载的js文件(css文件同理)合并成一个(尽量少)文件,则可以向服务器少发送请求,从而减少等待时间。
  • 压缩文件
    使用压缩之后的js、css、img文件,同样可以减少请求时间。
  • Css Sprite
    这是css的一项技术,将图片尽可能多的合并成一个图片文件,第一次使用的时候加载这张图片,然后浏览器会缓存下来,其他地方再使用的时候就不需要重新请求了。
  • js/css位置
    css引用建议放在head标签里面;js脚本建议放到body内容的最后,原因:等待js加载或者脚本有错误的时候不会影响html页面的展示。

操作步骤

首先需要安装的 gulp 插件有:gulp-clean-cssgulp-uglifygulp-htmlmingulp-htmlclean。安装它们并将其加入到 package.json 的依赖中:

1
npm i --save gulp-clean-css gulp-uglify gulp-htmlmin gulp-htmlclean

当然,你的电脑上需要安装有 gulp,这里进行了全局安装:

1
npm i -g gulp

然后在项目的根目录下新建 gulpfile.js 文件,里面一通配置,还是比较简单的,稍微熟悉点 gulp 的都没多大问题:

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
var gulp = require('gulp');
var cleancss = require('gulp-clean-css');
var uglify = require('gulp-uglify');
var htmlmin = require('gulp-htmlmin');
var htmlclean = require('gulp-htmlclean');

/*压缩CSS*/
gulp.task('minify-css', function() {
return gulp.src('./public/**/*.css')
.pipe(cleancss())
.pipe(gulp.dest('./public'));
});

/*压缩html文件*/
gulp.task('minify-html', function() {
return gulp.src('./public/**/*.html')
.pipe(htmlclean())
.pipe(htmlmin({
removeComments: true,
minifyJS: true,
minifyCSS: true,
minifyURLs: true
}))
.pipe(gulp.dest('./public'));
});

/*压缩JS文件*/
gulp.task('minify-js', function() {
return gulp.src('./public/**/*.js')
.pipe(uglify())
.pipe(gulp.dest('./public'));
});

gulp.task('default', ['minify-html', 'minify-css', 'minify-js']);

测试验证

大功告成。这样在执行生成命令和部署命令中间加一个 gulp 的命令即可:

1
2
3
4
hexo cl
hexo g
gulp
hexo d