本人近期打算修复一下一直无法使用的博客阅读次数。
Hexo-shoka 主题所采用的是 valine 结合 leancloud 来记录每一篇博客的阅读次数,可不知道何时开始底下的阅读次数就始终为空。
01
通过查看 F12 可以发现,md5.min.js,av-min.js 均获取失败,而发起程序则是 MiniValine.min.js。其原因在于近期 jsdelivr 的 DNS 发生了污染所致。
02
可在这之前本人已经将博客内的 jsdelivr 均更换为了 fastly 镜像,可仍然发生了该异常,通过查看 MiniValine.min.js 可以发现在 js 内部引用了许多 cdn.jsdelivr 有关的资源。
03
考虑将 js 文件下载到服务器,并对 js 进行魔改操作。

将 themes\shoka\scripts\helpers 中的

let result = vendorJs ? `<script src="//fastly.jsdelivr.net/combine/${vendorJs}"></script>` : '';
return vendorJs ? htmlTag('script', { src: `//fastly.jsdelivr.net/combine/${vendorJs}` }, '') : '';

修改为

let result = vendorJs ? `<script src="//d-sketon.top/combine/${vendorJs}"></script>` : '';
return vendorJs ? htmlTag('script', { src: `//d-sketon.top/combine/${vendorJs}` }, '') : '';

themes\shoka\source\js_app 中的

if(str.indexOf('npm')>-1||str.indexOf('gh')>-1||str.indexOf('combine')>-1)
    return "//fastly.jsdelivr.net/" + str

修改为

if(str.indexOf('npm')>-1||str.indexOf('gh')>-1||str.indexOf('combine')>-1)
    return "//d-sketon.top/" + str

并在服务器上创建对应的 js 文件使用 nginx 进行 URL 映射,注意增加缓冲防止 js 被截断

location  ^~/combine/npm/pace-js@1.0.2/pace.min.js,npm/pjax@0.2.8/pjax.min.js,npm/whatwg-fetch@3.4.0/dist/fetch.umd.min.js,npm/animejs@3.2.0/lib/anime.min.js,npm/algoliasearch@4/dist/algoliasearch-lite.umd.js,npm/instantsearch.js@4/dist/instantsearch.production.min.js,npm/lozad@1/dist/lozad.min.js,npm/quicklink@2/dist {
        alias /var/www/cdn;
        proxy_buffer_size 128k;
        proxy_buffers   32 128k;
        proxy_busy_buffers_size 128k;
}
location ^~/gh/amehime/MiniValine@4.2.2-beta10/dist {
        alias /var/www/cdn;
        proxy_buffer_size 128k;
        proxy_buffers   32 128k;
        proxy_busy_buffers_size 128k;
}
location  ^~/combine/npm/@fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css,npm/justifiedGallery@3.8.1/dist/css {
        alias /var/www/cdn;
        proxy_buffer_size 128k;
        proxy_buffers   32 128k;
        proxy_busy_buffers_size 128k;
}
location  ^~/combine/npm/jquery@3.5.1/dist/jquery.min.js,npm/@fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js,npm/justifiedGallery@3.8.1/dist/js {
        alias /var/www/cdn;
        proxy_buffer_size 128k;
        proxy_buffers   32 128k;
        proxy_busy_buffers_size 128k;
}

07
将 MiniValine.min.js 中所有的 cdn.jsdelivr 改为 fastly.jsdelivr
经过测试后发现 md5.min.js,av-min.js 均获取成功,且可以获得阅读次数,修复完成。
06