问题出现的场景:

legs+之专栏 legs+之专栏 2456 人阅读 | 10 人回复 | 2021-02-03

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
作为程序员的你,你经常会遇到:用户向你反映说你开发的网站访问速度很慢,但是该用户访问其他网站很正常。出现这种问题,你是如何分析原因、如何解决问题呢?


可能出现的问题

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请求数的目的,为最优的做法。

回答|共 10 个

simonzhd 发表于 2021-2-4 05:01:11| 字数 33 | 显示全部楼层

恩,不错哦~~

虽然大多数都知道,但还是收藏一下,呵呵,谢谢legs

孤星119 发表于 2021-2-5 00:25:03| 字数 116 来自手机 | 显示全部楼层

学习了。第4点我不明白 PHP的问题,第7点也可以压缩图片,关于CDN我还很陌生。CSS的替代图案外国流行FontAwesome, 中国国内呢? 第12点和最后一点好像有冲突喔,究竟CSS样式表应该放在外部或内部呢? 总结来说很不错的心得。

legs+ 发表于 2021-2-5 00:41:20| 字数 245 | 显示全部楼层

就是设置为全局变量或者常量;
PNG就是压缩格式,如GIF或者JPG可以压缩成PNG格式;
CND就是服务器内容分发,如:就近建立一个服务器,如在天猫购物,在吉隆坡机房设定一个服务器,你就不要老跑中国杭州的阿里服务器了,直接在吉隆坡就可以访问阿里的服务器了;
你玩Linux吗?现在编程风格都偏Linux风格,就是dos,这个问题有点大,我找个机会跟你细聊,有,阿里旗下的饿了吗的elementUI,但是要安装vue的脚手架,就是要下载node,然后再npm;
就是外链比内链好,能外链就不要内链;

legs+ 发表于 2021-2-5 00:42:32| 字数 10 | 显示全部楼层

我的回答你还满意吗?

孤星119 发表于 2021-2-5 15:40:47| 字数 105 来自手机 | 显示全部楼层

legs+ 发表于 2021-2-5 00:42
我的回答你还满意吗?

超出我的理解范围了,基本上除了 PHP, MySQL, HTML, CSS的其他我都不碰。譬如Node . js 和  npm都听说过,但是没正式用过。

谢谢你的解答。

点评

你老兄,我还不知道你,马甲漫天飞  发表于 2021-2-5 23:22

孤星119 发表于 2021-2-5 16:00:45| 字数 130 来自手机 | 显示全部楼层

legs+ 发表于 2021-2-5 00:41
就是设置为全局变量或者常量;
PNG就是压缩格式,如GIF或者JPG可以压缩成PNG格式;
CND就是服务器内容分发 ...

没用Linux啊,玩过Linux Mint和 Chromium OS,  但是它的命令行(如Sudo)我不会。

legs+ 发表于 2021-2-5 20:51:40| 字数 80 来自手机 | 显示全部楼层

php中的composer也是包管理,也是脚手架,通过脚手架字面意思你也知道,脚手架是直接翻译过来,很形象。因为linux中二进制安装包不好,才采用rpm包管理

孤星119 发表于 2021-2-5 23:37:18| 字数 129 来自手机 | 显示全部楼层

我想暂时淡出程序员的圈子了,这也是我卖掉电脑的主要原因之一,在马来西亚没有人欣赏低级编程,只能到国际但是我的低级编程水平刚好就是超过本土却没有达到国际水准,可以说两头不到岸。后期时我很灰心,因此决定暂时不碰和程序语言有关的事。但我还是会开心读到你的专业见解。

legs+ 发表于 2021-2-5 23:59:52| 字数 86 | 显示全部楼层

孤星119 发表于 2021-2-5 23:37
我想暂时淡出程序员的圈子了,这也是我卖掉电脑的主要原因之一,在马来西亚没有人欣赏低级编程,只能到国际 ...

兄弟,别灰心!要不能停呀
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则