A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 huawei 于 2017-9-26 14:18 编辑

写在最前面:作为成熟的PHP程序员,诚然我们更应该多花心思在业务和架构上。在开发效率和项目可维护性可扩展性面前,性能可能无足轻重。但是又懂得业务架构,又懂得开发效率,岂不是更好?


一、字符串
1.1 少用正则表达式

能用PHP内部字符串操作函数的情况下,尽量用他们,不要用正则表达式, 因为其效率高于正则。没得说,正则最耗性能。
str_replace函数要比preg_replace快得多,strtr函数又比str_replace来得快。
有没有你漏掉的好用的函数?
例如:strpbrk()、strncasecmp()、strpos()、strrpos()、stripos()、strripos()。

1.2 字符替换

如果需要转换的全是单个字符,用字符串作为 strtr() 函数完成替换,而不是数组:
$addr = strtr($addr, "abcd", "efgh"); // 建议
$addr = strtr($addr, array('a' => 'e', )); // 不建议
效率提升:10 倍。


str_replace字符替换比正则替换preg_replace快,但strtr比str_replace又快1/4。
另外,不要做无谓的替换,即使没有替换,str_replace也会为其参数分配内存。很慢!
用 strpos 先查找(非常快),看是否需要替换,如果需要,再替换。
如果需要替换,效率几乎相等,差别在 0.1% 左右。
如果不需要替换:用 strpos 快 200%。

1.3 压缩大的字符串

使用 gzcompress() 和 gzuncompress() 对容量大的字符串进行压缩和解压,再存入和取出数据库。
这种内置的函数使用gzip算法,能压缩字符串90%。

1.4 echo 输出

echo 字符串用逗号代替点连接符更快些。
虽然,echo是一种语言结构,不是真正的函数。
但是,它可以把逗号隔开的多个字符串当作“函数”参数传入,所以速度会更快。

echo $str1, $str2; // 速度快
echo $str1 . $str2;// 速度稍慢

1.5 尽量用单引号

PHP 引擎允许使用单引号和双引号来封装字符串变量,但是它们的速度是有很大的差别的!
使用双引号的字符串会告诉 PHP 引擎,首先去读取字符串内容,查找其中的变量,并改为变量对应的值。
一般来说字符串是没有变量的,使用双引号会导致性能不佳。
最好使用字符串连接,而不是双引号字符串。

$output = "This is a plain string";  // 不好的实践
$output = 'This is a plain string';  // 好的实践
$type = "mixed";                     // 不好的实践
$output = "This is a $type string";
$type = 'mixed';                     // 好的实践
$output = 'This is a ' . $type . ' string';

1.6 使用isset代替strlen
在检验字符串长度时,我们第一想法会使用 strlen() 函数。
此函数执行起来相当快,因为它不做任何计算,只返回在zval结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。
但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化、哈希查找,会跟随被调用的函数一起执行。
在某些情况下,你可以使用 isset() 技巧加速执行你的代码。例如:

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

1.7 用split分割字符串

在分割字符串时,split()要比explode()快。
split()
0.001813 - 0.002271 seconds (avg 0.002042 seconds)
explode()
0.001678 - 0.003626 seconds (avg 0.002652 seconds)

1.8 echo效率高于print

因为echo没有返回值,print返回一个整型。
注意:echo输出大字符串的时候,如果没有调整就会严重影响性能。
打开Apache的mod_deflate进行压缩,或者打开ob_start将内容放进缓冲区,可以改善性能问题。

二、语句
游客,如果您要查看本帖隐藏内容请回复


三、函数
游客,如果您要查看本帖隐藏内容请回复


四、变量
游客,如果您要查看本帖隐藏内容请回复

五、数组

游客,如果您要查看本帖隐藏内容请回复


六、架构
游客,如果您要查看本帖隐藏内容请回复




44 个回复

正序浏览
优化php代码
回复 使用道具 举报
啊b 中级黑马 2019-12-10 10:36:27
44#
1111111111111111111111111111
回复 使用道具 举报
来学习,谢谢分享
回复 使用道具 举报
学习学习
回复 使用道具 举报
学无止境
回复 使用道具 举报
神啊,终于让我找到了!
回复 使用道具 举报
11111111111111
回复 使用道具 举报
第三款打了肯德基埃里克
回复 使用道具 举报
PHP高效率的48条优化细节写法
回复 使用道具 举报
学习学习
回复 使用道具 举报
学习了。都是干货啊
回复 使用道具 举报
回复 使用道具 举报
学习学习
回复 使用道具 举报
zizu 初级黑马 2018-3-31 16:03:58
32#
学习 ,var_dump
回复 使用道具 举报
http://localhost
回复 使用道具 举报
语句优化
回复 使用道具 举报
因为echo没有返回值,print返回
回复 使用道具 举报
11111111111111111111111111
回复 使用道具 举报
Ear、若轩 来自手机 中级黑马 2017-12-6 23:12:03
27#
????
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马