网站性能问题初步分析(profile)

目录
[隐藏]

最近有网友反映我的个人网站访问太慢了,我自己平时访问也不时觉得有点问题,所以决定还是分析一下。

基本情况

首先说下基本的情况,我的网站运行在自己的云服务器上(具体为腾讯云的广州节点),操作系统为服务器版本的 centos,使用 apache 服务器,博客程序为 wordpress,机子没有与任何人共享,不过配置呢也是云服务器中最低的了,无论是 CPU,内存,硬盘还是带宽,都是选择了最低的配置。

虽说如此吧,但考虑到网站很低的访问量,加上网站规模也是极小的(就是写了一些博客文章而已),所以暂时也算是般配的,访问慢还不能怪罪到配置上。

请求数分析

于是先禁用了缓存,用 chrome 看了下首页加载时的请求状况:

image

应该说还是蛮糟糕的,高达 52 个请求,但总大小其实并不大,286 KB。

这里面有很多 js 和 css 文件,虽说以后再请求,这些都会有缓存,但首次请求还是很糟糕,用户也许不会有第二次光顾了!

但考虑到一次只有 6 个左右的并发请求,势必有不少延后。

记得《高性能网站建站指南》一书中第一个原则就是“减少请求数”!

可以看到 DOMContentLoaded 事件触发时已经 7.3 秒了,等剩下的一些图片之类的加载完,Load 事件触发时已经 8.12 秒了。

当然,这仅仅是一次的请求,准确的性能评估需要通过大量请求来实现,不过怎么说呢,一叶知秋吧,或者说窥一斑而知全豹吧,还是能反映出一些问题的。

另外我想说明一点是,这次请求是通过代理来做的,绕到了国外再回来,也一定程度影响了响应的时间。

因为最近我这边的垃圾运营商老是劫持我的 http 请求,然后塞入一系列的广告链接,直接请求的话会多出更多的请求数,然后因为被劫持环节导致的延后,整体速度比不用代理还更慢!

但其它人访问时不一定会有劫持的问题。不过也可能存在劫持的问题,貌似劫持的不太敢动那些大网站,恐怕会被人告,但是像我这样的小网站则劫持起来非常猖獗,至少我本地的体验是如此,因此这点也不容乐观!

不过值得欣慰的是,这些劫持的请求通常不会影响到 DOMContentLoaded 事件的触发,也即页面已经能够呈现,但标签处还是有那个加载的漏斗图标在转呀转的,还是会带来一些不良印象!

TTFB(Time To First Byte)

再看首页的 TTFB,所谓的首字节到达时间(Time To First Byte),应该说也不太好:

image

不过这点受物理距离限制,通过代理会更慢,毕竟电磁波的速度是有限的。直接访问会好一点。

还有则是我这边是广州节点,也许北方来的请求也会慢点了,谁让中国这么大呢!

另外这点当然也受服务器准备这些数据的影响,因为毕竟是动态页面。不过考虑到页面比较简单,而且经过观察,wordpress 貌似也实现了伪静态,似乎已经缓存起来,因为我看到后端有生成一些缓存文件,这点需要进一步确认。

考虑到 wordpress 作为一个知名的建站工具,做到这些似乎也不让人意外。此外我当初直接使用服务商提供的带 wordpress 功能的镜像,也不清楚它是否做过一定程度的优化。之前一直也没有太关心这些,从到目前为止的体验来说,即便做了恐怕做得也不多。

所使用的 PHP 的版本也不算最新的,看了下是 PHP 5.3,看到一些文章介绍说 PHP 7 的性能提升还挺多的。不过要升级的话又得有一番折腾了。

DNS

对于首次访问我的网站的用户来说,还面临 DNS 解析的开销,这一点应该说也不乐观,因为我这是一个小网站,所以不但用户本身没有这些 DNS 的缓存,它之上的许多路由节点恐怕也没有!

这点应该会随着各地用户的不断访问而改善,但首次访问时的延迟还是可能很糟糕的!

插件问题

最后是代码高亮插件带来的问题:

image

js 请求太多了,每个语言一个。这一点其实是可以改善的,可以根据需要动态加载,我之所以让他们全部加载,是为了兼容所导入的之前的很多博客文章。因为动态加载特性的写法跟之前的代码高亮的写法是有些不同的。

所以要改为根据需要动态加载,就要一一调整旧文章中引入代码的地方(还挺多的)。另外的问题则是,采用这种新语法,其它博客平台又不支持,比如 oschina 的,而我有时还要把文章同步到那边去。

所以总的来说还是挺纠结的。

发表评论

电子邮件地址不会被公开。