50个PHP程序性能优化的方法

2014-07-07  来源:本站原创  分类:php技巧  人气:1 

程序的执行效率很重要,低的执行效率意味着你需要在服务器硬件上有更多的投入,但是,最终的结果会因为你的程序执行效率低,连硬件也无法解决。下面几十个提高程序执行效率的小知识就有必要了解了解了。

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

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

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

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

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

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

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

8、require_once()代价昂贵。

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

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

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

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

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

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

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

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

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

18、错误消息代价昂贵。

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

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

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

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

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

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

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

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

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

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

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

30、 当操作字符串并需要检验其长度是否满足某种要求时, 你想当然地会使用 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()作为一种语言结构,意味着它 的执行不需要函数查找和字母小写化。 也就是说, 实际上在检验字符串长度的顶层代码中你 没有花太多开销。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相关文章
  • 50个PHP程序性能优化的方法 2014-07-07

    程序的执行效率很重要,低的执行效率意味着你需要在服务器硬件上有更多的投入,但是,最终的结果会因为你的程序执行效率低,连硬件也无法解决.下面几十个提高程序执行效率的小知识就有必要了解了解了. 1. 用单引号代替双引号来包含字符串,这样做会更快一些.因为 PHP 会在双引号包围的 字符串中搜寻变量,单引号则不会,注意:只有 echo 能这么做,它是一种可以把多个字符 串当作参数的"函数"(译注:PHP 手册中说 echo 是语言结构,不是真正的函数,故把函数 加上了双引号). 2.如果能将

  • Google提出Web性能优化新方法--Diffable 2015-04-20

    Google Maps的开发人员Josh和James最近提出并实现了一种Web性能优化新方法--Diffable,即在浏览器加载Web页面时,促使其比较相关文件(Html.JavaScript等)在服务器端和客户端缓存区的版本并只下载差量(Deltas),降低网络下载造成的延迟.本文简要介绍了Diffable方法的背景.原理.优势和实现情况. 背景 众所周知,Google Maps是一款"重量级"的富互联网应用,主要JavaScript文件大小接近300K,而一个平常的补丁更新只有不到

  • [python]用profile协助程序性能优化 2012-05-02

    [python] 用profile协助程序性能优化 上帝说:"选择了脚本,就不要考虑性能."我是很支持这句话的,使用脚本要的就是开发速度.良好的扩展性以及可维护性.可惜到了最后,我们的程序难免会运行得太慢,我们的客户不能忍受,这时候,我们就不得不考虑对代码的性能进行优化了. 程序运行慢的原因有很多,比如存在太多的劣化代码(如在程序中存在大量的"."操作符),但真正的原因往往是比较是一两段设计并不那么良好的不起眼的程序,比如对一序列元素进行自定义的类型转换等.因为程序

  • Java程序性能优化经验总结 2012-10-04

    一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快.例子: import java.util.Vector; class CEL { void method (Vector vector) { for (int i = 0; i < vector.size (); i++) // Violation ; // ... } } 更正: class CEL_fixed { void method

  • asp.net 程序性能优化的七个方面 (c#(或vb.net)程序改进) 2014-11-17

    在我们开发asp.net过程中,需要注意的一些细节,以达到我们优化程序执行效率. 1.使用值类型的ToString方法 在连接字符串时,经常使用"+"号直接将数字添加到字符串中.这种方法虽然简单,也可以得到正确结果,但是由于涉及到不同的数据类型,数字需要通过装箱操作转化为引用类型才可以添加到字符串中.但是装箱操作对性能影响较大,因为在进行这类处理时,将在托管堆中分配一个新的对象,原有的值复制到新创建的对象中. 使用值类型的ToString方法可以避免装箱操作,从而提高应用程序性能. i

  • JAVA程序性能优化 2015-04-11

    一.性能调优概述 性能调优概述本章主要是一些理论性的知识.但是同样非常重要,如果要全面地了解一项技术,全面的理论基础可以让对技术了解更加透彻.主要是了解一些关键词和专业术语. 1.1程序性能的体现 执行速度,处理请求和响应的速度 资源使用,合理的内存使用.合理的CPU占用 启动时间,从运行到可以正常处理业务所需的时间 负载承受能力,系统压力上升时,系统的执行速度.响应时间的上升曲线是否平缓 1.2性能的参考指标 执行时间 CPU时间 内存分配 磁盘吞吐量(I/O) 网络吞吐量 响应时间 1.3可

  • c程序性能优化 2012-07-31

    一段c程序,功能开发完成,开始性能优化. 当然是先用 -pg 编译,再gprof看" 热点"在哪里,很快找到,是计算hash值的函数,于是换了个更快的hash函数--fnv ( http://isthe.com /chongo/tech/comp/fnv/),速度提高了一些.接着把该hash函数 内联(inline),程序又快了一些.内联函数不是解决性能问 题的灵丹妙药,因为inline之后gprof就看不到该函数的调用情况,也就不好找真正的性能瓶颈了. 接着把几个常用 循环中的变量声

  • 关于程序性能优化基础的一些个人总结 2014-07-31

    性能点: I/O,系统调用,并发/锁,内存分配,内存拷贝,函数调用消耗,编译优化,算法 I/O性能优化: I/O性能主要耗费点:系统调用,磁盘读写,网络通讯等 优化点:减少系统调用次数,减少磁盘读写次数,减少阻塞等待 优化手段: a. 使用非阻塞模式 b. 使用带缓存的I/O,减少磁盘读写次数 c. I/O多路复用,select/poll/epoll d. 异步I/O 系统调用: 耗费点:用户态和系统态切换时耗 优化点:减少不必要的系统调用 优化手段: a. I/O操作,根据具体情况,使用std

  • 性能优化攻略 2015-05-03

    为什么程序总是那么慢?它现在到底在干什么?时间都花到哪去了?也许,你经常会抱怨这些问题.如果是这样,那说明你的程序出了性能问题.和功能性问题相比,性能问题在有些情况下,可能并不算太大的问题,将就将就,也就过去了.但是,严重的性能问题会导致程序瘫痪.假死,甚至崩溃. 看懂程序的性能 a.执行速度 程序的反应是否迅速,响应时间是否足够短. b.内存分配 内存分配是否合理,是否过多地消耗内存或者存在泄露. c.启动时间 程序从运行到可以正常处理业务需要花费多少时间. d.负载承受能力 当系统压力上升时

  • SQL Server数据库性能优化技术第1/2页 2014-11-20

    设计1个应用系统似乎并不难,但是要想使系统达到最优化的性能并不是一件容易的事.在开发工具.数据库设计.应 用程序的结构.查询设计.接口选择等方面有多种选择,这取决于特定的应用需求以及开发队伍的技能.本文以SQL Server为例,从后台数据库的角度讨论应用程序性能优化技巧,并且给出了一些有益的建议. 1 数据库设计 要在良好的SQL Server方案中实现最优的性能,最关键的是要有1个很好的数据库设计方案.在实际工作中,许多SQL Server方案往往是由于数据库设计得不好导致性能很差.所以,要

  • C#性能优化 2013-06-12

    性能主要指两个方面:内存消耗和执行速度.性能优化简而言之,就是在不影响系统运行正确性的前提下,使之运行地更快,完成特定功能所需的时间更短. 本文以.NET平台下的控件产品MultiRow为例,描述C#性能优化的实践. 性能优化原则 · 理解需求 MultiRow的一个性能需求是:"百万行数据绑定下平滑滚动."整个MultiRow项目的开发过程一直在考虑这个目标. · 理解瓶颈 99%的性能消耗是由于1%的代码造成的.大部分性能优化都是针对这1%的瓶颈代码进行的.具体实施也就分为两步:&

  • C#性能优化实践 2014-06-11

    性能是考量一个控件产品好坏的重要指标,与产品的功能有着同等重要的地位.用户在选择一款控件产品的时候基本都会亲身试验比较同类产品的性能.作为选购那个控件重要因素之一. 控件的性能指什么 降低内存消耗 在控件开发中,内存消耗一般作为次要的考虑,因为现在的计算机一般都拥有比较大的内存,很多情况下,性能优化的手段就是空间换取时间.但是,并不是说,我们可以肆无忌惮的挥霍内存.如果需要支持在大数据量的用例时,如果内存被耗尽,操作系统会发生频繁的内外存交换.导致执行速度急剧下降. 提升执行速度 加载速度. 特

  • web前端性能优化进阶路 2013-12-08

    Web前端性能优化WPO,相信大多数前端同学都不会陌生,在各自所负责的站点页面中,也都会或多或少的有过一定的技术实践.可以说,这个领域并不缺乏成熟技术理论和技术牛人:例如Yahoo的web站点性能优化黄金法则,以及大名鼎鼎的优化大师Steve Souders.本文并非一篇讨论性能优化技术方法的文章,而更多的是对中文站搜索List页面持续两年多的前端性能优化实践的思路总结.希望对正在从事这个领域研究的前端同学能有所帮助. 简单的说,我们的性能优化实践分为三个阶段:初探期.立规期.创新期, 每个阶段

  • [前端]web前端性能优化进阶路 2013-01-22

    推荐<javascript web富应用开发>一书,第十章里面提到的项目部署,包含全部常见优化技巧.当然只是大纲. 常见性能优化技巧汇总 1.减少HTTP请求的数量 将脚本文件合并,将css文件合并 使用css sprites技术,合并多张小图为一张大图 避免重定向,如http://www.baidu.com/后的/不应该被声调 在script引用代码中,加入defer属性,该脚本将和其他如图片等资源一起并行下载 在script引用代码中,加入async属性,该脚本将在下载完成后等待时间执行,

  • Oracle性能优化图文详解--利用第三方工具 2013-07-17

    开发中或者是正在运行的系统性能显著恶化的场合,需要进行性能优化.当听到性能优化时,有些人可能会感觉到非常困难,如果使用第三方工具的话,通过使用索引或者内存等可以非常简单的进行性能优化.这篇文章将以 Object Browser为例来介绍怎样简单优化数据库性能. 性能优化是什么 EC系统的"3秒钟规则" 假设在EC网站上,访问网站的顾客都必须要等待三秒钟的响应时间,这个时间被称为"3秒钟规则".如果响应时间在三秒钟以上的话,顾客就会认为这个网站服 务慢,有可能会导致商

  • HBase性能优化方法总结 2012-11-29

    本文主要是从HBase应用程序设计与开发的角度,总结几种常用的性能优化方法.有关HBase系统配置级别的优化,这里涉及的不多,这部分可以参考:淘宝Ken Wu同学的博客. 1. 表的设计 1.1 Pre-Creating Regions 默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数据,直到这个region足够大了才进行切分.一种可以加快批量写入速度的方法是通过预先创建一些空的regions,这样当数据写入H

  • 面向程序员的数据库访问性能优化法则 2014-02-11

    面向程序员的数据库访问性能优化法则 特别说明: 1. 本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2. 本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也可以参考,但许多观点不适合于KV数据库或内存数据库或者是基于SSD技术的数据库: 3. 本文未深入数据库优化中最核心的执行计划分析技术. 读者对像: 开发人员:如果你是做数据库开发,那本文的内容非常适合,因为本文是从程序员的角度来谈数据库性能优化. 架构师:如果你已经

  • 提高ASP.NET应用程序性能的10大方法 2014-02-17

    一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的系统具有扩展性,也可以减少数据库服务器响应请求的工作量. 如果你是用动态的SQL语句来返回多个数据集,那我建议你用存储过程来替代动态的SQL语句.是否把业务逻辑写到存储过程中,这个有点争议.但是我认为,把业务逻辑写到存储过程里面可以限制返回结果集的大小,减小网络数据的流量,在逻辑层也不用在过滤数据,

  • 网站前端和后台性能优化的34条宝贵经验和方法 2014-07-19

    网站前端和后台性能优化的34条宝贵经验和方法,相关网页技术人员,需要注意的地方. 1 减少HTTP请求数量 (Minimize HTTP Requests) tag:content 80%的用户响应时间被花费在前端,而这其中的绝大多数时间是用于下载页面中的图片.样式表.脚本以及Flash这些组件.减少这些组件的数量就可以减少展示页面所需的请求数,而这是提高网页响应速度的关键. 朴素的页面设计当然是减少组件的一种途径,但有没有能兼顾丰富的页面内容和快速的响应速度的方法呢?下面就是一些不错的技巧,能

  • 优化php效率,提高php性能的一些方法 2014-08-17

    优化php效率,提高php性能的一些方法,开发php的朋友可以注意下. 1.在可以用file_get_contents替代file.fopen.feof.fgets等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题: 2.尽量的少进行文件操作,虽然PHP的文件操作效率也不低的: 3.优化Select SQL语句,在可能的情况下尽量少的进行Insert.Update操作(在upda