前言

这里是Hexo博客优化的最后一篇了,主要讲的是讲的是功能层面的优化,如:网站加速、评论功能、在线聊天功能、一键分享功能等等。

1. 添加网站评论功能

1.1来必力

来必力是一款韩国的评论软件,先进入注册登录,然后安装免费版本:

Hexo博客优化之Next主题功能强化

安装之后获取安装代码里面的uid,放入主题配置文件:

livere_uid: 你的uid

效果如下:

Hexo博客优化之Next主题功能强化

进入管理后台可以管理评论:

Hexo博客优化之Next主题功能强化

1.2Valine

Valine是国内的一款极简风格的评论软件,首先进入LeanCloud注册,然后在控制台随便创建一个项目后,获取**:

Hexo博客优化之Next主题功能强化

然后修改主题配置文件:

valine:
  enable: true # When enable is set to be true, leancloud_visitors is recommended to be closed for the re-initialization problem within different leancloud adk version.
  appid:  你的appid
  appkey:  你的appkey
  notify: false # 邮件提醒
  verify: false # 验证码
  placeholder: ヾノ≧∀≦)o 来呀!吐槽一番吧! # 默认输入信息
  avatar: mm # gravatar style
  guest_info: nick # 用户可输入的信息,支持:昵称nick,邮箱mail和链接link
  pageSize: 10 # pagination size,每页评论数
  visitor: false # leancloud-counter-security is not supported for now. When visitor is set to be true, appid and appkey are recommended to be the same as leancloud_visitors' for counter compatibility. Article reading statistic https://valine.js.org/visitor.html
  comment_count: true # 评论计数

其实在Web设置中可以添加我们的域名,差不多,效果如下:

Hexo博客优化之Next主题功能强化

其后台在我们的项目-存储-Comments中:

Hexo博客优化之Next主题功能强化

鉴于Valine比较适合我博客主题风格,我还是选择它。

2.添加网站分享功能

这里我采用的是needmoreshare2,首先在themes/next/下执行:

git clone https://github.com/theme-next/theme-next-needmoreshare2 source/lib/needsharebutton

然后配置主题文件:

needmoreshare2:
  enable: true
  postbottom:
    enable: true #是否开启博客分享按钮
    options:
      iconStyle: box
      boxForm: horizontal
      position: bottomCenter
      networks: Weibo,Wechat,Douban,QQZone,Twitter,Facebook
  float:
    enable: true #网站分享按钮
    options:
      iconStyle: box
      boxForm: horizontal
      position: middleRight
      networks: Weibo,Wechat,Douban,QQZone,Twitter,Facebook

效果如下:

Hexo博客优化之Next主题功能强化

3.博文压缩

我们利用Hexo生成的博客文件中存在大量的空格和空行,从而使得博客资源中有很多不必要的内存消耗,使得网站加载变慢,所以可以利用neat进行博文压缩,首先安装:

npm install hexo-neat --save

为了在开启hexo-neat的同时,不要将我们的动态配置压缩了,可在站点配置文件中加入:

# hexo-neat
# 博文压缩
neat_enable: true
# 压缩html
neat_html:
  enable: true
  exclude:
# 压缩css  
neat_css:
  enable: true
  exclude:
    - '**/*.min.css'
# 压缩js
neat_js:
  enable: true
  mangle: true
  output:
  compress:
  exclude:
    - '**/*.min.js'
    - '**/jquery.fancybox.pack.js'
    - '**/index.js' 
    - '**/clicklove.js'
    - '**/fireworks.js'

当然,除此之外还可以用gulp插件进行压缩,先安装:

npm install gulp -g
npm install gulp-minify-css gulp-uglify gulp-htmlmin gulp-htmlclean gulp --save

然后在blog主目录下添加gulpfile.js文件:

var gulp = require('gulp');
var minifycss = require('gulp-minify-css');
var uglify = require('gulp-uglify');
var htmlmin = require('gulp-htmlmin');
var htmlclean = require('gulp-htmlclean');
// 压缩 public 目录 css
gulp.task('minify-css', function() {
    return gulp.src('./public/**/*.css')
        .pipe(minifycss())
        .pipe(gulp.dest('./public'));
});
// 压缩 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'))
});
// 压缩 public/js 目录 js
gulp.task('minify-js', function() {
    return gulp.src('./public/**/*.js')
        .pipe(uglify())
        .pipe(gulp.dest('./public'));
});
// 执行 gulp 命令时执行的任务
gulp.task('default', [
    'minify-html','minify-css','minify-js'
]);

