PHP性能优化

PHP使用过程中,一些优化细节总结:

1.用单引号代替双引号来包含字符串,这样会快一些

2.如果能将类定义成静态(static),就尽量定义成静态,它的速度会提升将近4倍

3.$row['id'] 的速度是$row[id]的 7 倍。

4.echo比print快,并且使用echo的多重参数代替字符串拼接,比如echo $str,$str2

5.在使用for循环前确定最大循环数,不要每循环一次都计算最大值,最好用foreach代替

6.注销那些不用的变量尤其是大数组,以便释放内存

7.尽量避免__get,__set,__autoload

8.include_once比include更加耗时

9.include文件时尽量使用绝对路径,因为它避免了 PHP 去 include_path 里查找文件的速度,解析操作系统路径所需的时间会更少。

10.如果你想知道脚本开始执行的时刻,使用 $_SERVER['REQUEST_TIME'] 要好于 time()

11.函数代替正则表达式完成相同功能

12.str_replace函数比preg_replace函数快,但strstr函数的效率是str_replace的4倍

13.如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么 可以考虑额外写一段替换代码, 使得每次传递参数是一个字符, 而不是只写一行代码接受数 组作为查询和替换的参数。

14.使用选择分支语句(switch  case)好于使用多个if elseif 语句

15.用@屏蔽错误消息的做法非常低效

16.打开apache的mod_deflaet模块,可以提升网页的浏览速度

17.数据库连接当使用完毕时应关掉,不要使用长连接

18.在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。

19.递增一个全局变量比递增一个局部变量慢2倍

20.派生类中的方法运行起来要快于在基类中定义的同样的方法。

21.Apache 解析一个 PHP 脚本的时间要比解析一个静态 HTML 页面慢 2 至 10 倍。尽量 多用静态 HTML 页面,少用脚本。

22.除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套 PHP 缓存机制通常 可以提升 25%至 100%的性能,以免除编译开销。

23.尽量做缓存,可使用 memcached。memcached 是一款高性能的内存对象缓存系统, 可用来加速动态 Web 应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使 得脚本不必为每个请求做重新编译。

24.当执行变量$i递增或递减时,$i++比++$i慢一些

25.并不是事比面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存

26.并非要用类实现所有的数据结构,数组也很有用

27.不要把方法细分得过多,想想你真正打算重用的是哪些代码

28.尽量采用PHP内置函数

29.评估检验(profile)你的代码。 检验器会告诉你, 代码的哪些部分消耗了多少时间。 Xdebug 调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。

30.mod_zip 可作为 Apache 模块,用来即时压缩你的数据,并可让数据传输量降低 80%。

31.在可以用 file_get_contents 替代 file、fopen、feof、fgets 等系列方法的情况下,尽量 用 file_get_contents,因为他的效率高得多

32.优化 Select SQL 语句,在可能的情况下尽量少的进行 Insert、Update 操作

33.循环内部不要申明变量,尤其是大变量:对象

34.多维数组尽量不要循环嵌套赋值

35.在可以使用PHP内置字符串操作函数的情况下,不要使用正则表达式

36.foreach效率更高,尽量使用foreach代替while和for循环

37.对于global变量,应该用完就unset()掉

38.不要在循环中,嵌套使用for循环

39.全等号===比相等号==要快

40.压缩大的字符串,使用 gzcompress() 和 gzuncompress() 对容量大的字符串进行压缩和解压,再存入和取出数据库。

41.echo 字符串用逗号代替点连接符更快些

42.使用isset()代替strlen()。如:

if (strlen($foo) < 5) { echo "Foo is too short";}// 使用isset()

if (!isset($foo{5})) { echo "Foo is too short";}

43.在分割字符串时,使用split()比explode()要快

44.避免使用魔术方法。对于__开头的函数就命名为魔术函数,它们都在特定的条件下触发。

45.别再循环里用函数。例如

for($x=0; $x < count($array); $x++) {

}

46.在简单的运算中,使用三元运算符(?:)更加简洁高效

47.屏蔽敏感信息。使用error_reporting()函数来预防潜在的敏感信息显示给用户

48.不要使用开始标志的缩写形式,你正在使用这样的符号吗<?,应该用完整的<?php开始标签。

49.如果文件内容是纯PHP代码,最好在文件末尾删除PHP结束标记?>

50.用子类方法。基类中只放能重用的方法,其他功能尽量放在子类中实现。子类里的方法的性能优于基类中

51.类的性能和其方法数量没有关系

52.引用传递参数。通过参数地址引用的方式,实现函数多个返回值,这比按值传递效率高

53.提前声明局部变量,谨慎声明全局变量

54.不要随便复制变量

55.一定要对变量进行初始化(声明)

56.用字符串而不是数组作为参数。如果一个函数既能接受数组,又能接受简单字符做为参数,那么尽量用字符作为参数。

57.数组元素加引号。$row['id']比$row[id]速度快7倍。

以下是架构方面的总结:

58.在php.ini中开启gzip压缩:zlib.output_compression = Onzlib.output_compression_level = (level)

59.静态化页面。Apache/Nginx解析一个PHP脚本的时间,要比解析一个静态HTML页面慢2至10倍。

60.将PHP升级到最新版

61.利用PHP的扩展

62.PHP缓存。

63.使用NoSQL缓存:Memchached或者redis都可以



 

posted @ 2020-05-22 15:21  离岸少年  阅读(404)  评论(0编辑  收藏  举报