无需在服务器上安装软件,如何提高 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 的某些“神奇”方法/功能可能会过度保护人们免于考虑这些问题。例如,我最近更新了一个使用 array_search 的脚本,对排序数组使用二分搜索,并获得了预期的指数加速。

真正考虑使用 XDebug 分析器:它有助于检查某个函数的执行量是否符合您的预期。

我尝试在适当的时候用数组查找替换逻辑来减少指令,同时提高代码可读性。这是 Jeff Atwood 在 [最好的代码就是根本没有代码][1] 中所写的。

  • 另外,避免在另一个循环内循环,然后嵌套如果/其他语句。
  • 短函数。有时,当已经知道结果值时,不需要执行很多代码。
  • 不必要的测试:

    if (count($array) === 0) 返回;

    也可以写成:

    如果 (!$数组)返回;

    又消除了一个函数调用!

    [1]: http://www.codinghorror.com/blog/archives/000878.html“最好的代码就是根本没有代码”

您可以通过两个基本事项来优化代码:

优化PHP关联库和服务器

经过 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 detector。

7) 现在通过运行以下命令来安装 PHP 依赖项

"pear install --alldeps pdepend/PHP_Depend"

8) 现在通过运行以下命令安装 PHP 复制粘贴检测器

"pear install --alldeps phpunit/phpcpd"

9)然后运行命令

"pear config-set auto_discover 0"

这将用于设置自动发现路径“false”。

10)然后打开net beans并按照路径Tools>Options>PHP>PHPCSMD

没有神奇的解决方案,尝试提供通用解决方案很可能只是浪费时间。

你的瓶颈在哪里?例如,您的脚本是处理器/数据库/内存密集型的吗?

您进行过任何分析吗?

包含文件很慢,而需要它们则更慢。如果您使用 __autoload 来包含每个类,那么这就会增加。例如。

我总是有点担心在代码优化方面过于聪明,因为这会牺牲代码的清晰度。如果您需要使代码变得晦涩难懂以使其更快,那么升级硬件而不是浪费时间尝试调整代码不是更便宜吗?毕竟,处理器周期比程序员周期便宜。

我能想到的那些...

  • 循环不变量 总是一个好观看的好人。

  • 编写e_trict和e_notice符合符合代码的代码,尤其是在记录错误时。

  • 避免使用 @ 运算符。

  • 绝对路径的需求和包括。

  • 使用 strpos、str_replace 等。尽可能代替正则表达式。

还有许多其他方法可能有效,但可能不会给您带来太多好处。

每当我查看性能问题时,我认为最好的办法是计算页面运行的时间,然后查看最慢的页面。当您获得这些真实指标时,通常可以通过修复缓慢的 SQL 查询或稍微收紧代码来将最慢查询的性能提高几个数量级。

这当然不需要新的硬件或特殊的软件,只需要对现有代码进行批判性的关注。

也就是说,这只能持续这么长时间......如果您确实获得了足够的流量来达到硬件的极限,和/或某些代码本质上很慢并且确实需要,那么您将不得不考虑其他可能性。

我负责一个大型报告系统,我们跟踪类似的最慢的报告。当报告开始时,我向数据库触发一个唯一的密钥,然后当报告完成时,我可以确定它花了多长时间。我使用数据库是因为这样我可以检测页面何时超时(这种情况发生的次数比我想要的要多得多)

首先遵循一些其他建议,例如分析和做出良好的资源分配决策,例如缓存。

此外,还要考虑外部资源(例如数据库)的性能。在 MySQL 中你可以检查 慢查询日志 例如。此外,请确保您没有设计数据库并忘记它。优化您的查询(再次为MySQL)针对真实数据可以付出很大的代价。

Rasmus Lerdorf 在他最近的演讲中给出了一些很好的建议“简单即困难“在 FrOSCon '08。如果您正在使用字节码缓存(并且您确实应该使用字节码缓存),则包含路径缺失会造成很大的伤害,因此请优化您的 require/require_once。

您可以使用像 xhprof 这样的分析工具来查看代码的哪些部分可以优化!

1)使用最新版本的PHP

核心团队正在努力提高PHP每个版本的性能。

2)使用字节码缓存

自 PHP 5.5 起,PHP 中添加了一个字节码缓存,名为 OPcache. 。使用 OPcache 可以产生巨大的变化,尤其是从 PHP 7 开始。它在每个 PHP 版本中都得到了改进,甚至可能会得到一个 未来JIT的实施.

3)分析

在开发分析时,您可以深入了解到底发生了什么。这对查找代码中的瓶颈很有帮助。

最常用的工具之一是 XHProf 但不再受到官方支持,并且 PHP >= 7 存在问题。当您想要分析 PHP >= 7 时,另一种选择是 Tideways 这是一个叉子 XHProf.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top