4.DaoVoice在线联系

首先我们在DaoVoice上注册一个账号,然后进入应用设置-安装到网站-仅匿名用户:

Hexo博客优化之Next主题功能强化

聊天设置中可以设置聊天窗口样式:

Hexo博客优化之Next主题功能强化

相应地,我们还能设置接受消息方式,既能控制台访问,也能微信或者邮件接受消息:

Hexo博客优化之Next主题功能强化

5.加速鼠标响应

在themes/next/下执行:

git clone https://github.com/theme-next/theme-next-fastclick source/lib/fastclick

然后设置主题配置文件:

fastclick = true

6.添加cdn加速

Next主题官方提供了一些软件的CDN加速,我们可以在主题配置文件中设置:

vendors:
  # Internal path prefix. Please do not edit it.
  _internal: lib

  # Internal version: 2.1.3
  # Example:
  # jquery: //cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js
  # jquery: //cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js
  jquery: //cdn.jsdelivr.net/jquery/2.1.3/jquery.min.js

  # Internal version: 2.1.5
  # See: https://fancyapps.com/fancybox
  # Example:
  # fancybox: //cdn.jsdelivr.net/gh/fancyapps/[email protected]/dist/jquery.fancybox.min.js
  # fancybox: //cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.6/jquery.fancybox.min.js
  # fancybox_css: //cdn.jsdelivr.net/gh/fancyapps/[email protected]/dist/jquery.fancybox.min.css
  # fancybox_css: //cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.6/jquery.fancybox.min.css
  fancybox: //cdn.jsdelivr.net/fancybox/2.1.5/jquery.fancybox.pack.js
  fancybox_css: //cdn.jsdelivr.net/fancybox/2.1.5/jquery.fancybox.min.css

  # Internal version: 1.0.6
  # See: https://github.com/ftlabs/fastclick
  # Example:
  # fastclick: //cdn.jsdelivr.net/npm/[email protected]/lib/fastclick.min.js
  # fastclick: //cdnjs.cloudflare.com/ajax/libs/fastclick/1.0.6/fastclick.min.js
  fastclick: //cdn.jsdelivr.net/fastclick/1.0.6/fastclick.min.js

  # Internal version: 1.9.7
  # See: https://github.com/tuupola/jquery_lazyload
  # Example:
  # lazyload: //cdn.jsdelivr.net/npm/[email protected]/jquery.lazyload.min.js
  # lazyload: //cdnjs.cloudflare.com/ajax/libs/jquery_lazyload/1.9.7/jquery.lazyload.min.js
  lazyload: //cdn.jsdelivr.net/jquery.lazyload/1.9.3/jquery.lazyload.min.js

  # Internal version: 1.2.1
  # See: http://velocityjs.org
  # Example:
  # velocity: //cdn.jsdelivr.net/npm/[email protected]/velocity.min.js
  # velocity: //cdnjs.cloudflare.com/ajax/libs/velocity/1.2.1/velocity.min.js
  # velocity_ui: //cdn.jsdelivr.net/npm/[email protected]/velocity.ui.min.js
  # velocity_ui: //cdnjs.cloudflare.com/ajax/libs/velocity/1.2.1/velocity.ui.min.js
  velocity: //cdn.jsdelivr.net/velocity/1.2.3/velocity.min.js
  velocity_ui: //cdn.jsdelivr.net/velocity/1.2.3/velocity.ui.min.js

  # Internal version: 0.7.9
  # See: https://faisalman.github.io/ua-parser-js
  # Example:
  # ua_parser: //cdn.jsdelivr.net/npm/[email protected]/src/ua-parser.min.js
  # ua_parser: //cdnjs.cloudflare.com/ajax/libs/UAParser.js/0.7.9/ua-parser.min.js
  ua_parser: //cdn.jsdelivr.net/ua-parser.js/0.7.10/ua-parser.min.js

  # Internal version: 4.6.2
  # See: https://fontawesome.com
  # Example:
  # fontawesome: //cdn.jsdelivr.net/npm/[email protected]/css/font-awesome.min.css
  # fontawesome: //cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.2/css/font-awesome.min.css
  fontawesome: //maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css

  # Internal version: 2.4.1
  # See: https://www.algolia.com
  # Example:
  # algolia_instant_js: //cdn.jsdelivr.net/npm/[email protected]/dist/instantsearch.js
  # algolia_instant_css: //cdn.jsdelivr.net/npm/[email protected]/dist/instantsearch.min.css
  algolia_instant_js:
  algolia_instant_css:

  # Internal version: 1.0.2
  # See: https://github.com/HubSpot/pace
  # Example:
  # pace: //cdn.jsdelivr.net/npm/[email protected]/pace.min.js
  # pace: //cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/pace.min.js
  # pace_css: //cdn.jsdelivr.net/npm/[email protected]/themes/blue/pace-theme-minimal.css
  # pace_css: //cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/themes/blue/pace-theme-minimal.min.css
  pace: //cdn.bootcss.com/pace/1.0.2/pace.min.js
  pace_css: //cdn.bootcss.com/pace/1.0.2/themes/blue/pace-theme-flash.min.css

  # Internal version: 1.0.0
  # See: https://github.com/theme-next/theme-next-canvas-nest
  # Example:
  # canvas_nest: //cdn.jsdelivr.net/gh/theme-next/[email protected]/canvas-nest.min.js
  # canvas_nest_nomobile: //cdn.jsdelivr.net/gh/theme-next/[email protected]/canvas-nest-nomobile.min.js
  canvas_nest: //cdn.bootcss.com/canvas-nest.js/1.0.1/canvas-nest.min.js
  canvas_nest_nomobile:

  # Internal version: 1.0.0
  # See: https://github.com/theme-next/theme-next-three
  # Example:
  # three: //cdn.jsdelivr.net/gh/theme-next/[email protected]/three.min.js
  # three_waves: //cdn.jsdelivr.net/gh/theme-next/[email protected]/three-waves.min.js
  # canvas_lines: //cdn.jsdelivr.net/gh/theme-next/[email protected]/canvas_lines.min.js
  # canvas_sphere: //cdn.jsdelivr.net/gh/theme-next/[email protected]/canvas_sphere.min.js
  three:
  three_waves:
  canvas_lines:
  canvas_sphere:

  # Internal version: 1.0.0
  # See: https://github.com/zproo/canvas-ribbon
  # Example:
  # canvas_ribbon: //cdn.jsdelivr.net/gh/theme-next/[email protected]/canvas-ribbon.js
  canvas_ribbon:

  # Internal version: 3.3.0
  # See: https://github.com/ethantw/Han
  # Example:
  # han: //cdn.jsdelivr.net/npm/[email protected]/dist/han.min.css
  # han: //cdnjs.cloudflare.com/ajax/libs/Han/3.3.0/han.min.css
  han:

  # Internal version: 3.3.0
  # See: https://github.com/vinta/pangu.js
  # Example:
  # pangu: //cdn.jsdelivr.net/npm/[email protected]/dist/browser/pangu.min.js
  # pangu: //cdnjs.cloudflare.com/ajax/libs/pangu/3.3.0/pangu.min.js
  pangu:

  # Internal version: 1.0.0
  # See: https://github.com/revir/need-more-share2
  # Example:
  # needmoreshare2_js: //cdn.jsdelivr.net/gh/theme-next/[email protected]/needsharebutton.min.js
  # needmoreshare2_css: //cdn.jsdelivr.net/gh/theme-next/[email protected]/needsharebutton.min.css
  needmoreshare2_js:
  needmoreshare2_css:

  # Internal version: 1.0.0
  # See: https://github.com/theme-next/theme-next-bookmark
  # Example:
  # bookmark: //cdn.jsdelivr.net/gh/theme-next/[email protected]/bookmark.min.js
  bookmark:

  # Internal version: 1.1
  # See: https://github.com/theme-next/theme-next-reading-progress
  # Example:
  # reading_progress: //cdn.jsdelivr.net/gh/theme-next/[email protected]/reading_progress.min.js
  reading_progress:

  # leancloud-storage
  # See: https://www.npmjs.com/package/leancloud-storage
  # Example:
  # leancloud: //cdn.jsdelivr.net/npm/[email protected]/dist/av-min.js
  leancloud:

  # valine
  # See: https://github.com/xCss/Valine
  # Example:
  # valine: //cdn.jsdelivr.net/npm/[email protected]/dist/Valine.min.js
  # valine: //cdnjs.cloudflare.com/ajax/libs/valine/1.3.4/Valine.min.js
  valine:

  # gitalk
  # See: https://github.com/gitalk/gitalk
  # Example:
  # gitalk_js: //cdn.jsdelivr.net/npm/[email protected]/dist/gitalk.min.js
  # gitalk_css: //cdn.jsdelivr.net/npm/[email protected]/dist/gitalk.css
  gitalk_js:
  gitalk_css:

  # js-md5
  # See: https://github.com/emn178/js-md5
  # Example:
  # md5: //cdn.jsdelivr.net/npm/[email protected]/src/md5.min.js
  md5:

