博客之优化

  • 一:老规矩安装 gulp压缩插件(已安装的跳过此步)

    1
    2
    3
    4
    5
    6
    # 全局安装gulp模块
    npm install gulp -g
    # 安装各种小功能模块 执行这步的时候,可能会提示权限的问题,最好以管理员模式执行
    npm install gulp gulp-htmlclean gulp-htmlmin gulp-minify-css gulp-uglify gulp-imagemin --save
    # 额外的功能模块
    npm install gulp-debug gulp-clean-css gulp-changed gulp-if gulp-plumber gulp-babel babel-preset-es2015 del @babel/core --save
  • 二:在Hexo根目录新建 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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    var gulp = require("gulp");
    var debug = require("gulp-debug");
    var cleancss = require("gulp-clean-css"); //css压缩组件
    var uglify = require("gulp-uglify"); //js压缩组件
    var htmlmin = require("gulp-htmlmin"); //html压缩组件
    var htmlclean = require("gulp-htmlclean"); //html清理组件
    var imagemin = require("gulp-imagemin"); //图片压缩组件
    var changed = require("gulp-changed"); //文件更改校验组件
    var gulpif = require("gulp-if"); //任务 帮助调用组件
    var plumber = require("gulp-plumber"); //容错组件(发生错误不跳出任务,并报出错误内容)
    var isScriptAll = true; //是否处理所有文件,(true|处理所有文件)(false|只处理有更改的文件)
    var isDebug = true; //是否调试显示 编译通过的文件
    var gulpBabel = require("gulp-babel");
    var es2015Preset = require("babel-preset-es2015");
    var del = require("del");
    var Hexo = require("hexo");
    var hexo = new Hexo(process.cwd(), {}); // 初始化一个hexo对象

    // 清除public文件夹
    gulp.task("clean", function () {
    return del(["public/**/*"]);
    });

    // 下面几个跟hexo有关的操作,主要通过hexo.call()去执行,注意return
    // 创建静态页面 (等同 hexo generate)
    gulp.task("generate", function () {
    return hexo.init().then(function () {
    return hexo
    .call("generate", {
    watch: false
    })
    .then(function () {
    return hexo.exit();
    })
    .catch(function (err) {
    return hexo.exit(err);
    });
    });
    });

    // 启动Hexo服务器
    gulp.task("server", function () {
    return hexo
    .init()
    .then(function () {
    return hexo.call("server", {});
    })
    .catch(function (err) {
    console.log(err);
    });
    });

    // 部署到服务器
    gulp.task("deploy", function () {
    return hexo.init().then(function () {
    return hexo
    .call("deploy", {
    watch: false
    })
    .then(function () {
    return hexo.exit();
    })
    .catch(function (err) {
    return hexo.exit(err);
    });
    });
    });

    // 压缩public目录下的js文件
    gulp.task("compressJs", function () {
    return gulp
    .src(["./public/**/*.js", "!./public/libs/**"]) //排除的js
    .pipe(gulpif(!isScriptAll, changed("./public")))
    .pipe(gulpif(isDebug, debug({ title: "Compress JS:" })))
    .pipe(plumber())
    .pipe(
    gulpBabel({
    presets: [es2015Preset] // es5检查机制
    })
    )
    .pipe(uglify()) //调用压缩组件方法uglify(),对合并的文件进行压缩
    .pipe(gulp.dest("./public")); //输出到目标目录
    });

    // 压缩public目录下的css文件
    gulp.task("compressCss", function () {
    var option = {
    rebase: false,
    //advanced: true, //类型:Boolean 默认:true [是否开启高级优化(合并选择器等)]
    compatibility: "ie7" //保留ie7及以下兼容写法 类型:String 默认:''or'*' [启用兼容模式; 'ie7':IE7兼容模式,'ie8':IE8兼容模式,'*':IE9+兼容模式]
    //keepBreaks: true, //类型:Boolean 默认:false [是否保留换行]
    //keepSpecialComments: '*' //保留所有特殊前缀 当你用autoprefixer生成的浏览器前缀,如果不加这个参数,有可能将会删除你的部分前缀
    };
    return gulp
    .src(["./public/**/*.css", "!./public/**/*.min.css"]) //排除的css
    .pipe(gulpif(!isScriptAll, changed("./public")))
    .pipe(gulpif(isDebug, debug({ title: "Compress CSS:" })))
    .pipe(plumber())
    .pipe(cleancss(option))
    .pipe(gulp.dest("./public"));
    });

    // 压缩public目录下的html文件
    gulp.task("compressHtml", function () {
    var cleanOptions = {
    protect: /<\!--%fooTemplate\b.*?%-->/g, //忽略处理
    unprotect: /<script [^>]*\btype="text\/x-handlebars-template"[\s\S]+?<\/script>/gi //特殊处理
    };
    var minOption = {
    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"
    removeComments: true, //清除HTML注释
    minifyJS: true, //压缩页面JS
    minifyCSS: true, //压缩页面CSS
    minifyURLs: true //替换页面URL
    };
    return gulp
    .src("./public/**/*.html")
    .pipe(gulpif(isDebug, debug({ title: "Compress HTML:" })))
    .pipe(plumber())
    .pipe(htmlclean(cleanOptions))
    .pipe(htmlmin(minOption))
    .pipe(gulp.dest("./public"));
    });

    // 压缩 public/medias 目录内图片
    gulp.task("compressImage", function () {
    var option = {
    optimizationLevel: 5, //类型:Number 默认:3 取值范围:0-7(优化等级)
    progressive: true, //类型:Boolean 默认:false 无损压缩jpg图片
    interlaced: false, //类型:Boolean 默认:false 隔行扫描gif进行渲染
    multipass: false //类型:Boolean 默认:false 多次优化svg直到完全优化
    };
    return gulp
    .src("./public/medias/**/*.*")
    .pipe(gulpif(!isScriptAll, changed("./public/medias")))
    .pipe(gulpif(isDebug, debug({ title: "Compress Images:" })))
    .pipe(plumber())
    .pipe(imagemin(option))
    .pipe(gulp.dest("./public"));
    });
    // 执行顺序: 清除public目录 -> 产生原始博客内容 -> 执行压缩混淆 -> 部署到服务器
    gulp.task(
    "build",
    gulp.series(
    "clean",
    "generate",
    "compressHtml",
    "compressCss",
    "compressJs",
    "compressImage",
    gulp.parallel("deploy")
    )
    );

    // 默认任务
    gulp.task(
    "default",
    gulp.series(
    "clean",
    "generate",
    gulp.parallel("compressHtml", "compressCss", "compressJs","compressImage")
    )
    );
    //Gulp4最大的一个改变就是gulp.task函数现在只支持两个参数,分别是任务名和运行任务的函数
  • 三:安装 hexo-neat代码压缩插件(已安装的跳过此步)

    1
    npm install hexo-neat --save
  • 四:在站点根目录下的 _config.yml底部添加如下代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #hexo-neat 优化提速插件(去掉HTML、css、js的blank字符)
    neat_enable: true
    neat_html:
    enable: true
    exclude:
    - '**/*.md'
    neat_css:
    enable: true
    exclude:
    - '**/*.min.css'
    neat_js:
    enable: true
    mangle: true
    output:
    compress:
    exclude:
    - '**/*.min.js'
  • 五:生成压缩文件

    1
    2
    gulp default  //这个命令相当于 hexo cl&&hexo g
    gulp build //这个命令相当于 hexo cl&&hexo g
  • 我们现在选择的命令是 gulp default,因为不需要上传到服务器,(这个命令会自动同时启动上面两个代码压缩插件)

