PHP代码优化的53个细节

  这篇文章主要介绍了PHP代码优化的53个细节,常见而重要的php优化策略,需要的朋友可以参考下

  用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。

  1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。

  2、$row['id'] 的速度是$row[id]的7倍。

  3、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。

  4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。

  5、注销那些不用的变量尤其是大数组,以便释放内存。

  6、尽量避免使用__get,__set,__autoload。

  7、require_once()代价昂贵。

  8、include文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路径所需的时间会更少。

  9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME']要好于time()。

  10、函数代替正则表达式完成相同功能。

  11、str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。

  12、如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。

  13、使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。

  14、用@屏蔽错误消息的做法非常低效,极其低效。

  15、打开apache的mod_deflate模块,可以提高网页的浏览速度。

  16、数据库连接当使用完毕时应关掉,不要用长连接。

  17、错误消息代价昂贵。

  18、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。

  19、递增一个全局变量要比递增一个局部变量慢2倍。

  20、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。

  21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。

  22、仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。

  23、方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。

  24、派生类中的方法运行起来要快于在基类中定义的同样的方法。

  25、调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。

  26、Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。

  27、除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。

  28、尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。

  29、当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。

  (举例如下)

  if (strlen($foo) < 5) { echo “Foo is too short”$$ }

  (与下面的技巧做比较)

  if (!isset($foo{5})) { echo “Foo is too short”$$ }

  调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。

  34、当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java 代码并指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意,因为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。

  35、并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。

  36、并非要用类实现所有的数据结构,数组也很有用。

  37、不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?

  38、当你需要时,你总能把代码分解成方法。

  39、尽量采用大量的PHP内置函数。

  40、如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。

  41、评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。

  42、mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。

  43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题;

  44、尽量的少进行文件操作,虽然PHP的文件操作效率也不低的;

  45、优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作(在update上,我被恶批过);

  46、尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!);

  47、循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?);

  48、多维数组尽量不要循环嵌套赋值;

  49、在可以用PHP内部字符串操作函数的情况下,不要用正则表达式;

  50、foreach效率更高,尽量用foreach代替while和for循环;

  51、用单引号替代双引号引用字符串;

  52、“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”;

  53、对global变量,应该用完就unset()掉;

  最后,总结一下常见而重要的php优化策略:

  一、 在includes和requires中使用绝对路径,这样在分析路径花的时间更少;

  二、 在循环里别用函数,例如For($x=0; $x < count($array); $x), count()函数在外面先计算;

  三、 使用error_reporting(0)函数来预防潜在的敏感信息显示给用户。理想的错误报告应该被完全禁用在php.ini文件里。可是如果你在用一个共享的虚拟主机,php.ini你不能修改,那么你最好添加error_reporting(0)函数,放在每个脚本文件的第一行(或用require_once()来加载)这能有效的保护敏感的SQL查询和路径在出错时不被显示;

  四、 禁止过多的循环套循环,嵌套过多的循环会拉低执行效率

  五、 禁止在循环内部执行相关的查询语句,除非万不得以,不然千万不可这么操作

  六、 尽量使用单引号联接字符串

  七、 尽可能的减少变量复制操作。例如:$description = $_POST['description'];

  八、 当if/else过多时,尽可能的使用switch/case 代替 if/else。能够使代码更加简明

  九、 开启缓存机制有助于提升性能,同时降低MySQL负载

  十、 开启gzip压缩

时间: 2024-11-08 18:14:55

PHP代码优化的53个细节的相关文章

PHP代码优化24条真经