7. 添加lazyload

lazylod可以在用户不查看的时候,不加载相关部分,从而提升网站加载速度,设置方法同上:

git clone https://github.com/theme-next/theme-next-jquery-lazyload source/lib/jquery_lazyload

然后配置主题文件:

lazyload: true

8.网站动态元素延时加载

我们的网站添加了许多动态元素之后,加载速度会变慢,所以可以先不加载动态元素,等静态元素加载完之后再加载动态元素,这样就加速了网站的登入。可设置主题文件:

# Use velocity to animate everything.
motion:
  enable: false
  async: false
  transition:
    # Transition variants:
    # fadeIn | fadeOut | flipXIn | flipXOut | flipYIn | flipYOut | flipBounceXIn | flipBounceXOut | flipBounceYIn | flipBounceYOut
    # swoopIn | swoopOut | whirlIn | whirlOut | shrinkIn | shrinkOut | expandIn | expandOut
    # bounceIn | bounceOut | bounceUpIn | bounceUpOut | bounceDownIn | bounceDownOut | bounceLeftIn | bounceLeftOut | bounceRightIn | bounceRightOut
    # slideUpIn | slideUpOut | slideDownIn | slideDownOut | slideLeftIn | slideLeftOut | slideRightIn | slideRightOut
    # slideUpBigIn | slideUpBigOut | slideDownBigIn | slideDownBigOut | slideLeftBigIn | slideLeftBigOut | slideRightBigIn | slideRightBigOut
    # perspectiveUpIn | perspectiveUpOut | perspectiveDownIn | perspectiveDownOut | perspectiveLeftIn | perspectiveLeftOut | perspectiveRightIn | perspectiveRightOut
    post_block: fadeIn
    post_header: slideDownIn
    post_body: slideDownIn
    coll_header: slideLeftIn
    # Only for Pisces | Gemini.
    sidebar: slideUpIn

