如果不在我的服务器上安装软件,我该怎么做才能提高PHP脚本的性能/速度?
轮廓.轮廓.轮廓.我不确定PHP是否有任何内容,但编写一个小工具在代码中插入分析信息应该很简单.您需要分析函数时间和SQL查询时间.
所以你有一个功能:
function foo($stuff) { ... return ...; }
我会把它改成:
function foo($stuff) { trace_push_fn('foo'); ... trace_pop_fn('foo'); return ...; }
(这是函数中多次返回成为障碍的情况之一.)
和SQL:
function bar($stuff) { trace_push_fn('bar'); $query = ...; trace_push_sql($query); mysql_query($query); trace_pop_sql($query); trace_pop_fn('bar'); return ...; }
最后,您可以生成程序执行的完整跟踪,并使用各种技术来识别您的瓶颈.
一种可以轻易上架的合理技术是缓存.大量的时间往往会为请求之间(甚至跨客户端)的客户端生成资源; 消除此运行时工作可能会导致速度急剧增加.您可以将生成的资源(或资源片段)转储到Web树外部的文件中,然后在需要时将其读回.显然,需要进行一些分析以确保实际上比再生更快 - 强制Web服务器定期返回磁盘可能是有害的,因此资源确实需要重复使用.
您可能也会惊讶于在编写错误的数据库查询中花了多少时间; 时间常见的生成查询,看看是否可以重写.除非您使用某些次优算法,否则执行实际PHP代码所花费的时间通常非常有限.
这些都不限于PHP,尽管一些PHP"magicy"方法/功能可以过度保护人们不会考虑这些问题.例如,我最近更新了一个脚本,该脚本使用array_search在排序数组上使用二进制搜索,并获得了预期的指数加速.
真正考虑使用XDebug的探查:它有助于检查多少正在对你会预期的执行一定的功能.
我尝试通过在适当时用数组查找替换逻辑来减少指令,同时提高代码可读性.杰夫阿特伍德在[最佳代码根本没有代码]中写道[1].
另外,避免在另一个循环内部循环,并嵌套if/else语句.
功能短.有时,当结果值已知时,不需要执行大量代码.
不必要的测试:
if(count($ array)=== 0)return;
也可以写成:
if(!$ array)返回;
另一个功能呼叫消除了!
[1]:http://www.codinghorror.com/blog/archives/000878.html "最好的代码是根本不会产生代码"
您可以使用两个基本内容优化代码:
浏览https://www.digitalocean.com/community/articles/how-to-optimize-apache-web-server-performance或
您可以使用像xhprof这样的分析工具来查看代码的哪些部分可以通过优化来实现,这里是以下链接:http://michaelsanford.com/compiling-xhprof-for-php-5-4/
您需要安装Netbeans才能使用此插件.以下是您需要遵循的步骤:
1)打开NetBeans,然后从菜单栏工具>插件中选择选项.然后在可用的插件选项卡中搜索插件名称"phpcsmd"并从那里安装它.
2)现在打开终端并输入命令"sudo su"作为超级用户.
3)通过在终端中运行以下命令,将PEAR库(如果未安装)安装到系统中
a) wget http://pear.php.net/go-pear.phar b) php go-pear.phar
因为我们需要这个来安装更多插件.
4)然后运行命令
"pear config-set auto_discover 1"
这将用于设置自动发现所需插件的路径"true".因此,他们可以自动安装到所需的位置.
5)然后运行以下命令安装PHP代码嗅探器.
"pear install --alldeps pear/PHP_CodeSniffer"
6)现在通过运行以下命令来安装PHP Mess Detector
"pear install --alldeps phpmd/PHP_PMD"
如果在安装此模块时收到"无效的包名/包文件"phpmd/PHP_PMD""之类的错误.您需要使用此"pear channel-discover pear.phpmd.org"命令来消除此错误.在此命令之后,您可以再次运行上述命令以安装Mess检测器.
7)现在通过运行以下命令来安装PHP Depend
"pear install --alldeps pdepend/PHP_Depend"
8)现在通过运行以下命令安装PHP Copy Paste Detector
"pear install --alldeps phpunit/phpcpd"
9)然后运行命令
"pear config-set auto_discover 0"
这将用于设置自动发现路径"false".
10)然后打开net beans并按照工具>选项> PHP> PHPCSMD的路径