代码第三次压缩

  • 六:删除 node_modules文件夹里有关 live2d文件 (这里是选项,可以不删,但可能会出现无法插件无法加载,具体自己尝试)

  • 七:前往 HTML/css/JS在线压缩工具

  • 注意:不要修改右边的参数,默认就好

  • 八:进入 hexo/public目录(就是hexo d生成的文件夹)
  • 九:把public文件夹里面有关 html 文件里的代码复制到 HTML/css/JS在线压缩工具,进行第三次代码压缩。

  • 当然因为 html 文件过多,根据自己的需要来进行第三次压缩

好了,代码第三次压缩完就可以直接 hexo d 上传到服务器了,当然有些人会有各种错误,自行尝试调整到最佳,具体效果自行查看本博客,再见!!!

CDN厂商

CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
CDN可有可无
介绍几个CDN厂商:
Tencent Cloud CDN(国内知名厂商的CDN,安全有保障,超稳定,提供多节点,付费,非中国内地节点免备案!)
Alibaba Cloud CDN(国内知名厂商的CDN,安全有保障,超稳定,含全球(不包含内地)、国内节点,付费,国内节点需备案!)
Nodecache CDN(速度理想、包含中国内地、港澳台、全球加速节点,付费,全球节点和港澳台免备案!)
Vercel(Zeit)(CDN节点几乎全球,包含香港超快节点,免费,免备案!)
Fast.io(使用CloudFlare高级版本节点,速度快,稍不稳定,免费,免备案!)
CloudFlare(老派、稳定、国内速度不理想)
Baidu Cloud Speed(与CloudFlare合作,稳定,免费、需备案!)
Baidu Cloud CDN(百度云的CDN,与百度云加速并非同一线路,需备案!)
Upyun CDN(知名CDN,加入又拍云联盟计划免费,需备案!)