并发问题----提高速度

来源:互联网 发布:office电脑版办公软件 编辑:程序博客网 时间:2024/05/21 17:43

并发问题

当经过N天的努力,终于把网站写完来了。基本逻辑也测试通过了。PHPER终于可以松口气了。不过,真的就结束了吗? 且慢。 当网站上线后,你将遇到各种问题。并发问题,安全问题等等。  今天先说说并发问题。 因本人水平有限,写的东西有可能不全面,欢迎大家指导。

并发问题将体现在以下两个方面。 A. 网页显示慢。 B.各种逻辑错误。 好了,先分析第一个问题。 网页显示慢的问题。

1.   首先,在客户端检查。 下图是chrome浏览器,显示个元素加载时间。我们就可以耐心的检查哪个元素加载慢。按照以往经验一般是大图片暂用的时间比较多。图片一般越小越好。 笔者观察过,淘宝的图片一般不超过100k.压缩图片大小,是最直接有效的加速方式。

 

2.   减少第一次显示的图片个数。  通常会使用延迟加载的方法。具体方法为,通过ajax 显示后续的图片。

3.   前端缓存技术。

a.   Nginx 可以设置jpg,js,css等文件永久缓存。

b.   也可以通过 header 设置cache.

4.   Js,css文件的压缩合并。 总所周知,建立http链接的时间需要一段时间。而且每次下载一个js,css都需要建立一次http. 所以大家干脆将CSS与JS合并。减少建立TCP的时间。

5.   减少 ICON的文件数目。 在一个页面中ICON是不可避免的。 很早以前大家已经把所有的ICON放在一个文件中。 然后通过CSS的属性来取每个小ICON.   最近在学习bootstrap的时候, 又学习了一种矢量字ICON. 详见

http://v3.bootcss.com/components/。

 

         前端的加速基本就这样。现在说一说服务器端如何加速。

1.   统计url的执行时间。 方法

在文件头加入$stime=microtime(true);

在文件结尾加入:
$etime=microtime(true);//获取程序执行结束的时间$total=$etime-$stime;   //计算差值echo "<br />[页面执行时间:{$total} ]"; 查看是否有异常问题。
笔者在实际中就碰到一个问题,具体如下:
一元夺宝中,大家抢购的时候,需要查找IP对应的物理位置, 原先采用的方式是curl 函数系列提交IP到淘宝的一个server去获取地址。然后统一记入到数据库中,以便后面显示那个地区的人中奖了。
在单独测试的时候,没有问题。不过,大家枪购的时候,这个抢购页面经常timeout.  大家都怀疑是数据库的问题。  做了N多改进都没结论。后面我就一个函数一个函数的测试执行时间。花了2个小时,才找到这个根源。  如果大家,也使用到这个函数的时候,需要注意一下,timeout的设置。
2.    打开mysql slow log 。查看那条msyql语句执行慢。一般需要注意如下几点:
a.      是否增加了合适的索引。
b.    Select的时候,紧紧选出需要的字段。
c.     不要在mysql中做随机取值,先取出来然PHP做随机。
d.     表态大了,做分表处理。纵向分表,横向分表。
e.    不使用事物的时候,MyISAM 也许会是一个更好的选择。
f.     引进nosql技术, 目前比较流行的是memcached 以及redis.  一般的作为读缓存。
 

3.   如果你是linux系统, top一下看php-fpm与Mysql的使用率吧。

a.   系统还有许多剩余cpu 使用率。 那么将php-fpm 进程数开大一点吧。 在php.ini有设置。

b.   如果系统还有需要内存空间,你可以将mysql的缓存开大一点。

c.   配置最优化了。 那么考虑一下PHP的静态网页技术。 如果你的网站实时性不需要特别强的情况下。

4.   升级硬件:

a.   负载均衡。

b.   Mysql读写分离

c.   搭建nosql 矩阵池

 

好了,加速问题先说到这,后面有时间说说并发的逻辑混乱问题。

0 0
原创粉丝点击