加速个人博客访问
假设我们已经搭建好了个人博客并可以正常访问,下一步要关心的,就是尽可能改善博客的访问体验。 这篇文章将侧重于优化静态站点在国内的访问体验,并对比几个常见服务商的性价比。
Profiling
首先,一个比较简单的网站访问流程是:
Client ---> DNS ---> *CDN* ---> index ----> *后台应用及数据库*
\ \ \---> *外部资源*
\ \
\ \--> 静态资源(js/css)
\
\--> *CDN* ---> *多媒体文件(jpg/pdf/zip)*
* *
括起来的内容,代表这是可选的项。
“No profiling, no optimization.”,幸好这几个部分的加载时间都可以在浏览器控制台中看到:
因而应该根据这些条目逐项进行分析。 下面针对这几个部分,逐一分析可加速的手段。
DNS解析服务
DNS的作用,就是解析域名的物理地址。它影响的是网站的初次访问速度,因为初次解析域名后本地会有缓存。 所以第二次访问或者浏览网站中的子页面,都会明显比初次访问要快不少。 参考下图:
即便只影响初次访问速度(事实上很多情况下你的网站也就顶多被访问一次而已),网站的DNS解析服务依然比较重要。 最极端的情况是输入网址后浏览器提示:
找不到 xxxx.com 的服务器 DNS 地址。
选择DNS解析服务需要考量哪些方面的指标? 直接去看DNS服务商它们在宣传什么就知道了 :P
不过好在DNS服务比较成熟,市面上的各家服务都相对稳定,并且几乎免费。 一般来说,没有特殊的需求的话直接用默认的NameServer就好。
有关第三方的DNS解析服务,如果想要在国内比较好的访问体验,推荐DNSPod或CloudCXNS。 此外,除了国内解析速度较慢,CloudFlare也是非常不错的选择,因为它同时提供了许多其他的免费服务(后文会讲)。
对象存储服务(图床)
一般而言,博客的多媒体文件最好和网站分离。 一方面是可以提升访问性能,另一方面,对于GitHub Pages等静态页面托管服务,提供的空间都是很小的,完全不应该存放图片等二进制文件。
以博客的贴图为例,微博相册貌似是目前看起来最靠谱的免费图床了,但是微博貌似从来没有保证过永久不限外链(就算宣称“永久免费”,说翻脸就翻脸的例子也是数不胜数)。
所以千万不要随便搜个“免费图床”就用,可靠性太低了,并且图床失效带来的损失是相当大的。
此外,免费图床往往不支持https(如果追求全站https、地址栏小绿锁的话,图床也必须支持https),也不可以自定义域名和图片名,管理/备份都非常不方便,这样也进一步加大了迁移成本。
因此,还是自己弄个对象存储服务靠谱,比较一下常见的几家对象存储服务:
(插一句吐槽:OSS/COS/S3/OBS/OOS/BOS这些乱七八糟的玩意其实本质都是对象存储服务,囧rz)
-
阿里云OSS: 阿里内部都把它作为基础设施在用,足以见得其可靠性。因为起步较早,相关工具都非常丰富,访问性能也相当不错。 但是对新手太不友好了,没有免费空间和流量。
-
腾讯云COS: 功能基本和阿里云OSS一样,但是有50G免费空间和10G免费月流量(但不知道会不会永久免费下去)。
-
七牛对象存储: 不像BAT等云计算大厂,七牛专注于云存储,因此用户体验不错。 还有一些图片处理等功能,非常实用。 号称永久免费10G空间+10G流量,也算是业界良心了。
CDN服务
CDN或许最能直接带来访问体验的提升了,它主要影响TTFB时间和下载时间(上图中绿色和蓝色条)。当然它的价格也是最高的,不过好在流量不大的话,还是有很多免费/便宜的选择。
接入国内CDN的域名是一定要备案的(一些小的国内CDN服务商号称免备案,但是说不定哪天就挂了)。 而CDN服务目的就是加速,如果目标访客是国内用户的话,只有国内的CDN服务器才有加速效果,用国外CDN反而可能减速 -_-
因此结论是,要想用CDN加速,网站就要备案(备案又是一个大话题,下一篇博客再讲)。
评价一下我用过的几个CDN服务:
-
CloudFlare: 免费用户无限流量,同时在功能上也无懈可击,对于个人站点绝对够用。 配置方便,也不需要备案,免费用户部分支持https(地址栏可以显示小绿锁)。 唯一的缺点就是所有服务器都在国外,有“云减速”的戏称。 在国内访问速度确实比较感人,不过防DDoS能力首屈一指。(毕竟流量无限)
-
百度云加速: 免费。 据说和CloudFlare有合作,事实上在销售模式上确实有些类似,但是功能弱了不少。 例如免费版不支持https。同时又没有按照流量计费的https服务。 此外,虽然貌似不要备案,但是如果要用国内的CDN节点加速,还是需要备案的。 否则直接用海外的CloudFlare服务器。(那为何不干脆用CloudFlare?)
-
七牛CDN: http有10G免费流量,https价格0.36/G。 使用体验总体还是不错的,但是缺乏一些细节功能,譬如无法限制请求数,之前v2ex上有被人攻击,冒出几千块账单的案例。 还有一些用户体验做得不太好,譬如分配一个CNAME竟然要一个多小时。。真是急死人!
-
腾讯云CDN: 按流量计费是0.34/G,https同价。 腾讯云刚起步,功能有点少,也有很多小细节的问题,譬如备案信息同步很慢,令人捉急。 不过每个月送10G的流量包,新用户额外送6个月的50G流量包,看起来很有诚意,那就先用着吧 :P
-
阿里云CDN: 0.36/G,https还要收额外的0.2/万次,差评。刚上来就要收钱,我等吝啬鬼就直接不考虑了。
总结:
无论是DNS还是对象存储服务或是CDN,最好都用同一家的云服务产品。 不仅是因为产品整合度高、用起来方便,同一厂商的产品之间是内网访问,开销也更小。
如果不在乎花钱的话,阿里云貌似是不错的选择,虽然它的各项产品都是最贵的,但得益于起步早,因此功能比较齐全,也比较少遇到Bug。 但是对于想要尽可能降低成本的个人网站而言,不推荐阿里云,比较贵,而其他大厂的免费服务也都足够用了。
我的博客是托管在GitHub Pages上的,我的选择是使用CloudFlare的DNS以及反向代理CDN服务,而图片另外使用腾讯云COS+腾讯CDN。 因为我的目标很明确,一定要全站https,并且尽可能便宜。 几家产品当中,腾讯云的https价格最低,并有免费额度,因此图床和CDN就都用腾讯云了。
那为何又要用“云减速”的CloudFlare呢? 因为源站是GitHub,CloudFlare的回源速度肯定比国内的CDN都要快,所以也扳回一城。 并且我认为CloudFlare的产品很棒,值得牺牲一点访问时间去使用它。
- 上一篇 静态站点托管的选择
- 下一篇 个人网站的域名注册与备案