echo比print快. 使用echo的多重参数代替字符串连接. 在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替. 对global变量,应该用完就unset()掉. 用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会. 函数代替正则表达式完成相同功能. 当执行变量$i的递增或递减时,$i++会比++$i慢一些.这种差异是PHP特有的,并不适用于其他语言,++$i更快是因为它只需要3条指令(opco

Java代码优化细节_java

代码优化细节  1.尽量指定类.方法的final修饰符 带有final修饰符的类是不可派生的.在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的.为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写.如果指定了一个类为final,则该类所有的方法都是final的.Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大  2.尽量重用对象  特别是String对象

探讨页面代码优化时我们不能轻视的几个小细节

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 在2012年伊始,百度就开始对算法进行一定的调整,对于站点的内部因素更加的看重,尤其是在一些我们之前容易轻视的小细节上.页面中的一些元素即使有一个小小的优势都有可能对你的排名有很大的促进作用.站点的页面细节优化已经成为优化人员不可忽视的优化的重要一环. 那么你是否开始想知道如何做页面细节的优化呢?说道页面的优化,很多人跟笔者最初一样认为无非就

CSS细节:选择器、单位、函数(方法)

文章简介:这篇文章讲到的特性,最赞的一点是它们解决了现实的问题,从琐碎而繁复的选择器到建立响应式网站的新挑战.实际上,我期待每一个特性被使用到最普通的项目当中. 未来的CSS太让人兴奋了:一方面,是全新的页面布局方式:另一方面,是酷炫的滤镜.颜色等视觉效果.这些CSS,受开发者追捧,被杂志和博客文章铺天盖地地介绍. 如果说这些特性是CSS华丽的一面,那我们来看看它朴实的一面:很不起眼的东西,如选择器.单位.函数(方法).我经常说这是繁琐的东西,但我意思是它们能干漂亮的活,这就是我要分享的. 怎么

网站优化哪些细节因素影响着用户体验

众所周知,网站优化过程中我们一直倡导的优化方式就是正规的白帽手法,随着百度算法的升级,白帽方式笔者仅仅是我们优化网站的前提,要更加深入细致的做好网站优化笔者认为我们必须从深层次的角度去分析和提升网站的用户体验,下面笔者以自己对于网站优化过程中用户体验提升的细节方面和大家进行详细的探讨,好,闲话短续咱们进入今天主题. 第一,网站的访问速度是用户体验最关键的细节. 我们知道网站目录结构很多时候企业为了花哨的显示而不顾蜘蛛和用户的感受,我们看看下面这张图, 这个图示一个企业站的首页,笔者打开这个网站之

代码优化的另一面

  优化软件是一件好事,但如果使用不当,就会好事变坏事.如果你在优化代码时走向了错误的道路,那么这种优化会提高开发成本.降低生产力.在软件开发过程中,成本需要时刻谨记在心.一般来说,优化的软件需要花费更长的时间来交付,因为你需要花费精力使它质量更高.有时候,你并不是为了运行速度而做优化.对于嵌入式系统来说,可能是减少内存使用,对于手持设备,可能是硬件资源限制.优化的代码通常难以调试和维护,因为你需要牺牲一些代码可读性.优化良好的软件带来的好处要多于坏处,但是如果你做了错误的优化,那么结果恰恰相反

工程机械类的企业网站SEO优化:细节决定成败

  目前,很多工程机械类的企业都纷纷的开展网络营销,将传统营销方式与网络营销相结合的模式运营.而企业网站的SEO优化,则成为了网络营销中的重中之重的一项工作.与其他网站不同,工程机械类的企业网站页面相对较少,产品页面占整个网站页面比例较大.因此在笔者看来,工程机械类的企业网站SEO优化:往往是细节决定成败! 工程机械类的企业网站理当采取树状的网站结构.代码采用DIV+CSS的形式撰写,尽量少用table标签.由于工程机械类的企业站产品较多,每一张产品图片的alt描述是否都一一添加等等诸如此类的代

网站优化做好细节是才是关键

许多草根站长一直抱怨自己的网站关键字排名上不去,网站内容每天更新,而且都是原创内容,外链每天也做得很多,为何关键字排名没一点动静.其实在网站优化中内容与外链是主体,但是细节做不好那也是徒然无功啊!为了让大家明白其中的缘由,本人接下来给大家详细说一下. 第一.网站布局结构 网站布局结构即网站主体架构.网站雏形,在做网站之前先做好主体规划.设计好模型.目前主流设计方式为div+css,因为其可以大大减少网页中不必要的代码,即达到代码优化的目的,增加网页的打开速度,不管是对搜索引擎还是用户都非常友好.

如何让你网站代码优化的更合理

相对SEO而言,大家都知道一个网站在搜索引擎中的排名位置,多 数是取决也这个网站的域名年龄.有效外部链接.内容是否原创等很 多综合问题,对现在的搜索引擎来说,优秀的网站界面不能获得很好 的排名,毕竟,现在,它还没智能到能够在排名的因素中加上网站界 面这一条.如果把网站比喻成博物馆,那么搜索引擎就像是来参观的旅客, 或许这个比喻有点不恰当.一个旅客来参观一个陌生的博物馆,能让 他充分了解这个博物馆信息的并不是博物馆外表的样子,而是博物馆 里收藏的物品,网站就像是这样的,我见过很多网站界面很友好,但