问题场景
作为程序员的你,你经常会遇到:用户向你反映说你开发的网站访问速度很慢,但是该用户访问其他网站很正常。出现这种问题,你是如何分析原因、如何解决问题呢?
可能出现的问题
1 服务器出口带宽不够用。这是一个很常见的瓶颈。一方面,可能是本身购买的服务器出口带宽就很小(企业购买带宽相当昂贵),一旦用户访问量上来了,并发量大了,自然均分给用户的出口带宽就更小了,所以某些用户的访问速度就会下降了很多。另一个,就是跨运营商网络导致带宽缩减,例如很多公司的网站(服务器)是放在电信的网络上的,而如果用户这边对接的是长城或者说联通的宽带,运营商之间网络传输在对接时是会有限制的,这就可能导致带宽的缩减。
解决:出口带宽的问题,这个很简单,加带宽,有钱就多买带宽,很简单。
2 数据库表结构不合理。
解决:在创建MySQL数据库表时,把经常作为查询条件的字段设置为索引,这样可以提高数据的查询速度,从而提高网站的打开速度。
3 数据库查询语句不合理。PHP+MySQL动态网站,经常使用数据库select操作。
在使用select操作时,切忌不要轻易使用select * from tablename,因为这样的查询速度慢,并会占用较多内存,影响PHP程序的整体运行速度,进而影响网站的打开速度。
解决:建议使用针对特定字段 select查询语句,例如 select fieldname from tablename。这样的查询方式会降低MySQL执行时间,提高效率。
4 PHP程序冗余。搭建PHP+MySQL网站时,会发现有些程序中存在大量冗余,延长了程序执行时间。例如重复的SQL查询操作,反复的变量赋值等。
解决:出现这样的情况时,最好找专业人士帮你优化一下程序,提高程序整体运行时间。
5 PHP程序大量读写磁盘。PHP+MySQL网站程序会大量执行磁盘的读写操作,尤其是磁盘的写操作,将占用大量的磁盘IO,导致程序运行缓慢。情况严重的还会使服务器死机。
解决:当遇到这样情况时,应尽量减少不必要的磁盘写操作,并且对磁盘进行相关优化操作,例如磁盘整理,从而提高磁盘整体运行效率。
6 尽量使用静态页面。
解决:在使用PHP+MySQL搭建网站时,尽量使用可以生成静态页面的开源程序。
7 网页上存在大量图片或flash。网页上存在大量图片或flash时,也会影响网站的打开速度。
解决:减少网页上的图片或flash,或者优化减小图片的大小,以提高网页的打开速度。
8 服务器软件。
解决:尽量避免在VPS或者独立服务器上安装不必要的软件,防止服务器运行速度慢,导致网站打开速度慢。
9 网页上存在大量JS代码。大量的JS代码也是引起网站打开速度慢的一个重要原因,尤其是一些不知名的联盟广告代码,对网站打开速度的影响非常明显。
10 过多的引用了其他网站内容。包括引用其他网站的图片、视频文件等,如果直接在页面引用别的网站的东西,而那个网站打开速度慢,或者那个网站的该页面已经不存在了,那么打开的速度就会非常慢。
11 减少HTTP请求数
打开一个网页的时候,后台程序的响应并不所需太多时间,等待的时间主要花费在下载网页元素上了,即HTML、CSS、javascript、Flash、图片等。据统计,每增加一个元素,网页载入的时间就会增加25-40毫秒(具体取决于用户的带宽情况)。
所以,想要提高网页打开速度,可以降低HTTP请求数,这里提供以下3种方法:
1)例如用CSS代码代替一些图片(比如圆角图片),尽可能的减少图片使用。
2)合并文件,对于文本文件,可以直接合并内容。如将多个javascript文件合并成一个,将多个CSS文件合并成一个。
3)优化缓存,对于没有变化的网页元素(如页头、页尾等),用户再次访问的时候没有必要重新下载,可以直接从浏览器缓存里读取。
12 样式表放在网页Head部分
经过实际测试,把样式表(CSS文件)移到网页的Head部分,可以提高有效页面的加载速度,让页面元素顺序显示。
13 使用CDN(ContentDeliveryNetwork,内容分发网络)
CDN由一系列分散到各个不同地理位置上的Web服务器组成,它根据和用户在网络上的靠近程度来指定某台服务器响应用户的请求。当你的网站图片很多事,就一样要使用CDN了,比如现在的电商网站,几乎都在使用CDN。很多CSS样式框架以及js框架都提供了CDN服务,比如bootstrap等等。
14 压缩网页元素
显然,网页中的元素越小,下载所需的时间就越少。现在比较成熟和流程的压缩网页的方式是通过Gzip压缩,一般可以将网页文本内容减少60%以上。
15 把JS文件放到网页底部
网页打开时,所有元素是顺序显示的。但是由于JS具有特殊性,相对其他元素而言,会加载的较慢,在JS文件下载完成之前,其他后面元素的顺序显示将被阻塞,因此把JS文件尽量放在底部,意味着内容能被快速显示。
16 把样式表和JS脚本放到外部文件中
虽然我们可以将样式表和JS脚本直接写入网页HTML中,能够减少外部文件调用数量,但是这样做会增加页面的文件大小。将样式表和JS脚本放到外部文件中,用户首次访问时也许会有点慢,但是后续在访问网站时,用户直接通过浏览器缓存就可以用,从而达到减少HTTP请求数的目的,为最优的做法。
|