我听说过PHP的一些性能提示,例如根据情况使用strtr()over str_replace()over preg_replace().
至于使用某些功能而不是其他功能和代码风格,您知道哪些性能提示?
编辑:我不是在谈论使用的东西,使代码的可读性,像!isset($foo{5})过strlen($foo) < 5,我说这样的事情使用参看preg_功能在ereg_功能正则表达式.
编辑:我之所以要问这个问题并不是为了挑战何时进行优化,而是为了大致了解在一组有限的替代方案中最有效的方法.例如,检查mysql语句是否返回错误可以说是比开始时抑制错误更好的做法.
Vin*_*ard 36
这个问题真的很模糊.如果要优化脚本,首先要检查数据库并尝试优化算法.没有太多纯粹的PHP性能提示是重要的.让我们来看看 :
连接变量比仅将它们放在双引号标记字符串中更快.
$var = 'Hello ' . $world; // is faster than
$var = "Hello $world"; // or
$var = "Hello {$world}";
Run Code Online (Sandbox Code Playgroud)是的,它更快,但第二和第三种形式更具可读性,速度损失很低甚至无关紧要.
使用循环时,如果条件使用常量,则将其放在循环之前.例如 :
for ($i = 0; $i < count($my_array); $i++)
Run Code Online (Sandbox Code Playgroud)这将每次评估count($ my_array).只需在循环之前创建一个额外的变量,甚至在内部:
for ($i = 0, $count = count($my_array); $i < $count; $i++)
Run Code Online (Sandbox Code Playgroud)
最糟糕的事情肯定是循环内部的查询.要么是因为缺乏知识(试图在PHP中模拟JOIN),要么就是因为你没有考虑它(例如许多插入到循环中).
$query = mysql_query("SELECT id FROM your_table");
while ($row = mysql_fetch_assoc($query)) {
$query2 = mysql_query("SELECT * FROM your_other_table WHERE id = {$row['id']}");
// etc
}
Run Code Online (Sandbox Code Playgroud)永远不要这样做.这是一个简单的INNER JOIN.
可能还有更多,但实际上,不值得将所有这些都写下来.编写代码,稍后进行优化.
PS我没有时就开始写这个答案,链接中可能已经有一些东西了.
编辑:由于某种原因,我无法正确格式化代码.我真的不明白为什么.
alc*_*ado 22
预测优化是所有恶劣的根源
这是您需要的最重要的提示.如果有一天你有一个真正的性能问题,请分析你的应用程序,检测受损区域,然后再来这里再问:)
Roh*_*ude 11
66优化PHP的技巧
以下是韦伯的观点:
与
查看sourceprint?1.if(!isset($ foo {5})){echo"Foo太短"; }调用isset()恰好比strlen()更快,因为与strlen()不同,isset()是一种语言结构,而不是一个函数意味着它的执行不需要函数查找和小写.这意味着在确定字符串长度的实际代码之上几乎没有开销.
正如Reihold Webber指出John Lim发布的一篇文章(发现这篇文章没有在这里复制源代码),然后我进一步调查,这是一个优秀的最佳实践教程,用于优化PHP代码性能,几乎涵盖了低级网络服务器的所有方面配置,PHP配置,编码样式和性能比较.
在cluesheet.com中编写的另一个更好的PHP性能实践是:
Ref - gist.github.com
我访问了其他博客并比较了以上所有要点,并尝试在此处添加所有内容以优化您的PHP代码.
希望这对你有所帮助.
如果您正在寻找有关如何对代码进行编程以获得最佳效果的好技巧,请参阅http://www.phpbench.com/.它们对编程的各个方面进行了大量比较,因此您可以使用最适合您需求的方法.通常,它取决于您是否希望节省处理能力或内存使用量.
http://talks.php.net/show/digg/0 - 由PHP自己提供的关于性能的演讲
http://code.google.com/speed/articles/optimizing-php.html - Google关于如何加快申请速度的建议
最常见的问题不是PHP,而是MySQL或http请求问题.
这可能看起来有点极端,但......
PHP非常慢.这是不可否认的.它是那里最慢的语言之一.如果你真的想要最大的表现,我会在这里停留并使用另一种语言.
您可能不需要最高性能,因为计算机今天往往非常强大,并且可以选择扩展或缓存.随着新版本的发布,PHP也会变得更快,尤其是PHP 7,因此最近声明可能会为您带来免费的性能提升.版本之间的差异可能会使一些微观优化变得毫无意义.
完全违背关于PHP是最慢的语言的陈述,你可能会发现在某些情况下它几乎击败了每种解释语言.这是因为PHP原本是一个非常简单的C包装器,许多PHP函数都包含了C函数,这使得它们非常快.这实际上往往是大多数解释语言的情况,但它在PHP中更加引人注目.
与此相反,一些内置函数可能会出现性能问题,因为它们会尝试执行太多操作或执行不当.我认为直到PHP 7,array_unique以一种非常奇怪且过于复杂的方式实现,而使用诸如array_flip和array_keys之类的东西会更快.
PHP就是这样.它是最令人发指的语言之一,因为它具有一系列极端对立的矛盾属性.它是最不一致但最容易学习的之一.PHP是最糟糕的语言之一,其有机发展比坚持设计更加强大,但它是最高效的语言之一,作为用于Web开发的DSL.当在Apache下运行时,PHP非常难以扩展其中一种最具伸缩性的Web语言.我可以继续,但重点是在PHP方面需要混淆.
抛弃PHP并非没有代价.PHP中的生产力往往比webdev的其他语言高得多,并且入门的标准非常低.
如果你想拥有两全其美的优势,那么只需使你的PHP代码尽可能简单,其目标主要是工作而不是快速.此后的下一步是确保保留良好的日志,以便您可以找到具有最高延迟或占用最多资源的请求.一旦你知道这一点,就可以进行有针对性的分析.可以这样想,你的日志将告诉你要分析的文件或请求,你的分析将告诉你哪些行或代码块很慢.
不要忘记,它通常不是PHP,它很慢或难以扩展,但PHP脚本依赖的其他资源,如数据库.
一般资源监测也很有用.例如,如果您的环境CPU使用率低于5%,为什么要做任何事情,除非延迟出现在某个地方?这也有助于为您提供有关PHP停滞位置的更多提示(瓶颈所在的位置,网络,HDD IO,内存,CPU等).还要记住,今天的硬件确实非常便宜,并且在问题上抛出硬件可能会变得更加有效.这种监测再次允许有针对性的方法.我是一个有硬件有限经验的老人,我可以告诉你,我曾经过早地过早地优化了很多.这将带来良好的回报,但今天却没有.通常情况下,我可以花一个月的时间来优化某些东西,并且以相同的工时成本购买一些硬件,这可能会导致性能提升两倍而不需要付出很多努力.我不会这么做,
一旦找到这些问题区域,您就可以尝试使用更好的PHP或缓存来优化它们.在大多数情况下,这可能就足够了.通常,您可能会发现PHP不是瓶颈,而是数据库访问等其他内容.
如果您发现无法在PHP中进行优化或使用缓存进行优化,则必须考虑其他问题.使用另一种语言是一种选择,当然这里有可能使用C然后将其作为扩展包装在PHP中.一般来说,编写C的代价很高,因此这种方法只允许您在需要的地方使用它,或者更确切地说,只有在您获得最大利益的地方使 这称为热点优化.
除此之外还有许多其他选择,你不需要只包装C,但如果PHP不能这样做,PHP就无法做到.您还可以考虑在多个节点或进程之间进行扩展,但请记住,在某些情况下,由于没有共享(没有很多扩展加载需要共享以获得收益),因此在并行处理时PHP不能很好地扩展.
无论你决定什么,当它归结为它时,我们可以给出关于微优化的1000个技巧.也许是最好的全能之一,我可以给你尝试尽可能多地放入尽可能少的PHP本机函数,因为这些将在C中以更快的速度运行批量操作.在涉及诸如时间复杂性之类的事物的算法设计时,您还应该遵循良好的理论概念,因为这些概念是普遍适用的.事实上,人们可以给你的大多数性能提示可能是一般的编程概念而不是PHP特有的.我还建议避免库膨胀或庞大的框架.他们承诺的越多,就越有可能在现实世界中变得太好.简单是关键,而图书馆总是先思考,
如果使用低于5.5的PHP版本,使用Opcache或APC将立即提高PHP解析时间的速度,并使其成为一个无关紧要的问题.PHP 5.5应该内置它,但要确保它已启用.
关于什么比什么情况更快的事情让成千上万的东西与成千上万的东西相比,所以你最好的选择是研究和学习更多关于PHP实际是什么,它是如何工作的,以及如何测量,测试和分析性能.如果您对PHP的工作原理有很好的了解,那么当它们出现问题时,您将能够更好地解决问题.优化十行代码可以成为一个10000字的辩论.想象一下,当它有数千行代码时,你的应用程序.
在一些情况下,我确实理解先发制人和微观优化的重要性或好处(主要包括避免在性能不成比例地降低的语言中的性能怪癖).然而实际上通常几乎不可能达到你期望的那种收益(尽管我不得不说,如果你真正关心性能,那么你可以拥有的最大影响就是完全放弃PHP,基本上这可以看作是问问如何我可以快速制作一只蜗牛吗?答案是,如果速度如此重要,请使用为此制作的东西).即使是经验丰富且知识渊博的人也可能会遇到困难.几乎没有人第一次就做对了.因此,您真正想要花费精力的是可维护性.保持代码的一致性,整洁性和组织性.使用VCS可以轻松删除内容(不要 注释掉代码或将文件重命名为.old).确保你保持干爽,一般遵循良好做法.TIAS,谷歌等