Vercel 不仅可以部署 Hexo 博客,还能部署很多服务。
境内选择 Vercel 的站长很多,为了提升访问速度,自然选择了距离大陆最近的香港节点。
选的多了,节点压力自然就会增大,就算 Vercel 属于大平台,对陆带宽依旧有限,必然会出现互相影响的情况。
再加上滥用资源等问题出现,不少小伙伴反馈 Vercel 越来越慢。
今天为 Vercel 用户提供一个加速方案。
将原来解析至 cname.vercel.com
改为 vercel.cdn.yt-blog.top
我没有图床所以直接复制杜老师的,但是注意,两个CNAME速度有差距,这个CNAME对应https://vercel-cyfan.yt-blog.top/,这主要是由于104.199.217.228只有电信快,18.162.37.140相对不稳定,但联通和移动快,大部分Vercel节点都是联通和移动快。vercel.cdn.yt-blog.top使用了更多的IP确保在一台出现问题后不会有太面积影响,但灵感来自vercel.cdn.cyfan.top
可访问Vercel CDN (vercel.cdn.yt-blog.top)查看
Vercel 在大陆周围还有很多节点,其中包含中国台湾、韩国、日本、新加坡等,这些节点的访问延迟在接受范围,且相对香港节点来说带宽更充足。
Vercel 的 Anycast 会自动将节点解析至距离最近的香港服务器,但如果手动解析则太过麻烦。
vercel.cdn.yt-blog.top
经过不断测速(大约消耗了200MB流量)手动解析,并通过 D 监控检查状态,无法访问时会及时暂停节点。使用时自动解析至附近可用节点,尽可能的选择优质节点。
这更加类似于CF自选IP,而不是真正的节点,节点IP基于Cyfan的Vercel All IP (github.com)
可以通过Vercel官方提供的缓存进行加速
详细请看:https://vercel.com/docs/edge-network/caching#cdn-cache-control
静态网站参考本博客,在根目录放置vercel.json
{ "headers": [ { "source": "/sw.js", "headers": [ { "key": "Cache-Control", "value": "public, max-age=0, must-revalidate" } ] }, { "source": "(.*)", "headers": [ { "key": "Cache-Control", "value": "public, s-maxage=86400, max-age=86400" }, { "key": "Vercel-CDN-Cache-Control", "value": "max-age=3600" } ] } ]}
Vercel在部署时会自动刷新缓存,静态网站缓存可以拉到无限长,动态网站缓存按实际需要
测速工具(节点很多,非常推荐):https://zhale.me/http/
https://github.com/Fgaoxing/Vercel-CDN
我们无法觉得谁使用了CNAME,所以也有一些人通过解析我们CNAME的方式建立自己的Vercel CDN(我给他个面子,不在这里说了),但多次CNAME会导致速度变慢,如果有人给你发送一张对比图说他的测速比我这个快,大概是因为我这个有宣传页面,所以网站测速比不上Vercel的404
]]>这里只说GFW外的,GFW内的话基本也用不上
首先就是CDN,尤其是中国以外,尽量套一个,有的人可能套了,但是还没开缓存,那一点意义没有,甚至更慢
所以一定要为静态内容(或者伪静态)配置合理的缓存
对于一些部署平台,我这里只有Vercel的优化经验
其他的平台可以参照
首先你要清楚一点:部署平台,基本上都不是单台服务器
那这样就好办——测速
然后看哪个服务器究竟在哪,一个运营商,哪一个城市哪一条线路快
接下来使用DNS的分区域解析,挨个解析就可以了
比如我这里的Vercel效果:vercel.cdn.yt-blog.top(随便用,CNAME解析一些就行了)
(这个月为了优化网站,我已经测速消耗了200MB的流量,勉强达到国内付费CDN的程度,数据来源:炸了么)
说完了服务器,接下来就是网页本身。首先就是尽量让网页体积更小
将字体JS CSS之类的各种文件都独立托管于网页本身
这样也可以带来更好的速度,尤其是使用免费的资源,还能节省流量
本文章将从部署速度和访问速度两方面说说如何优化Hexo博客
我们可看到Hexo的官网上告诉我们Hexo的生成速度还是很快的
那为啥需要那么长时间呢,我们看看部署的流程
这个流程每次都要运行一遍,非常耗时,如何优化呢
首先确定服务器位置,Github服务器在美国,所以呢只能使用NPM获取优化不了
但是Vercel可以选择节点位置,方法如下:
打开一个项目
点击设置
然后按图中的配置
然后就可以使用NPM镜像了,实测阿里镜像最快
部署的时间可以压缩最少10秒
首先就是减少文件数量,能删就删
]]>用于增加速度,减少请求量,尽管如此每次查看图片还是需要等待他加载完,这很耗时间,如下
但是如果先呈现,后加载,不就可以了吗。
这时候就有人跳出来了,
开什么玩笑呢,不加载,怎么呈现?
问得好,其实很简单,我只要把图片存在用户电脑就行了,问题在于怎么存,如果要是使用SW,一旦写错,基本上网站就废了,所以这个不考虑,但是SW但来了一个东西,没错就是Cache
,它可以缓存请求,当然也可以存储数据,其实可以直接存储二进制,不过我还是转换成base64存储,由于比较复杂,我就不展示了,
你访问本网站就可以感受到,代码后续放出来
]]>self.CACHE_NAME = 'FastJumpCache'; // 默认的存储名称self.db = { read: (key) => { return new Promise((resolve, reject) => { caches.match(new Request(`https://LOCALCACHE/${encodeURIComponent(key)}`)).then(function (res) { res.text().then(text => resolve(text)); }).catch(() => { resolve(null); }); }) }, write: (key, value) => { return new Promise((resolve, reject) => { caches.open(CACHE_NAME).then(function (cache) { cache.put(new Request(`https://LOCALCACHE/${encodeURIComponent(key)}`), new Response(value)); resolve(); }).catch(() => { reject(); }); }); }}document.addEventListener('DOMContentLoaded', function () { self.db.read(window.location.href).then(function (d) { if (!d) { fetch(window.location.href).then(function (d) { if (d.headers.get('content-type') === 'text/html') { d.text().then(function (b) { self.db.write(window.location.href, b) }) } }) } });});document.addEventListener('DOMContentLoaded', function () { setInterval(function () { var doms = document.querySelectorAll('a[href]'); Array.prototype.forEach.call(doms, function (dom) { if (dom.href && dom.href.indexOf(window.location.origin) === 0) { dom.onclick = function () { history.pushState({}, '', dom.href); self.db.read(dom.href).then(function (d) { if (d) { console.clear(); document.open(); try { document.write(d); let Event_timerun = window.setInterval(function () { if (document.body&&document.body.innerHTML) { let Event = new CustomEvent('onload') document.dispatchEvent(Event); window.dispatchEvent(Event); Event = new CustomEvent('DOMContentLoaded') document.dispatchEvent(Event); window.dispatchEvent(Event); window.clearInterval(Event_timerun) } },500) fetch(dom.href).then(function (d) { if (d.headers.get('content-type') === 'text/html') { d.text().then(function (b) { self.db.write(window.location.href, b) }) } }) } catch (e) { } } else { fetch(dom.href).then(function (d) { if (d.headers.get('content-type') === 'text/html') { d.text().then(function (b) { console.clear(); document.open(); try { document.write(b) let Event_timerun = window.setInterval(function () { if (document.body&&document.body.innerHTML) { let Event = new CustomEvent('onload') document.dispatchEvent(Event); window.dispatchEvent(Event); Event = new CustomEvent('DOMContentLoaded') document.dispatchEvent(Event); window.dispatchEvent(Event); window.clearInterval(Event_timerun) } },500) } catch (e) { } self.db.write(dom.href, b) }).catch(function (e) { window.location.href = dom.href }) } }).catch(function (e) { window.location.href = dom.href }) } }).catch(function (e) { window.location.href = dom.href }) return false; } } }); }, 500)});
注意不能与Pjax一起使用!!
鄙人水平有限,请斧正
有不少Bug,仅供测试,不可以在线上环境使用
,水文一篇,等待BiliBili解析一下这次故障
]]>已失效
大家都知道哈,前段时间,有个AI叫ChatGPT,很火,所有人都在说。不过据说好像现在收费了,OpenAI么,懂得都懂,先免费,再收费,像是DALL·E、Copilot都是。但是因为国内不能访问,所以就没用上……
现在又搞出来newBing(后面估计会收费,为了AI,都给服务器干崩了),不过国内还是不让用,这时候就需要一些合法手段来访问。
其实很简单
如果直接访问https://www.bing.com/new,百分百不行,咋办,他是按照国家的,所以我们只要去国外就行了伪装呗,多简单啊!不过咱们说了,要合法,所以用非常手段肯定不行。先要明白原理,简单来说就是IP定位,那么我们就伪装IP
IP获取有好几种方式,比如用网路发送数据的IP,这样就需要用到代理(代理是合法的,但是麻烦),另一种是通过Header中的x-forwarded-for字段获取。这主要看bing的方式,他用的是后者,我们操作一下。所以我们需要改头,这个简单。
首先去下载一个插件,如果有类似插件,可以不用下载,这里只用 Header Editor
举例
官网下载页:开始 | Header Editor (firefoxcn.net)
安装好,打开它
加号添加,按照图片配置好保存即可
名称随意,如果不会,就按照图片填写即可
访问必应 (bing.com),不跳转cn.就说明成功了
选择美国
然后访问必应 (bing.com),点击加入即可,等待邮件,大概两三天
然后恭喜,你就有了NewBing
其实平时用国外ip访问bing也可以减少广告,增加更多搜索内容
最后只要按照上面的操作,再来一遍,然后在搜索框输入内容即可开始问答,按照网上的提示,可以调教,但是我没试过。不要滥用,会被封。
Bing可能要超过谷歌了!
]]>给各位道个歉,好久没更新了
给大家带来一个好东西
众所周知,我会node.js
但是把,我一开始就选择了http库(就是原生库)
所以用express就会不太顺手
但是原生的http又没啥东西,就很难受几乎什么都要自己写,包括cookie的操作
所以我就基于原生的http包写了一个框架,使用路由的方式,可以使用无服务器函数
目前由JS编写使用CJS引入,后续可能会迁移到Ts
这个NPM包目前是测试版,但基础功能已经OK了
你可以这样引入
const ss = require('simplest-server');
目前包含如下函数
const ss = require('simplest-server');ss.http # http服务ss.maps # 本地文件映射ss.map # 本地文件映射ss.ejs # 集成的EJSss.err # 返回报错页面
更多文档看Simplest Server 文档(大概率没写完,所以只能等)
目前不支持,后续加入
]]>其实是看视频,看到wechat分享文件会存储多份,浪费空间,而且你还找不到
pip install find-same-md5-file
本次发布仅面向开发者!!
Fgaoxing/find-same-file: Python searches the same file based on md5 (github.com)
import find_same_md5_file# 寻找相同文件,第一个参数是路径后面需要加/print(find_same_md5_file.print_same('C:/'))# 寻找空文件夹,第一个参数是路径后面需要加/print(find_same_md5_file.find_empty_dir('C:/'))# 查找大文件 第一个参数是路径后面需要加/,第二个参数是大小单位是字节print(find_same_md5_file.find_big_file('U:/', 3685))
如果路径不存在会报错TypeError,后续版本修复。
1.0.0之前的版本均为测是版本,函数名有变动可能。
建议使用PYPI版本,而不是Github版本,Github更新不及时。
目前还在开发,由玄云海的承担 (我也在,官网我写的有点操,将就着看)
]]>文章被删除了!
我没收钱,不排名!!!!
无广告,无病毒,很干净!!!
由于目前仅支持Microsoft Store,所以只限于Win8.1以上
Lively Wallpaper - Microsoft Store 应用程序
效果很不错,可以用网页,如果需要背景的网页我可以出一期
一个在GitHub开源的桌面整理软件软件:https://www.coodesker.com/
非常好用的工具箱
官网:科利特尔Collithel - Windows超级管理器系列
汉化版,免费用
]]>在这里说一声抱歉,好久没更新了。
大家知道之前jsdelivr中国区无法访问(已恢复)
然后我写了这个叫CDNN的玩意
支持npm和图片
github地址:https://website.com/gh/:owner/:repo@:branch/:path
手动更新:https://website.com/api/:owner/:repo@:branch/:path
NPM地址:https://website.com/npm/:owner/:repo@:branch/:path
设置环境变量
appId,appKey
数据库是(必须是国际版)
https://console.leancloud.app/
新建class,gh
不要任何限制
创建参数
然后在根目录添加favicon.ico和index.html(主页代码)
如果你是Node.js大佬请帮我优化,谢谢!
开发不易,给点钱吧!
这是个javascript的小工具?
↑↑↑和上次一样的开头↑↑↑
我们一般会使用链接但是,怎样的xx网盘链接提取码:xxxx
非常不美观所以我就写了这个
<script type="text/javascript" src="https://unpkg.com/pandown"
样例(参数看后面)
<pandown type="lz" url="123" pwd="1234" fname="啥都没有,我没放链接"></pandown>
自动生成,但如果你的网站没有生产
可以使用:
<script>pandown()</script>
type | url | pwd | fname |
---|---|---|---|
网盘类型 | 网盘链接 | 提取码 | 文件名 |
type参数选项 | 没有的话可以空着(type为github时空) | 随意 |
网盘名 | 选项 |
---|---|
百度网盘 | baidu |
腾讯微云 | tx |
onedrive | onedrive |
和彩云 | hc |
天翼云 | ty |
阿里网盘 | aliyun |
115网盘 | 115 |
坚果云 | jg |
360安全云盘 | 360 |
123网盘 | 123 |
七牛云 | qn |
Github(呵呵呵) | github |
蓝奏云 | lz |
自定义(文档点我) | yun |
如果你的网盘没在上面,请使用次条
提示: 该功能下下载图标为黑色,侧边没有小条
type | url | pwd | fname | name | color |
---|---|---|---|---|---|
网盘类型 | 网盘链接 | 提取码 | 文件名 | 网盘名 | 主题色 |
必须为 yun | 没有的话可以空着 | 随意 | 前面要有 # |
这是个javascript的小工具?
<script src="https://cdn.jsdelivr.net/gh/Fgaoxing/Tool-js/tool.js"></script>
会有一定延迟
getQueryVariable(variable,err)
用于获取url参数
variable | err |
---|---|
参数名 | 不存在时返回 |
lantern()
春节小灯笼
Memorial()
国家公祭日时,网站变灰
TombSweepingDay()
清明节时,网站变灰
RestrictedPass(url)
url |
---|
允许跳转网址中的关键字 |
意味着只有允许的网址才可跳转 |
这里是关键字 |
如https://tool-js.vercel.app ,只需填写tool-js |
MirrorProtection(url)
head | footer | change | out |
---|---|---|---|
加在url前面 | 加在url后面 | url时候转换为Url编码(true/false) | 不转换关键字,包含关键字,则会保持原有url |
javascript: 不会转换
并未排除当前网站链接
MirrorProtection(url)
url |
---|
域名(后面不要有/),如:https://github.com |
可以本地访问,可以使用turn.html |
RestrictedPass(url)
url |
---|
特定字符 |
只允许包含特定字符的url跳转到页面
<script src="https://cdn.jsdelivr.net/gh/Fgaoxing/Tool-js/tool.js"></script>
会有一定延迟
hex_sha1(s)
s |
---|
要加密的文本 |
对文本加密,无法解密!
<script src="https://cdn.jsdelivr.net/gh/Fgaoxing/Tool-js/email.js"></script>
会有一定延迟
Email.send({Host: 'smtp.office365.com', //SMTP服务器Username: 'yt-stmp@outlook.com', //登录用户Password: 'YT20211101', //密码(部分为授权码)To: getQueryVariable('email', ''), //收件人From: 'yt-stmp@outlook.com', //发件人Subject: ' ', //邮件主题Body: txet}).then(// 发送后)
js发邮件
<script src="https://cdn.jsdelivr.net/gh/Fgaoxing/Tool-js/ip.js"></script>
会有一定延迟
SetEmail(email)
设置email,方便联系你
OutIp(ip)
拦截指定IP,可以反复使用,对方可以向你发邮件(已设置email的话)
]]>学校要求上网课开摄像头,关键是前后各一个,我就只有有一个设备所以就要这样
Win电脑
下载 | OBS
下载OBS Virtualcam插件
选择1/4个摄像头
打开OBS
左右摆放
然后选择这个摄像头
使用时请保证电脑性能,且电脑摄像头没有占用。
]]>本教程仅支持Windows,这是OBS Virtualcam的原因。
小课也要开摄像头,所以我就借鉴了一下VUP技术,然后我就变成了这样
Win电脑
下载AcFun面部助手
然后登录/注册账户
上传模型,或点击拼脸
相关可参考
【新手向】面捕开播教程!保姆级~超详细视频演示~
下载 | OBS
下载OBS Virtualcam插件
选择1/4个摄像头
打开OBS
然后选择这个摄像头
使用时请保证电脑性能,且电脑摄像头没有占用。
不然(我这是开了省电模式)
窗口不会,但是挂件会有影响
]]>本教程仅支持Windows,这是AcFun的原因。
- Win11电脑一台
- 一双手
首先我们先打开设置
时间和地区>语言和区域
黄色区域调整成美国
然后下载安卓
点击GET,跳转到应用商店一路下一步,安装后显示需要重启
点重启即可
重启后切换回中国地区
解压到任意地方
然后在地址栏输入 cmd
回车
打开 适用于Android™ 的Windows 子系统设置
打开开发者模式
记下画横线的部分
在cmd里输入 adb connect
+空格+你刚才记下的,横线的那部分
回车,重复输入直到出现 already connected...
然后输入 adb install
+空格+APK路径,回车等待出现 Success
在开始中打开即可看到软件
部分软件可能会这样
如出现不支持虚拟化,则需要开启 VT 并关闭其他虚拟软件!重启即可