分析网站性能瓶颈和解决的一般方法

这篇介绍我在分析网站性能瓶颈的一般方法。

1、浏览器审查元素,关闭缓存等设置,查看请求的时间, 虽然打开一个网站会加载很多东西,但是有些是异步加载,在首页渲染的同时也在加载其他链接,也就是浏览器并行在发送请求,所以整体来看一些加载时间特别长的,可能并没有太影响用户体验。这里做测试是有disable cache 的,一般浏览器对一些资源做cache之后,响应会更快。

对于图片 这类文件可以做lazyload,对于用户的直观感受上并没有觉得慢,当然如果加了CDN会更好。css, js这些文件最好做压缩,加CDN也会更快。



                                  简书网的一次网络请求

2、找到比较耗时的 网页或者接口请求,通过代理器(charels)或者chrome中的console下观察。

3、查看源代码,然后找到是 sql 看是否需要优化,我个人一般会在代码里面加上耗时计算的代码,来比较哪段代码的耗时比较严重。一般针对sql 的 查询优化的办法有加索引,或者缓存数据。关于加索引的优化可以看另外一篇文章 《浅谈mysql查询优化》

4、多线程编程模型,传统的php网站没有多线程,如果是在传统的php网站上做修改,可以把部分业务拆分出来,通过nginx把这部分业务转发到 swoole上,通过swoole的异步操作来节省整体的查询时间。

5、异步编程模型,对于耗时的处理可以放到任务队列里面,简单的可以直接使用redis的队列数据类型做任务队列,复杂点的可以用mq框架,比如 rocketmq, zeromq。想省事的可以直接购买阿里云的mq服务。

6、针对更新频率不高的数据,可以放到redis里面做缓存,提供查询速度,相比于直接从数据库里面取要快,这个具体的要看业务情况。如果发现针对某些数据更新频率比较频繁的,就不需要存数据库又存redis, 可以采用先存redis,然后以异步的方式间隔一段时间同步到数据库里面。mysql 主要做数据的永久存储,redis里面存放热点数据。

7、做一些php性能测试的时候,要获取代码执行时间和消耗的内存,查了一下资料,发现php有自带的函数可以实现这个功能,具体实现代码如下:


$t1 = microtime(true);

// ... 执行代码 ...

$t2 = microtime(true);

echo '耗时'.round($t2-$t1,3).'秒
';

echo 'Now memory_get_usage: ' . memory_get_usage() . '
';

8、大流量访问做负载均衡,一般分为7层和4层,一般针对http的请求可以用nginx的upstream做7层负载均衡,有点是配置简单。对于第4层可以用lvs或者haproxy做,其实利用nginx 的 tcp_proxy 模块也可以做4层的负载。

9、大数据拆分,一般会做分表分库,可能会对业务代码要做直接的修改。也可以用中间件 mycat。


性能优化不是项目一开始就会碰到的,二是随着项目的上线运营,碰到一些特殊的情况,做特别的分析处理,寻找合适的解决之道,正如没有银弹一样,性能优化也需要找到合适的途径。


转载于:https://juejin.im/post/5bcd5cefe51d457abd740a11

你可能感兴趣的:(分析网站性能瓶颈和解决的一般方法)