使用PHP内置函数的性能优劣尽可能少用魔法函数抑制符@会产生额外开销优化点:合理使用内存,利用unset()及时释放不使用的内存(unset()出现注销不掉的情况)避免在循环内做运算
echo str1,str1,str1,str2include文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路径所需的时间会更少。函数代替正则表达式完成相同功能。str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。打开apache的mod_deflate模块,可以提高二手网网页的浏览速度。递增一个全局变量要比递增一个局部变量慢2倍。递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。派生类中的方法运行起来要快于在基类中定义的同样的方法。调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算, 只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步 骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。
(举例如下)
if (strlen(KaTeX parse error: Expected '}', got '“' at position 18: …o) < 5) { echo “̲Foo is too shor…foo{5})) { echo “Foo is too short”}
调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。
当执行变量KaTeX parse error: Expected 'EOF', got '的' at position 2: i的̲递增或递减时,i++会比++KaTeX parse error: Expected 'EOF', got '慢' at position 2: i慢̲一些。这种差异是PHP特有的,…i更快是因为它只需要3条指令(opcodes),KaTeX parse error: Expected 'EOF', got '则' at position 4: i++则̲需要4条指令。后置递增实际上会…_SERVER[REQUEST_TIME]替换time();
共同学习,写下你的评论
评论加载中...
作者其他优质文章