热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php函数细节_PHP代码优化的53个细节

PHP代码优化的53个细节更新时间:2014年03月03日15:46:10作者:这篇文章主要介绍了PHP代码优化的53个细节,常见而重要的php优化策略

PHP代码优化的53个细节

更新时间:2014年03月03日 15:46:10   作者:

这篇文章主要介绍了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()快&#xff0c;因为与后者不同的是&#xff0c;isset()作为一种语言结构&#xff0c;意味着它的执行不需要函数查找和字母小写化。也就是说&#xff0c;实际上在检验字符串长度的顶层代码中你没有花太多开销。

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

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

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

37、不要把方法细分得过多&#xff0c;仔细想想你真正打算重用的是哪些代码&#xff1f;

38、当你需要时&#xff0c;你总能把代码分解成方法。

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

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

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

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

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

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

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

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

47、循环内部不要声明变量&#xff0c;尤其是大变量&#xff1a;对象(这好像不只是PHP里面要注意的问题吧&#xff1f;)&#xff1b;

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

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

50、foreach效率更高&#xff0c;尽量用foreach代替while和for循环&#xff1b;

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

52、“用i&#43;&#61;1代替i&#61;i&#43;1。符合c/c&#43;&#43;的习惯&#xff0c;效率还高”&#xff1b;

53、对global变量&#xff0c;应该用完就unset()掉&#xff1b;

最后&#xff0c;总结一下常见而重要的php优化策略&#xff1a;

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

二、 在循环里别用函数&#xff0c;例如For($x&#61;0; $x

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

四、 禁止过多的循环套循环&#xff0c;嵌套过多的循环会拉低执行效率

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

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

七、 尽可能的减少变量复制操作。例如&#xff1a;$description &#61; $_POST[&#39;description&#39;];

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

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

十、 开启gzip压缩

相关文章

1a1b05c64693fbf380aa1344a7812747.png

今天小编就为大家分享一篇PHP正则匹配到2个字符串之间的内容方法&#xff0c;具有很好的参考价值&#xff0c;希望对大家有所帮助。一起跟随小编过来看看吧2018-12-12

4f55910a645b073bc4fc65dc10dc14bd.png

php变量的使用方法2008-03-03

0ea3c7666119d5615e582f823fb3fad6.png

这篇文章主要介绍了PHP处理JSON字符串key缺少双引号的解决方法,是非常常见的一类错误处理情况,需要的朋友可以参考下2014-09-09

4f96a78db829b1556ff16de21e013c7a.png

本文给大家简单介绍了PHP中最常用的三种设计模式&#xff1a;单例设计模式、工厂设计模式和观察者设计模式。都是个人的一些经验总结&#xff0c;希望小伙伴们能够喜欢2016-08-08

8cc1031babc6aff2319f1c6af8544aa0.png

这篇文章主要介绍了php常用字符串长度函数strlen()与mb_strlen()用法,结合实例形式分析了php字符串长度函数strlen()与mb_strlen()功能、用法及相关操作注意事项,需要的朋友可以参考下2019-06-06

0c932a99bb7b6f23c937db507070cc7b.png

php Smarty 字符比较代码&#xff0c;需要的朋友可以参考下。2011-02-02

cca732bf65a93ed2ec0ac80c638460fe.png

这篇文章主要为大家详细介绍了使用WAMP搭建PHP本地开发环境的相关资料&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下2017-05-05

2d9f31f2af7b675a3d153d2b7f1035a7.png

生产线上&#xff0c;提升输入员输入效率&#xff0c;在没有购买到Bar code枪之前&#xff0c;需要修改程序&#xff0c;即是说当mouse光标离开TextBox之后&#xff0c;数据自动提交到数据库中2012-11-11

b452cee8ec5cd9e58ab98eba17281e59.png

php tree 无限分类代码&#xff0c;需要的朋友可以参考下。2009-12-12

f4838ec7e2d4da28e0b57d4e852dadd4.png

这篇文章主要为大家详细介绍了两种php文件上传的实现方法&#xff0c;感兴趣的朋友可以参考一下2016-04-04

最新评论



推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
author-avatar
十万个蓝色天空_917
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有