PHP开发中不可不知的技巧

转载 2013年12月01日 22:46:12

原文链接:http://blog.csdn.net/timecolor/article/details/17040755

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开发中不可不知的技巧

1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。 2、$row['id'] 的速度是$row[id]的7倍。 3、echo 比 print 快,并且使用e...
  • wf120355
  • wf120355
  • 2013年11月30日 15:06
  • 1259

《你不可不知的人性》刘墉 读书笔记(一)

2017年,重拾阅读后读完的第一本书。由于脑容量太小,故此写下读书笔记。 此书是在潘家园,两块钱淘来的。九州图书出版社1999年一版一印。略有脱页。分十章,共十万字。每章以小故事为引,之后以故事为例,...
  • luckysiesteven
  • luckysiesteven
  • 2017年02月22日 23:29
  • 1590

创业之初你不可不知的融资知识

2017-01-13   只从前言来看,我就很喜欢这个作者的风格。拿到手后我大概翻阅了一下,写的东西非常详尽细致。这本书我在我的分级中应该是A类的,纯粹的干货,有纲领,有细节,全面。我自己也尝试...
  • cloudqiu
  • cloudqiu
  • 2017年02月10日 14:22
  • 416

从神经网络说起:深度学习初学者不可不知的25个术语和概念

从神经网络说起:深度学习初学者不可不知的25个术语和概念(上)  关键词:大数据 神经网络 来源:网络整理 作者:IOTER 2017-06-11 05:54 人工智能...
  • sallyyoung_sh
  • sallyyoung_sh
  • 2017年06月12日 12:38
  • 319

限时免费不可不知的秘密

此文已在中国最大的苹果开发网站CocoaChina首页推荐! 苹果开发者Mike已在前文免费App的巨大吸引力中,就免费推广策略所针对的用户心理做了初步的分析。用户反正觉得不下白不下,而一旦白用白玩...
  • macdev
  • macdev
  • 2011年04月28日 21:29
  • 432

你不可不知的JSON

XML——这种用于表示客户端与服务器间数据交换有效负载的格式,几乎已经成了Web services的同义词。我们知道AJAX技术能够使得每一次请求更加迅捷,对于每一次请求返回的不是整个页面,也仅仅是所...
  • ful1021
  • ful1021
  • 2014年08月12日 16:26
  • 725

android 开发中不可不知的技巧

作者:jiang111,原文链接:https://github.com/jiang111/awesome-android-tips android 开发中不可不知的技巧 —— 由 New_Tab 分...
  • u011277123
  • u011277123
  • 2016年08月15日 08:58
  • 2049

让PHP开发者事半功倍的十个技巧

如果你掌握了以PHP语言“做事”的方式,那么在使用它时就会得心应手,因此值得你去投入精力去了解这些方式。本文向您介绍十项PHP开发中的技巧,希望对您有所帮助。 【51CTO译...
  • sc19900118
  • sc19900118
  • 2012年04月09日 10:50
  • 573

c#基础这些你都看过吗?(一)-----仅供初学者使用

1、注释(不写注释是流氓,名字瞎起是扯淡) ‘///’一般用于注释函数,注释类。 2、快捷键 ctrl+k+d(有语法错误无法进行对齐) ctrl+j(快速弹出只能提示) shift+end...
  • ztzi321
  • ztzi321
  • 2014年11月16日 21:46
  • 1048

你不可不知的13条法则 【名字哗众取宠了些,其实说的还不错】

一、墨菲定律 墨菲定律:事情如果有变坏的可能,不管这种可能性有多小,它总会发生。比如你衣袋里有两把钥匙,一把是你房间的,一把是汽车的,如果你现在想拿出车钥匙,会发生什么?是的,你往往是拿出了房间钥匙。...
  • freexploit
  • freexploit
  • 2006年02月04日 17:46
  • 1966
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP开发中不可不知的技巧
举报原因:
原因补充:

(最多只允许输入30个字)