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都可以
♥ 作者:离岸少年
♠ 出处:https://www.cnblogs.com/jackzhuo/
♣ 本博客大多为学习笔记或读书笔记,本文如对您有帮助,还请多推荐下此文,如有错误欢迎指正,相互学习,共同进步。