1. 不要随便就复制变量
有时候为了使 PHP 代码更加整洁,一些 PHP 新手(包括我)会把预
BAD:
$description = $_POST['de scription' ]; echo $descripti on;
GOOD:
echo $_POST['description' ];
2. 对字符串使用单引号
PHP 引擎允许使用单引号和
BAD:
$output = "This is a plain string";
GOOD:
$output = 'This is a plain string';
BAD:
$type = "mixed"; $output = "This is a $type string";
GOOD:
$type = 'mixed'; $output = 'This is a ' . $type .' string';
3. 使用 echo 函数来输出字符串
使用 echo() 函数来打印结果出了有
BAD:
print($myVariable);
GOOD:
echo $myVariable;
4. 不要在 echo 中使用连接符
很多 PHP 程序员(有包括我)不
BAD:
echo 'Hello, my name is' . $firstName. $lastName . ' and I live in ' . $city;
GOOD:
echo 'Hello, my name is' , $firstName, $lastName , ' and I live in ' , $city;
5. 使用 switch/cas
对于只有单个变量的判
BAD:
if($_POST['action'] == 'add') { addUser(); } elseif ($_POST['a ction'] == 'delete') { deleteUser (); } elseif ($_POST['a ction'] == 'edit') { editUser() ; } else { defaultAct ion(); }
GOOD:
switch($_POST['actio n']) { case 'add': addUser(); break; case 'delete': deleteUser (); break; case 'edit': editUser() ; break; default: defaultAct ion(); break; } 1.如果一个方法可静 态化,就对它做静态声 明。速率可提升至4倍 。 2.echo 比 print 快。 3.使用echo的多 重参数(译注:指用逗 号而不是句点)代替字 符串连接。 4.在执行for循环 之前确定最大循环数, 不要每循环一次都计算 最大值。 5.注销那些不用的变 量尤其是大数组,以便 释放内存。 6.尽量避免使用__ get,__set, __autoload 。 7.require_ once()代价昂贵 。 8.在包含文件时使用 完整路径,解析操作系 统路径所需的时间会更 少。 9.如果你想知道脚本 开始执行(译注:即服 务器端收到客户端请求 )的时刻,使用$_S ERVER[‘REQ UEST_TIME’ ]要好于time() 。 10.函数代替正则表 达式完成相同功能。 11.str_rep lace函数比pre g_replace函 数快,但strtr函 数的效率是str_r eplace函数的四 倍。 12.如果一个字符串 替换函数,可接受数组 或字符作为参数,并且 参数长度不太长,那么 可以考虑额外写一段替 换代码,使得每次传递 参数是一个字符,而不 是只写一行代码接受数 组作为查询和替换的参 数。 13.使用选择分支语 句(译注:即swit ch case)好于使用多 个if,else if语句。 14.用@屏蔽错误消 息的做法非常低效。 15.打开apach e的mod_defl ate模块。 16.数据库连接当使 用完毕时应关掉。 17.$row[‘i d’]的效率是$ro w[id]的7倍。 18.错误消息代价昂 贵。 19.尽量不要在fo r循环中使用函数,比 如for ($x=0; $x < count($arr ay); $x)每循环一次都会 调用count()函 数。 20.在方法中递增局 部变量,速度是最快的 。几乎与在函数中调用 局部变量的速度相当。 21.递增一个全局变 量要比递增一个局部变 量慢2倍。 22.递增一个对象属 性(如:$this- >prop++)要比 递增一个局部变量慢3 倍。 23.递增一个未预定 义的局部变量要比递增 一个预定义的局部变量 慢9至10倍。 24.仅定义一个局部 变量而没在函数中调用 它,同样会减慢速度( 其程度相当于递增一个 局部变量)。PHP大 概会检查看是否存在全 局变量。 25.方法调用看来与 类中定义的方法的数量 无关,因为我(在测试 方法之前和之后都)添 加了10个方法,但性 能上没有变化。 26.派生类中的方法 运行起来要快于在基类 中定义的同样的方法。 27.调用带有一个参 数的空函数,其花费的 时间相当于执行7至8 次的局部变量递增操作 。类似的方法调用所花 费的时间接近于15次 的局部变量递增操作。 28.用单引号代替双 引号来包含字符串,这 样做会更快一些。因为 PHP会在双引号包围 的字符串中搜寻变量, 单引号则不会。当然, 只有当你不需要在字符 串中包含变量时才可以 这么做。 29.输出多个字符串 时,用逗号代替句点来 分隔字符串,速度更快 。注意:只有echo 能这么做,它是一种可 以把多个字符串当作参 数的“函数”(译注: PHP手册中说ech o是语言结构,不是真 正的函数,故把函数加 上了双引号)。 30.Apache解 析一个PHP脚本的时 间要比解析一个静态H TML页面慢2至10 倍。尽量多用静态HT ML页面,少用脚本。 31.除非脚本可以缓 存,否则每次调用时都 会重新编译一次。引入 一套PHP缓存机制通 常可以提升25%至1 00%的性能,以免除 编译开销。 32.尽量做缓存,可 使用memcache d。memcache d是一款高性能的内存 对象缓存系统,可用来 加速动态Web应用程 序,减轻数据库负载。 对运算码 (OP code)的缓存很有 用,使得脚本不必为每 个请求做重新编译。 33.当操作字符串并 需要检验其长度是否满 足某种要求时,你想当 然地会使用strle n()函数。此函数执 行起来相当快,因为它 不做任何计算,只返回 在zval 结构(C的内置数据结 构,用于存储PHP变 量)中存储的已知字符 串长度。但是,由于s trlen()是函数 ,多多少少会有些慢, 因为函数调用会经过诸 多步骤,如字母小写化 (译注:指函数名小写 化,PHP不区分函数 名大小写)、哈希查找 ,会跟随被调用的函数 一起执行。在某些情况 下,你可以使用iss et() 技巧加速执行你的代码 。 (举例如下) if (strlen($f oo) < 5) { echo "Foo is too short"; } (与下面的技巧做比较 ) if (!isset($f oo{5})) { echo "Foo is too short";
1、用i =1代替i=i 1。符合c/c 的习惯,效率还高。
2、尽可能的使用PH
3、能使用单引号字符
4、用foreach
} 调用isset()恰巧比strlen() 快,因为与后者不同的 是,isset()作 为一种语言结构,意味 着它的执行不需要函数 查找和字母小写化。也 就是说,实际上在检验 字符串长度的顶层代码 中你没有花太多开销。 34.当执行变量$i 的递增或递减时,$i ++会比++$i慢一 些。这种差异是PHP 特有的,并不适用于其 他语言,所以请不要修 改你的C或Java代 码并指望它们能立即变 快,没用的。++$i 更快是因为它只需要3 条指令(opcode s),$i++则需要 4条指令。后置递增实 际上会产生一个临时变 量,这个临时变量随后 被递增。而前置递增直 接在原值上递增。这是 最优化处理的一种,正如Ze nd的PHP优化器所 作的那样。牢记这个优 化处理不失为一个好主 意,因为并不是所有的 指令优化器都会做同样 的优化处理,并且存在 大量没有装配指令优化 器的互联网服务提供商 (ISPs)和服务器 。 35.并不是事必面向 对象(OOP),面向 对象往往开销很大,每 个方法和对象调用都会 消耗很多内存。 36.并非要用类实现 所有的数据结构,数组 也很有用。 37.不要把方法细分 得过多,仔细想想你真 正打算重用的是哪些代 码? 38.当你需要时,你 总能把代码分解成方法 。 39.尽量采用大量的 PHP内置函数。 40.如果在代码中存 在大量耗时的函数,你 可以考虑用C扩展的方 式实现它们。 41.评估检验(pr ofile)你的代码 。检验器会告诉你,代 码的哪些部分消耗了多 少时间。Xdebug 调试器包含了检验程序 ,评估检验总体上可以 显示出代码的瓶颈。 42.mod_zip 可作为Apache模 块,用来即时压缩你的 数据,并可让数据传输 量降低80%。