提升blog性能
今天发现自己的blog实在太慢了,偶然的机会知道了AppDynamics这个服务,注册了个账号可以免费试用15天,然后就给blog加上试了下,发现blog慢得让人发疯,我前些天把家里的线路优化,海外IP全部走IPLC,今天看来blog打开仍然很慢,更别提其他家里网络没我好的人了,我觉得没法忍,必须改。
我的blog是放在国外的VPS上,接了Cloudflare的CDN。我之前一直以为是线路不好的缘故,最直接的办法当然是放到阿里云等国内的主机上,但是域名备案直接把我劝退了。后来我也想过是不是去找一个香港的主机,对大陆比较友好的,嫌麻烦一直没付诸行动。再后来我还想是不是使用付费的Cloudflare CDN效果会好很多,因为我看V2EX好像就很快的样子嘛,但在网上随便搜索了一下,都说免费和付费的差不多,顶多就是免费的域名在大陆解析可能偶尔会抽风。抛开网络的因素,我只能在其他方面想办法了。
很值得一提的是AppDynamics这个服务,15天免费试用足够完成一次优化了,它提供了比较细致的度量项目,使用也很简单,在每个需要度量的HTML页面的<head>
段中加入一小段js代码就好了。每次用浏览器打开页面,AppDynamics就会收集并上报一些数据到它的后台,然后就能看到每个文件、资源、请求等等分别是什么相对时间开始的,花了多少时间等等。大体上它的功能类似于浏览器的开发者工具和Google Analytics的集合,可能还要再多点。而且它不光支持网页应用,还支持C#、JAVA之类的应用。我这里就只要使用网页应用就够了。
首先,我发现有个Lunr搜索框,极大地拖延了DOM Ready的时间,加载Lunr的js文件倒是没花多少时间,毕竟我用的是IPLC嘛。想了想这个搜索框其实没多少实际用途,还只能搜索完整的英文单词,功能也这么弱鸡,直接去掉好了。然后就发现,整体耗费时间瞬间降下去了,从平均10多秒,降到平均几秒,大概是原来的1/4~1/3。
其次,我发现我有个blog文章展示图片的服务,是通过302来提供真实URL的,于是每次每张图片都要多出几百毫秒的一次请求。于是我写了个小程序,直接把blog文章中的image字段替换成最终图片URL。这个提升用户感知很不明显,毕竟才几百毫秒,而且是懒加载的情况,用户本来就有心理准备这些图片会先看到白板再加载显示。
再次,我发现Disqus服务由于被墙的缘故,在加载相关资源的时候会hang一会儿,如果能加载的(比如我家是走IPLC的),那么还可能会多加载几十个资源(貌似是卖用户数据的),我本来想直接删掉完事,后来想想没个评论框也真不是个事,虽然极少有人会留言,但机制得有,策略留给读者。于是想了想把Disqus在移动平台上去掉算了,大概用手机的读者更没有留言的心情。
顺便,我又想到用于捐赠的两个二维码,其实放了那么久了也大概总共就收到过一块多钱,手机上也不方便扫描支持啊,于是移动平台上把二维码也去掉了。
最后,我发现jsDelivr其实加载有时候很慢,主要好像是慢在DNS解析和连接上,之后貌似国内走的是网宿的CDN应该很快。所以我把一些公共库,比如bootstrap、jQuery、popper.js等用了七牛CDN提供的staticfile.org,而blog自带的静态资源如js、css、图片等仍是通过Github走jsDelivr,一是希望这个CDN对更快点,二是希望因为域名分流的关系可以增加浏览器并发下载资源的数量。
现在,我在家里打开blog,第一次打开稍微慢点,大概2-5秒能见到正文内容,比以前好很多了,再后面打开其他页面几乎是秒开,也就是说现在再遇到慢的情况,大概主要是网络因素了。