9.添加站内搜索

Next集成了站内搜索功能,可先安装依赖:

npm install hexo-generator-searchdb --save

然后设置主题配置文件:

# 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: 3
  # unescape html strings to the readable one
  unescape: false

效果如下:

Hexo博客优化之Next主题功能强化

10.添加百度谷歌收录

要想让我们的博客被百度、谷歌等搜索引擎索引到,需要提交我们的域名,谷歌很快就能收录,但是百度要一两个月,具体步骤如下:

  • 在百度搜搜引擎中查看自己域名是否被收录:site:huangpiao.tech

  • 然后点击提交网址,并在百度站长中提交申请,并验证网站:

    Hexo博客优化之Next主题功能强化

    我选择将验证文件放入blog/source中,然后进行部署,为了防止渲染造成的文件失效,需要在这个验证文件上面加入:

    ---
    layout: false
    ---
    
  • 验证痛过之后,在我们的博客主目录下载安装:

    npm install hexo-generator-sitemap --save
    npm install hexo-generator-baidu-sitemap --save
    

    当我们在此加载博客会在public目录生成sitemap.xmlbaidusitemap.xml

  • 修改博客站点配置文件:

    # 自动生成sitemap
    sitemap:
      path: sitemap.xml
    baidusitemap:
      path: baidusitemap.xml
    
  • 修改博客主题配置文件:

    # Enable baidu push so that the blog will push the url to baidu automatically which is very helpful for SEO
    baidu_push: true
    

