PHP性能优化

来源:互联网 发布:简明医学统计学软件 编辑:程序博客网 时间:2024/05/21 20:24

PHP项目优化主要三个方面

一、PHP语言级性能优化

二、PHP周边问题的性能优化

三、PHP底层


PHP语言级性能优化

1)少写代码,多用PHP自身能力。尽量使用PHP原生函数和常量,类如果要实现的功能有原生PHP函数,则不要自己用PHP实现

2)尽量使用性能更高的内置函数比如isset和array_key_exists都可以使用,则使用isset

3)产生额外开销的错误抑制符@

4)合理使用内存(PHP有内存回收机制保底,但也请小心使用内存,建议:利用unset() 及时释放不使用的内存)

5)尽量少的使用正则表达式(建议,利用字符串处理函数,实现相同逻辑)

6)循环内的计算式将会被重复计算。经常犯的错误是把一个SQL 操作放置到一个循环中,这就导致频繁的访问数据库,更重要的是,这会直接导致脚本的性能低下。以下的例子,你能够把一个循环操作重置为一个单一的SQL语句。

例:

<span style="color:#333333;"><?php  //建议$str = 'hello world';$strlen = strlen($str);for($i = 0 ; $i<$strlen;$i++){}?></span>

?>

<span style="color:#333333;">foreach ($userList as $user) {  $query = 'INSERT INTO users (first_name,last_name) VALUES("' . $user['first_name'] . '", "' . $user['last_name'] . '")';  mysql_query($query);}  过程:1INSERT INTO users (first_name,last_name) VALUES("John", "Doe")</span>
<span style="color:#333333;">替换成:</span>
<span style="color:#333333;"><pre name="code" class="html">$userData = array();foreach ($userList as $user) {    $userData[] = '("' . $user['first_name'] . '", "' . $user['last_name'] . '")'; }$query = 'INSERT INTO users (first_name,last_name) VALUES' . implode(',', $userData);mysql_query($query);  过程:1INSERT INTO users (first_name,last_name) VALUES("John", "Doe"),("Jane", "Doe")...</span>

7)没有原因不要copy变量。有时初级phper,为了使代码更加“干净”,常常把已经定义的变量重新赋值给另一个变量。这实际上就导致了双重内存的消耗(当改变变量的时候),这就导致脚本的性能下降。比如一个用户把一个512KB的变量在额外插入给另一个变量,那么就会导致1MB的内存被消耗掉。

<span style="color:#333333;">$description = strip_tags($_POST['description']);echo $description;  </span>
替换为:

<span style="color:#333333;"><span style="font-size:14px;">echo strip_tags($_POST['description']);</span></span>


PHP周边问题性能优化

周边:

1)Linux 运行环境
          文件存储(硬盘,ssd)
          数据库(
MySQL 索引使用,NoSQL+MySQL的配合使用,MySQL主从等)
          缓存(memcache redis)
2)减少文件类操作
      常见PHP场景的开销次序:
读写磁盘、读写数据库、读写内存、读写网络数据
读写内存<< 读写数据库<读写磁盘<读写网络数据(基于文件系统)
3)优化网络请求
例: 对方接口的不确定因素,网络稳定性
设置超时时间
a)连接超时 (不能超过 200ms) b)读超时(800ms)  c)写超时(500ms)
2) 将串行请求并行化
a)使用curl_multi_*() b)使用swoole扩展
4)压缩PHP接口输出
5)PHP缓存重复计算内容
6)Smarty 调优和重叠时间窗口思想

7)使用xhprof分析项目源码,找出瓶颈进行优化

工具:XHPorf(源自Fackbook的PHP性能分析工具)
           ab - 压力测试
           vld - opcode 代码分析

PHP底层


1)使用opcode扩展 缓存PHP的opcode代码,减少PHP的编译过程

2)CPU密集或者复杂功能使用PHP的pecl扩展(swoole等优秀扩展的使用)3)HHVM,百度再用,不过还是让我们坐等PHPNG的问世,有PHPNG,HHVM就不是必须的选择了


0 0