前言
很多接触过云服务的小伙伴,可能经常会有一个困扰:为什么我的CPU、内存占用明明不高,网站速度/服务器响应速度却还是这么慢呢?哪个可爱的男孩子不想拥有一个速度很快的博客呢?说到优化,我们得从诸如硬件、软件等很多地方入手。
开始优化
为什么我们需要优化?
当我们购买了一台云服务器/VPS,并在上面架设了网站,那么我们肯定是需要给用户提供访问的。当别人或者你自己,访问这个网站时,通常会在浏览器中输入example.com
之类的网址吧。但是,浏览器并不会知道这个网址的任何信息,这时我们的电脑会在Internet找到网址所在。在这个过程中,有相当多的因素,可以影响我们的网站速度,所以我们必须考虑服务器和浏览器之间的所有情况。
DNS解析优化
我们知道,每一个网址都会对应着一个IP地址,而我们请求网址的时候,会通过DNS服务器去进行解析,从而将访问路由到对应的网站或者应用服务器。在设置DNS解析时,我们可以对域名进行分运营商设置、分地域设置等等,甚至,你还可以做负载均衡。比如电信用户的请求,可以设置解析到针对电信优化的线路的服务器上;分地域解析,同样可以设置成针对当前用户的最优解析。
链路优化
浏览器是需要与服务器之间进行通信的,但如果服务器位置距离浏览器很远,或者是它们之间的网络链路并不算很好(想象一下高速公路和普通公路?)。那么坑你会增加等待的时间,尤其是丢包,这是很致命的问题,可能会导致网站一直无法响应完成。每次询问服务器,毕竟是要耗时间的,不是吗?
动态OR静态
一般来讲,静态网站加载速度是比动态网站要快的。有时候会取决于Web服务器的开销,有时候是数据库的。
数据库
对于动态网站,我们也是可以针对数据库进行优化的。比如数据库放在本机还是其它机器上,如果放在其它机器上,是内网通信还是公网通信。用不用读写分离、集群、Redis等等?扯远了扯远了,咱还是以普通的网站/博客来进行讨论吧?
数据的计算/渲染时间
网站上面可能需要进行一些数学计算、过程处理、动画渲染等,会消耗相应的时间。当然,我们可以适当的调整尺度,或者是放在服务端处理部分内容。
CPU的性能
网站在浏览器的加载速度,在一定程度上也会受到用户计算机的CPU影响。不过一般来说,对于简单的网页应该不成问题。当然,服务器的CPU也是关键因素之一。如果你的网站,有太多人访问的话,你可以考虑下升级服务器的配置了。
加密/安全
现在绝大部分的网站,都是支持HTTPS的了。为了安全使用SSL或TLS,会给网页的加载带来额外的性能开销。但是大多数情况下,这种开销是值得的?
内存优化
每一次针对服务器的请求,都会占用Web服务器在单位时间内可以处理的请求数,同时也会占用内存。不过,我们得先调查清楚,在自己的服务器上,到底是请求数先被消耗完,还是内存先被消耗完。
网络攻击防护
互联网的公网环境,有时候并没有想象的那么好。我在阿里云的ECS,被人攻击进入过黑洞状态。在DigitalOcean的服务器,曾被人消耗掉了接近3T的流量。对于很多人/企业来说,遭受网络攻击带来的直接损失并不算什么,但导致业务无法正常运行才是致命的问题。有这方面需求的小伙伴,建议去Google多搜一搜怎么防护,我也只是会一些简单的防护?。如果你想简单的了解下,可以看看阮一峰的DDOS 攻击的防范教程
服务器与CDN的优化
在选购服务器时,一个重要的指标就是网络。比如是按带宽选购,还是按流量选购。这2种不同的方式,效果肯定是不一样的,拿1M小水管来举例子,同时有很多用户访问的话,速度是相当的慢的。那么这种情况下,CDN就成为了一种可行的解决方案了。通过CDN可以将静态内容高速缓存到更靠近用户的位置,同时也能节省服务器带宽。
服务器入侵自查
有时候,会有一些人入侵你的服务器,并用来挖矿、当作肉鸡等。如果服务器突然变慢,且CPU占用一直非常高,可能就需要注意了。当然,我们也得有些好习惯,比如不采用密码,而是用公钥登录,可以防止一部分脚本自动爆破,同时不要开放太多不必要的端口。
静态资源优化
我们可以对HTML、CSS、图片等资源进行压缩,以减少带来的带宽消耗。我是用的gulp进行压缩的,压缩前后对比,减少了不小的文件大小。
在每次打包时,对资源进行压缩。其实我们可以在开发时,就将这个问题考虑进来。举个例子,引用一个CSS框架,我们一般可能会把完整的包,或者是min包整个引入。然后在浏览器加载的时候,会下载完整的包。但是这里有个问题,这个框架里面的所有属性你都用到了吗?显然是没有的。所以我们可以用Sass,在开发的时候按需加载组件(现在这么干的其实挺多了)。在编写HTML的时候,也可以适当的优化。更小的HTML和CSS,不仅减少了服务器的传输压力,也加快了浏览器的加载速度。更重要的是,浏览器不需要再去解析用不到的DOM和CSS Rules了,那么渲染速度也会得到很快的提升。
懒加载
这个功能我觉得还是很重要的,懒加载的意思,我说个粗糙的理解吧:图片懒得加载,只有你想看它的时候,它才会去加载。图片在整个页面上的占比,一般也不小了,而对所有的图片进行懒加载,可以让用户首次访问时间快很多。包括预览图片的沙箱、评论系统等等,全部采用懒加载,对白屏的影响是会减少很多的,毕竟别人访问网站时,页面白屏可能会导致用户流失。
最后
还有许多的方法,比如:优化资源加载顺序、避免JavaScript阻塞页面渲染、采用高效的缓存策略提供静态资源等等。可以去PageSpeed Insights做一个简单的网站性能测试,测试完之后会给出一些诊断结果和优化建议。我虽然只是个菜鸟后端,不太懂前端,但还是希望能给大家提供一个优化的思路。