使用腾讯云CDN后博客加载仍旧缓慢的问题

前言


本站使用netlify托管&搭建,虽然比之Github pages加载速度提升挺大,但还是比较久,体验不够好。于是开始使用腾讯的CDN服务,每月有10G的免费额度,PV量不多的个人小站足矣。但是一顿操作过后,发现开启CDN跟没开之前差别不大,甚至还更慢,这就很糟心了,所以我前前后后把CDN服务增删了几次。为什么会这样,问题出在哪儿呢?以下记录一下自己的踩坑过程。

说明

以下过程基于静态网站即本站

官方文档的相关说明

首先看后台,发现流量命中率很低,平均只有20%多。

根据上面文字提示进入文档查看。给出如下的提示:

如何处理流量命中率偏低问题?

  • 检查是否进行了缓存刷新:缓存刷新会清空节点上指定内容,短时间会出现命中率下降的情况。
  • 检查源站是否上新资源:源站上新资源较多,会引起 CDN 节点回源,流量命中率会出现下降趋势。
  • 检查源站是否异常:若源站出现故障,5XX或4XX较多时,也会影响流量命中率。
  • 检查缓存过期策略是否配置正确:查看控制台缓存配置中“缓存过期配置”部分,缓存过期规则优先级为从上到下,从低到高,即下部的缓存策略会覆盖上部的缓存策略。
  • 检查是否开启 Range 回源:查看控制台回源配置中 “Range 回源”部分,若关闭了 Range 回源,会导致回源时拉取整个大文件,而不是按照请求时分片拉取,会拉高回源流量,从而影响流量命中率。
  • 检查是否开启过滤参数:查看控制台访问配置中“过滤参数”部分,若关闭了过滤参数,则按照全路径缓存,同一资源不同参数请求时,无法匹配会缓存多份,从而影响流量命中率。

一一对照,修改相关设置,嗯,又在另一个文档找到如下说明:

命中率低是什么原因呢? 命中率低可能由以下原因造成:

  • 缓存配置问题,如缓存时间较短。
  • Http Header 导致无法缓存,请检查源站 Cache-Control 或 Expires 的设置。
  • 源站类型问题,可缓存的内容少。
  • 网站访问量低,过期时间短,命中的文件少,导致频繁回源。

用户感觉 CDN 访问慢? 大文件关注下载速度,小文件关注延时。首先得到用户访问慢的 URL,通过测速网站判断是否访问慢(推荐工具: 17ce http://www.17ce.com ):

  • 如果测速确实慢,而且是 FTP 托管源或 SVN 源,反馈到一线进行处理。
  • 如果测速显示慢,源站属于自有源,协助用户排查源站机器负载和带宽是否受限。

如何判断用户访问是否命中 CDN Cache? 查看访问回包头部的 X-Cache-Lookup 信息: img

  • X-Cache-Lookup:Hit From MemCache 表示命中 CDN 节点的内存。
  • X-Cache-Lookup:Hit From Disktank 表示命中 CDN 节点的磁盘。
  • X-Cache-Lookup:Hit From Upstream 表示没有命中 CDN。

于是我访问网站,F12打开开发者工具,果然,X-Cache-Lookup字段基本都是Hit From Upstream。

那么接下来一一排查问题所在。

源站设置


我的代码是托管在netlify的,上面只是设置了域名,其他都是默认的(也没有相关的可设置),应当没有问题。看看代码上是不是设置了Cache-Control。果然,在_layout.html 文件下看到头信息meta有两个Cache-Control,其中有一个设置是

1
<meta http-equiv="cache-control" content="no-transform">

请求中的Cache-Control字段说明

字段值 解释
public 代表http请求返回的内容经过得任何路径当中,都可以对返回的内容进行缓存
private 代表只有发送请求的浏览器才可以对返回的内容进行缓存。
no-cache 每次请求都会访问服务器,即使本地有缓存
no-store 本地和代理服务器都不能进行缓存存储,每次都要重新请求,拿到内容
no-transform 告知服务器客户端希望获取实体数据没有被转换(如压缩)过的资源

嗯,删除了事,no-transform可能会有影响,因为之前在CDN中设置了智能压缩。

腾讯云CDN设置


以防万一,HTTP响应头添加如下配置,并关闭压缩,静态网页文件本身并不大。

最后再半小时以上,然后把每个页面再刷新进入几次。

然后再看响应头就发现X-Cache-Lookup字段大都是Hit From Disktank3 Gz表示命中了,而且加载也确实快多了。

注意:为了防止不是浏览器缓存的原因,先清掉再进,多用几台设备看看,还可以使用在线工具17ce

本站配置后当天命中率

总结

从以下三方面着手,一一排除修改:

  • 源码的请求头设置
  • 源站相关设置
  • 腾讯云CDN的设置是否有误

最后再加一点点耐心,这个需要时间的,命中率会渐渐提高,然后还跟资源的热门性有关。

遇到了问题

过了半天访问速度就会变慢,搞了半天还没找到原因,索性转到又拍云了。。。

本文已结束 ❤ 感谢阅读
觉得文章不错,赞赏站长一包辣条( •̆ ᵕ •̆ )◞ ❤
0%