IT技术博客大学习 共学习 共进步

PHP Performance Optimization

风雪之隅 2011-06-01 13:20:59 浏览 3,681 次

     今天把当时交流的PPT放到slideShare了.

     顺便谈一下对PHP性能优化的一些看法.

     1. 优化建议目的不是为了优化, 而是为了防微杜渐..

     在PPT中罗列的编码时候的优化建议, 不是为了让大家在出现性能问题的时候, 以这些作为准则去对代码进行优化. 而是希望能在大家最初写代码的时候, 就有一个心理的认知, 应该怎么写会更好.

     2. 优化的建议不是准则

     当我把PPT分享给公司的同事的时候, 会有人质疑, 魔术方法都不让用?

     优化的建议, 是建议, 是防止大家滥用, 肆无忌惮的用. 如果你能在写代码的时候, 能意识到, 什么慢, 什么快, 从而避免一些没有必要的对魔术方法的调用, 那就是这个优化建议所追求的效果了

     比如, 我在Yaf中, 为视图引擎定义了魔术方法__set, 于是就有些朋友这么来用:

$this->getView()->user =  "laruence";
$this->getView()->age  = 28;
$this->_view->desc      = "PHP engineer";

     如果是写C, 那么没有问题, 但是在PHP中, 每一个set都是一个函数调用, 所以看过了性能优化建议, 大家能意识到, 其实这个完全可以通过:

$this->getView()->assign(array(
      "user" => "laruence",
      "age"  => 28,
      "desc" => "PHP engineer",
));;

     来替代, 那就是优化建议所希望达到的效果.

     3. 优化建议不是通用的, 是和语言相关的

     有很多PHPer以前是写C的, 也可能是写Java的, 虽说语言只是工具, 但是要想用的好, 你还是应该了解工具的特点, 为不同的工具做不同的优化策略.

     比如, 对于C来说, 它有一个很强大的编译”优化”器, 可以为你做很多优化, 而PHP是解释型脚本语言, 它只会重视的执行你的代码, 不会做任何优化, 所以, 你写的代码的风格, 直接影响到最终的执行风格.

     还有, 对于C来说, 符号在执行器都会变成地址(绝大部分), 而对于PHP来说, 符号都需要经过查找(Hash Lookup)才能使用, 于是我也看到了类似下面的代码:

for ($i=0; i<10;i++) {
   $arr[1][2][3][4][5] = $i;
}

     每一次循环, 都会带来6次的Hash Lookup…..

     4. 要知根究底 PHP是一个很高级的语言, 使用它可以很方便, 很简洁的完成一些功能.

     但是, 追根究底, 它也是最终通过c代码, 继而汇编, 机器码去执行的. 也许看似简单的一条PHP语句, 最终可能需要数十条, 上百条的C语言代码来完成.

而我们, 只有理解到这个过程, 才能真正做到, 在高级语言层面, 做出对底层有正面影响的优化.

最后, 如果slideshare被”挡”了,, 点击这里下载看吧: PHP Performance PPT

建议继续学习

  1. 我的PHP,Python和Ruby之路 (阅读 12,982)
  2. Nginx+FastCgi+Php 的工作机制 (阅读 10,083)
  3. PHP程序的执行流程 (阅读 9,902)
  4. PHP业务逻辑层和数据访问层设计 (阅读 7,462)
  5. PHP的优势 (阅读 7,062)
  6. web前端性能优化进阶路 (阅读 6,681)
  7. 深入了解php底层机制(-) (阅读 6,003)
  8. PHP最佳实践 (阅读 5,883)
  9. PHP将死,何以为继? (阅读 5,802)
  10. 总结的一些PHP开发中的tips (阅读 5,242)