11.添加公式编辑功能

Next6主题集成了mathjax和katex两种公式编辑功能,其中后者渲染速度比前者快很多,只不过支持的功能少一点。

  • mathjax:

    在博客主目录执行:

    npm un hexo-renderer-marked --save
    npm i hexo-renderer-kramed --save # 或者 hexo-renderer-pandoc
    

    然后修改主题配置文件:

    math:
      enable: true
      ...
      engine: mathjax
      #engine: katex
    
  • katex:

    在博客主目录执行:

    npm un hexo-renderer-marked --save
    npm i hexo-renderer-markdown-it-plus --save
    

    然后修改主题配置文件:

    math:
      enable: true
      ...
      #engine: mathjax
      engine: katex
    

具体问题可以查看官方文档,至少我这里没有生效????

12.添加流程图支持

对于流程图flowchart或者更好的mermaid可以先下载:

npm install --save hexo-filter-flowchart
npm install hexo-filter-mermaid-diagrams 
npm install --save hexo-filter-sequence

然后在站点配置文件中加入:

flowchart:
  # raphael:   # optional, the source url of raphael.js
  # flowchart: # optional, the source url of flowchart.js
  options: # options used for `drawSVG`
# mermaid chart
mermaid: ## mermaid url https://github.com/knsv/mermaid
  enable: true  # default true
  version: "7.1.2" # default v7.1.2
  options:  
external_link: false #这个已经有了,修改即可
    

对于mermaid,则需要在themes/next/layout/_partial/footer.swig中加入:

{% if theme.mermaid.enable %}
  <script src='https://unpkg.com/[email protected]{{ theme.mermaid.version }}/dist/mermaid.min.js'></script>
  <script>
    if (window.mermaid) {
      mermaid.initialize({theme: 'forest'});
    }
  </script>
{% endif %}

13.增加文章置顶功能

修改 hero-generator-index 插件,把文件:node_modules/hexo-generator-index/lib/generator.js 内的代码替换为:

'use strict';
var pagination = require('hexo-pagination');
module.exports = function(locals){
  var config = this.config;
  var posts = locals.posts;
    posts.data = posts.data.sort(function(a, b) {
        if(a.top && b.top) { // 两篇文章top都有定义
            if(a.top == b.top) return b.date - a.date; // 若top值一样则按照文章日期降序排
            else return b.top - a.top; // 否则按照top值降序排
        }
        else if(a.top && !b.top) { // 以下是只有一篇文章top有定义,那么将有top的排在前面(这里用异或操作居然不行233)
            return -1;
        }
        else if(!a.top && b.top) {
            return 1;
        }
        else return b.date - a.date; // 都没定义按照文章日期降序排
    });
  var paginationDir = config.pagination_dir || 'page';
  return pagination('', posts, {
    perPage: config.index_generator.per_page,
    layout: ['index', 'archive'],
    format: paginationDir + '/%d/',
    data: {
      __index: true
    }
  });
};

在文章中添加 top 值,数值越大文章越靠前,如

---
title: 解决Charles乱码问题
date: 2017-05-22 22:45:48
tags: 技巧
categories: 技巧
copyright: true
top: 100
---

14.参考链接

  1. https://hoxis.github.io/hexo-next-daovoice.html
  2. https://blog.csdn.net/blue_zy/article/details/79071414
  3. https://www.jianshu.com/p/61abc6c43220
  4. https://blog.csdn.net/blue_zy/article/details/79071414
  5. https://blog.csdn.net/lvonve/article/details/80200348

来源:我的博客

相关文章:

  • 2021-08-06
  • 2020-01-12
  • 2021-11-30
  • 2021-08-27
  • 2021-11-20
  • 2021-04-04
  • 2021-11-02
  • 2021-08-21
猜你喜欢
  • 2021-07-31
  • 2021-06-03
  • 2021-04-22
  • 2021-07-15
  • 2018-05-30
  • 2019-09-07
  • 2020-07-28
相关资源
相似解决方案