php性能优化

 
  很长时间没有写博文了,最近换了工做,长时间加班,根本没有时间作其余事情!今天闲下来了,想想php性能方面的事情。这也是我2014年的第一篇博文!
  推荐阅读:初学者到中级者应该掌握的!
 
  php是一个很流行的脚本语言,如今不少公司(新浪、优酷、百度、搜狐、淘宝等等)在使用这种语言进行网站开发。个人这篇文章,我只是但愿可以提升你的php脚本性能。请记住你的php脚本性能,不少时候依赖于你的php版本、你的web server环境和你的代码的复杂度。
 
 
优化你代码中的瓶颈
 
Hoare曾经说过“过早优化是一切不幸的根源”。当你想要让你的网站更快运转的时候,你才应该去作优化的事情。当你要改变你代码以前,你须要作的事是什么缘由引发了系统缓慢?你能够经过如下指导和其余方式优化你的php,多是数据库缘由也多是网路缘由!经过优化你的php代码,你能尝试着找出你的系统瓶颈。
 
 
升级你的php版本
 

 你的团队成员提出,这些年php引擎已经有不少象征性的性能提高。若是你的web server仍然运行着比较老的版本,如php3或者php4。那么在你尝试着优化你代码以前,应该先深刻调查一下版本之间的升级状况。php

点击如下连接,能够了解具体细节: html

从 PHP 4 移植到 PHP 5
 

使用缓存
 
利用缓存模块(如Memcache)或者模板系统(如Smarty)进行缓存处理。咱们能够缓存数据库结果和提取页面结果的方式来提高网站性能。
 
 
使用输出缓冲区
 
当你的脚本尝试着渲染的时候,php会使用内存缓存区保存全部的数据。缓存区可能让你的页面看起来很慢,缘由是缓冲区填满全部要响应的数据以后再把结果响应给用户。幸运的是,你可以作一下改变,迫使php强行在缓冲区填满以前把数据响应给用户,这样就会让你的网站看起来更快一些。
 
避免写幼稚的setters和getters
 
当你写php类的时候,你能够直接操做对象属性,这样能帮助你节省时间和提高你的脚本性能。而不是那种让人感到幼稚好笑的setters和getters。
下面是一些案例:dog类经过使用setName()和getName()方式来操做name属性。
 
 
class dog {
  public $name = '';

  public function setName($name) {
    $this->name = $name;
  }

  public function getName() {
    return $this->name;
  }
}

  

注意:setName()和getName()除了存储和返回name属性外,没作任何工做。mysql

$rover = new dog();
$rover->setName('rover');
echo $rover->getName();

  

直接设置和访问name属性,性能能提高100%,并且也能缩减开发时间!web

 
$rover = new dog();
$rover->name = 'rover';
echo $rover->name;

  

 
没有缘由不要copy变量
 
有时初级phper,为了使代码更加“干净”,经常把已经定义的变量从新赋值给另外一个变量。这实际上就致使了双重内存的消耗(当改变变量的时候),这就致使脚本的性能降低。好比一个用户把一个512KB的变量在额外插入给另外一个变量,那么就会致使1MB的内存被消耗掉。
 
$description = strip_tags($_POST['description']);
echo $description;

  

上面的代码没有任何缘由,复制了一遍变量。你仅须要使用内联的方式简单输出变量,而不用额外的消耗内存。
 
echo strip_tags($_POST['description']);

  

 

避免循环作SQL操做
 
常常犯的错误是把一个SQL 操做放置到一个循环中,这就致使频繁的访问数据库,更重要的是,这会直接致使脚本的性能低下。如下的例子,你可以把一个循环操做重置为一个单一的SQL语句。
 
foreach ($userList as $user) {
  $query = 'INSERT INTO users (first_name,last_name) VALUES("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
  mysql_query($query);
}

  过程:sql

INSERT INTO users (first_name,last_name) VALUES("John", "Doe")

  

替换这种循环方案,你可以拼接数据成为一个单一的数据库操做。数据库

$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);

  过程:缓存

INSERT INTO users (first_name,last_name) VALUES("John", "Doe"),("Jane", "Doe")...

  

 

 

其余资源
 

总结
 
   php在性能方面的优化还有不少,若是对这方面有更深刻了解的人,能够一块儿探讨,我会把你们好的建议也放入到博文里面, 供其余phper参考。做为phper能提升众多phper
的能力是一件很是自豪的事情。——不少人都把php当成草根语言,我我的也但愿php语言未来能走的更远,这样做为phper手中的money也会愈来愈多!
 
推荐
 
相关文章
相关标签/搜索