Woooowen You can do anything you set your mind to, man

php 网站优化

  • 1.在使用echo输出字符串的时候,应该使用逗号分隔,而不是使用连接字符串 echo 'this is slow'.$slow1; echo 'this is faster',$faster; 因为当你使用连接符的时候,php引擎会将这个字符串先连接起来再输出,而使用逗号的时候,他会循环顺序输出.当然快点.

  • 2.使用双引号来包含变量 echo 'this is slow'.$slow; echo "this is faster $faster"; 使用双引号的时候会自动解析双引号中的变量,但是如果你输出的是确定的字符,那么还是用单引号速度会快一点,因为这样就节省了一个解析字符串的过程.

  • 3.使用include/require而不是使用includeonce/requireonce 使用includeonce/requireonce会在引入文件之前先去已加载的文件列表查找是否已经引入,这个过程也是一个资源消耗的过程. http://www.laruence.com/2012/09/12/2765.html 这边的文章叙述了为什么不要使用includeonce/requireonce的原因,而且就连php的发明人Rasmus Lerdorf都建议不要使用includeonce/requireonce了

  • 4.提前计算循环长度

//slow
$ary = array(1,2,3,4,5);
for($i = 0;$i <= count($ary);$i++){}

//fast
$len = count(array(1,2,3,4,5));//这边就不要在定义什么$count = count($ary);之类的了,这样多声明一个变量,内存就多占用一块
for($i = 0;$i <= $len;$i++){}

另外多使用foreach循环,以及使用switch代替if,代码看起来美观易维护

  • 5.文件操作 如果你读取的文件是个只有几KB的小文件的话,那么推荐使用fread()方法,该方法在读取小文件的时候速度好点,而如果你读取的是几MB的文件的话,还是使用filegetcontents()吧.效率高. 尽量避免操作文件,就算操作文件函数的效率高,还是没有读取数据库来的方便,效率.

多使用Xdebug,strace,VLD之类的性能查看工具,查看具体的性能消耗和瓶颈来优化代码

用户请求php文件到页面生成是有一个过程的: 用户->.php文件->词典扫描->解析->opcode->处理opcode->计算机处理->生成 其中词典扫描和解析这2个过程是有zend引擎来实现的,这就是为什么php要架在zend引擎上面, zend引擎将php语言解析成opcode(可以理解为计算所所能识别的一种语言)然后计算机在解析处理opcode生成页面 而如果opcode做了缓存机制,那么就不用每次访问一个php文件都去生成一下opcode,可以直接调用缓存,无疑速度加快了很多. opcode 缓存工具:APC,Xcache,eA

其实代码的性能优化大都有限主要的网站效率优化还是包括几个方面:

1.前端优化.

  • a.减少文件请求数目,减少文件体积,合并css以减少文件请求书,减少筛检css和js代码
  • b.压缩图片,使用GD2函数库或者magicimage来压缩图片,减少图片体积.
  • c.异步加载js,使用do.js,或者在网站的底部才选择去加载js文件.这样不影响访问用户的体验.
  • d.使用flush技术或者ajax技术来分块显示,先将网站的整体的静态部分显示出来,在flush出有数据加载的部分.有测验说用户对于网页显示的平均等待时间是4秒中,如果超过这个时间,你将会失去大量的用户.
  • e.页面静态化,将页面静态化当然是显示最快的,可是如果有动态数据,怎么办?可以使用memcached或者redis缓存技术将页面缓存起来,或者数据缓存,不用去读库,当然这些东西偏后端了.但是你可以将一些显示不多,或者内容更新不频繁的页面静态化,例如公司介绍等等
  • f.避免那些华丽炫目的flash技术,页面显示的内容页做调整.不需要显示很多令人眼花缭乱的内容,有数据显示,2000年美国只有10%的用户会使用下拉条,而现在只有30%的用户会看到三屏以下内容,所以是否有必要为了30%的用户而去影响70%用户的体验么,所以尽量筛检你所要显示的内容.可以使用下拉加载等技术来加载更多的内容

2.后端优化.

  • a.php代码优化.
  • b.减少数据库连接,读取数据之后尽快断开数据库连接,避免长连接.
  • c.使用memcached和redis等缓存技术.
  • d.使用APC或者Xcache等opcode缓存技术.
  • e.使用xdebug等测试工具来查看php性能瓶颈.
  • f.避免大数据操作,和文件操作.

3.数据库优化

网站性能方面,数据库一直都是瓶颈所在.数据库方面的优化可以从几个方面考虑.

1.使用其他方式来分担数据库的压力

  • a.使用memcached等缓存技术,避免重复读库
  • b.NoSQL虽然还不成熟,但是可以替代大部分数据库功能,使得数据库只是作为一个备份的存在

2.数据库本身

  • a.数据库本身的配置优化,关于数据库引擎的选择,MyISAM适合频繁使用select的表而InnoDB适合频繁更新的表.MyISAM适合小数据,低并发网站,InnoDB适合大数据高并发.
  • b.优化sql语句,经常使用explain来查看sql语句性能.避免使用join和子查询.能不适用order by的就不使用,创建索引,尽量避免使用<> ,!=,in ,not in这类语句,因为他们不走索引.
  • c.使用存储过程,来代替一部分的sql语句.
  • d.数据库读写分离.数据库分表分库
  • e.数据库集群
  • f.开启数据库慢查询来查找消耗时间长的一些sql语句,来优化他们.
  • g.避免使用mysql类,你可以使用mysqli或者数据抽象层PDO来替代他们.
  • h.避免在sql语句中使用sql内置的那些函数,你可以将那些函数先获取在放入sql语句中执行

3.其他

其他一些方面,例如硬件配置,架构方面,CDN加速,使用流量分析工具(google分析)来查看哪些页面是用户经常浏览的来做进一步的优化. 分布式架构做好了.以后pv上去了也就是加加服务器的问题了.这个才是大头

还有一些个人的建议就是千万别把用户想的太聪明,有一次一个用户打电话来说找不到信息的修改项,后来沟通了发现这个用户不知道那个笔样子的图片就是修改功能.他居然不知道这个是修改,难道非要写上修改2个字才能知道吗.所以用户都是白痴.为什么那些网站那么流行,就因为他设计的够白痴,就拿google首页来说,就一个input框和一个按钮,白痴也知道该怎么做.所以不要拿你的网站性能来添加那些你认为很炫很牛的功能,用户要的只是使用方便,简单易懂就好

Woooowen 浙ICP备15013647号