PHP是流行的脚本开发语言,相对于Java、C等编译语言,一次编译,到处运行,效率上是比脚本类语言要快的;而PHP是通过Zend语言引擎进行解析的,可以将其作为Web服务器的内嵌模块或者通过Socket与服务器进行通讯,提升PHP的执行效率,掌握一些优化技巧和建议总是有好处的。
1、用单引号替代双引号引用字符串。
2、将类的方法定义成static。
3、$row['id']代替$row[id]。
4、echo代替print进行输出。
5、运用foreach代替while和for循环,或者在for循环前计算循环最大值。
6、注销那些不用的变量尤其是大数组,以便释放内存。
7、尽量避免使用__get,__set,__autoload这些魔法常量。
8、require_once()比require代价昂贵。
9、include文件时尽量使用绝对路径,少用iniset()来设置include_path。
10、使用$_SERVER['REQUEST_TIME']要好于time(),对于计算脚本运行时间。
11、函数代替正则表达式完成相同功能。
12、str_replace函数比preg_replace函数快,但strtr函数的效率比str_replace函数效率快。
13、字符串替换函数的形参尽量简单。
14、使用选择分支语句switch case优于使用多个if,else if语句。
15、尽量避免使用@屏蔽错误消息。
16、打开apache的mod_deflate模块,可以提高网页的浏览速度。
17、数据库连接当使用完毕时应关掉,不要用长连接。
18、错误消息代价昂贵。
19、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。
20、递增一个全局变量要比递增一个局部变量慢近2倍。
21、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。
22、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢约9至10倍。
23、仅定义一个局部变量而没在函数中调用它,同样会减慢速度。
24、方法调用看来与类中定义的方法的数量无关。
25、派生类中的方法运行起来要快于在基类中定义的同样的方法。
26、调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。
27、Apache解析PHP脚本的时间要比解析静态HTML页面慢很多,尽量多用静态HTML页面,少用脚本。
28、除非脚本可以缓存,否则每次调用时都会重新编译一次,引入一套PHP缓存机制,以免除编译开销。
29、应用层必要时作缓存,可使用memcache或者redis等nosql,nosql是高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。
30、当操作字符串并需要检验其长度是否满足某种要求时,可以使用strlen()函数。在某些情况下,也可以使用isset() 技巧加速执行你的代码,如strlen($foo) 的速度比!isset($foo{5})慢。
31、当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的。
32、面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。
33、并非要用类实现所有的数据结构,数组、哈希等有时也很有用。
34、不要把方法细分得过多,调用函数越多,开销越大。
35、代码分解成方法时,方法嵌套不宜过深,否则大大影响PHP的运行效率。
36、尽量使用PHP的内置函数。
37、如果在代码中存在大量耗时的函数,可以考虑用C扩展的方式实现。
38、测试检验(profile)代码,Xdebug调试器包含了检验程序,总体上可以显示出代码的瓶颈。
39、mod_zip可作为Apache模块,用来即时压缩数据,并可让数据传输量大概降低80%。
40、尽量使用file_get_contents和file_put_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用file_get_contents。
41、尽量的少进行文件操作。
42、优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作。
43、尽可能的使用PHP内部函数。
44、循环内部尽量不要声明变量,尤其是大变量、对象,每次分配都会有开销。
45、多维数组尽量不要循环嵌套赋值。
46、用i+=1代替i=i+1,符合c/c++的习惯,效率还高。
47、对global变量,应该用完就unset()掉。
48、数据量大时,尽量采用分页来取。
【原文地址】