这两天折腾网站访问速度,前两天主要着眼CDN,但卡在无法自动刷新CDN缓存上,所以CDN页面缓存只能设置折中的10分钟,这增加了回源次数,导致冷资源访问较慢。
DNS
受博友天一生水启发,似乎域名解析也有折腾的空间,于是买了个阿里最便宜的DNS解析服务,传说中原价48元,阿里拍断大腿后每人限购一个,价格19.9元/年。
阿里云DNS付费版还分三个档次,最便宜的就是上面这个个人版,功能也比较减配,近似于免费版。我看了下,最实用的就是将免费的国内4组DNS节点升级为6个,另免费版没有国外节点,收费版有15个。其他多出的功能个人博客都用不到,基本上就是个装饰。
免费版没有海外节点,是否意味着国外请求要发到大陆解析?如果是这样的话就要多不少解析时间。刚好有多个域名,就用阿里解析平台自带的DNS测试平台测试了下收费和免费的解析速度。
国内解析,两者没有区别,平均都在60ms左右。但是免费的似乎会有较多的个别请求会在600ms以上,收费的也有这种情况,但较少。
国外解析,明显看到收费的要快一些,平均170ms,而免费的平均390ms。和国内一样,免费版在海外也有更多的超长时间,而收费的相对较少。
简单说,收费的在解析时间上比较收敛,而免费的比较发散,较长时间的占比较大。如果不关注海外访问者,那么两者基本上没有区别。
CDN
如果使用了CDN,那么域名解析就比较复杂了,为此我专门上网查了资料,基本上弄清楚了DNS在有CDN的情况下对解析时间的影响了。先看示意图,及简单说明。
无CDN时的浏览器请求流程
①浏览器向本地 DNS 服务器请求对域名的解析;
②如果本地 DNS 服务器有域名的解析结果,那么直接响应用户请求,返回该域名对应的 IP 地址;
如果本地 DNS 服务器没有域名的解析结果,那么则会递归地向 DNS 系统请求解析,随后将该结果返回给用户。这一点在CDN DNS解析中也一样。
③浏览器得到域名解析结果,即服务器 IP 地址后,向服务器请求内容;
④服务器将用户请求内容返回给浏览器;
有CDN时的浏览器请求流程
①浏览器向本地 DNS 服务器请求对域名的解析;
②DNS服务器返回CDN的NAS服务器地址;
③浏览器向CDN的NAS服务器请求内容分发服务器IP;
④⑤CDN的NAS服务器查找就近的文件分发服务器,并将其IP存储在CDN NAS服务器;
⑥CDN的NAS服务器向浏览器返回文件分发服务器IP;
⑧文件分发服务器返回内容给浏览器;
可以看出,有CDN后3-6步骤都是多出的,如果CDN上没有缓存,那么第7步还要回源,也是多出来的,由此可见,如果服务器足够强大,带宽足够高,响应足够快,那么不用CDN会更快。但个人博客服务器都接近免费送的,所以强不到哪里去,而CDN无论带宽还是稳定性上都要比垃圾服务器强很多,这也是使用CDN的主要理由。
结论
1、仅大陆使用,免费DNS和收费的无区别;
2、域名的DNS只负责用户浏览器到域名解析出你服务器IP,或你使用的CDN域名这段,到了CDN域名后就是它负责了,你的DNS就无能为力了。从这个角度看,如果使用了CDN,那么收费DNS的作用其实更有限,影响的主要在CDN端。
3、大陆使用,如果资源能够静态,没有多少回源,那么使用CDN后会更快,收费DNS作用聊胜于无;
4、海外收费DNS速度明显快,如果同时使用全球节点的CDN,那么静态资源在全球访问都会很快。我想纯静态博客是不是可以用这种方法加速全球访问?但如果网站没有流量,冷资源会被CDN自动释放,即使你把过期时间写1年也不管用。
5、只想折腾,DNS真没有多少折腾的空间,不如把力气花在CDN上。
6、对于个人博客,我觉得加速的优先顺序如下:
精简页面元素及大小>静态化>服务器配置>CDN>NAS及其他
阿里云的收费DNS和免费DNS区别点击这个链接去查看,其他云服务商的我估计差不多,没有对比过。
本站文章授权后方可转载,请勿侵权! 如喜欢可点击分享按钮分享。
8F
国内的DNS其实很坑的,我现在不到万不得已都尽量少用国内DNS!
B1
@ 明月登楼 我还没有发现坑在哪里,一直很稳定,而且解析速度也不错,当然我也没有用过国外的DNS,所以没有对比。
7F
国外访问慢就慢白,毕竟我方问他们也不快。
B1
@ 网友小宋 对等伤害,这个想法不错。
6F
我的一直使用cloudflare套装了,省心。
B1
@ 土木坛子 我是按耐不住的想折腾,要不用国内云套装也很省心。博客还是得专注内容,折腾太耗时间。
5F
那么,到底为什么这么快
B1
@ 段先森 使用了W3 Total cache静态化插件和阿里云CDN,两个都很重要。
4F
可以尝试一个网站多个域名,一个主域名,图片静态资源用二级域名。有很多好处,不细说了。
P.S.你的缓存设置应该有点问题,打开留言时,留言信息里保存的有其他网友的昵称,邮箱网址信息。
B1
@ 天一生水 我的图片和其他附件已经分离了,JS和CSS没有分离,看网上说这样分离了等于重定向一次,也需要时间,还有安全问题,所以我就没有做。缓存方案这两天没有改,就是来回折腾缓存和去掉缓存对比,估计是那个环节缓存的数据出错了,我今天清理下缓存,看下留言信息会不会正常。
B2
@ 水拍石 用二级域名静态资源后,在head头,用dns-prefetch,甚至preconnect标签,可以与主域名同步加载。浏览器一般都能支持多任务处理的。
B3
@ 天一生水 谢谢解惑,我向人工智能再好好学习下怎么操作。将CSS和JS分离出来后,不影响CDN回源吧,因为分离出来的二级域名仅相当于转发,它下面是没有对应文件的。按道理只要浏览器能访问,CDN就能回源,但还是对这个逻辑有点不肯定。
B4
@ 水拍石 css,js这些静态资源是真的分离,不是虚拟分离。新建一个站点(对象云存储之类的也行),用来专门保存静态资源。至于要加cdn什么的,正常操作即可。
B5
@ 天一生水 谢谢,我大概明白了。
3F
如果网站静态资源较多,带宽又不够高,一次性加载会造成网络拥堵,用上cdn后会好很多。
B1
@ Mr.He 是的,静态资源多CDN就是神器。
2F
从源头开始优化。
B1
@ 雅余 听你的,先从模板开始干起。
1F
我感觉你的博客已经足够快了,速度跟静态也没啥区别啊。
B1
@ 老麦 和静态还是没法比,静态是努力的方向。我今天想到一个主意,用AI写一个插件,在wordpress后台手动填url的方式清除缓存,我以为这样很简单,结果捣鼓了一天还没有弄好。
B2
@ 水拍石 别人访问你的站点我不知道,反正我关了缓存,开启无痕模式来测试你的站点跟我的站点速度差不多的,也就几毫秒之间的差距。
在我眼里这差距等于没区别!
不过呢,你有时间,也有精力的话,研究一下,折腾一下也是好的,毕竟知识是一点点积累的。我现在 PHP 是忘得七七八八了,这个语言也是牛,这么多年过去了,还是非常能打。
B3
@ 老麦 你测试的应该是CDN有缓存的,如果你找个CDN没有缓存的资源就比较慢,因为CDN要回源。我现在就是想解决WP后台能刷新CDN的问题,这样就可以把页面CDN缓存设成1个月,或者更久,这样就不会经常回源了。
B3
@ 老麦 告诉你一个好消息,刚才我测试成功了,现在可以在后台手动刷新阿里CDN。我大概知道昨天那个自动刷新代码可能哪里出问题了,后面再人肉测试,看能不能搞好自动的。