使用if语句提高php速度

使用if语句提高php速度,php,optimization,Php,Optimization,所以我正在做一个用旧式(无OOP)PHP编写的项目,在不久的将来不会完全重写。目前它的一个问题是速度慢,大部分时间都花在了上,需要根据引导过程中的位置处理100多个文件 我想知道我们是否可以将它(在部署时,当然不是在开发时)压缩成一个或两个文件,其中包含刚刚内置的所有require'd文本。然而,由于有太多的代码行没有用于每个页面,我想知道这样做是否会适得其反 我认为,问题的核心在于: <?php echo 'hello world!'; ?> 比……快吗 <?ph

所以我正在做一个用旧式(无OOP)PHP编写的项目,在不久的将来不会完全重写。目前它的一个问题是速度慢,大部分时间都花在了
上,需要根据引导过程中的位置处理100多个文件

我想知道我们是否可以将它(在部署时,当然不是在开发时)压缩成一个或两个文件,其中包含刚刚内置的所有
require
'd文本。然而,由于有太多的代码行没有用于每个页面,我想知道这样做是否会适得其反

我认为,问题的核心在于:

<?php
   echo 'hello world!';
?>

比……快吗

<?php
   if(FALSE) {
       // thousands of lines of code here
   }
   echo 'hello world!';
?>

如果是的话,要慢多少


(另外,如果出于其他原因,我上面概述的内容是个坏主意,请告诉我。)

请记住,PHP将解析它看到的所有代码,即使它没有运行

处理一个文件也需要相对较长的时间,根据经验,很多代码即使没有执行,也会占用大量内存

@Tim建议的操作码缓存应该是您的第一个调用端口

如果这是不可能的(例如,由于服务器的限制):如果函数在某种程度上可以分为多个类别,那么可以(ab)使用PHP,将函数作为静态类的方法放在单独的文件中

function xyz() {  ... }
将成为

class generic_tools
 {
  public static function xyz() {  ... }
 } 
xyz()
的任何调用都将替换为
generic_tools::xyz()

然后调用将触发按需包含(例如,
generic_tools.class.php
),而不是一次包含所有内容

这将需要将函数调用重写为静态方法调用,这可能非常简单,也可能有点困难(如果函数调用是动态编写的或类似的)。但除此之外,不需要重构,因为您没有真正使用任何OOP机制


这实际上有多大帮助很大程度上取决于应用程序的体系结构以及函数之间的相互交织程度。

请记住,PHP将解析它看到的所有代码,即使它没有运行

处理一个文件也需要相对较长的时间,根据经验,很多代码即使没有执行,也会占用大量内存

@Tim建议的操作码缓存应该是您的第一个调用端口

如果这是不可能的(例如,由于服务器的限制):如果函数在某种程度上可以分为多个类别,那么可以(ab)使用PHP,将函数作为静态类的方法放在单独的文件中

function xyz() {  ... }
将成为

class generic_tools
 {
  public static function xyz() {  ... }
 } 
xyz()
的任何调用都将替换为
generic_tools::xyz()

然后调用将触发按需包含(例如,
generic_tools.class.php
),而不是一次包含所有内容

这将需要将函数调用重写为静态方法调用,这可能非常简单,也可能有点困难(如果函数调用是动态编写的或类似的)。但除此之外,不需要重构,因为您没有真正使用任何OOP机制


这在很大程度上取决于应用程序的体系结构以及功能之间的相互交织程度。

两者之间的差异可以忽略不计。如果当前大部分执行时间都花在需要文件上,那么通过使用optcode缓存,您可能会看到一个显著的提升,比如,如果您还没有这样做的话

除此之外-基准测试,找出瓶颈的确切位置。根据我的经验,Required通常是老式程序化PHP应用程序中最慢的部分,但即使包含了许多文件,如果这些文件加起来都是“慢”的应用程序,我也会感到惊讶

编辑:好的,一个快速的基准测试。我创建了三个“hello world”PHP脚本,如示例所示。第一个(basic.php)只是回显字符串。第二个(complex.php)包含一个if-false语句,其中包含从另一个应用程序粘贴的约5000行php代码。第三个(require.php)包含相同的if语句,但在另一个文件的~5000行代码中是必需的

basic.php和complex.php之间的页面生成时间(由microtime()测量)约为0.000004秒,因此并不显著。apache bench的一些更全面的结果:

without APC with APC req/sec avg (ms) req/sec avg (ms) basic.php: 7819.87 1.277 6960.49 1.437 complex.php: 346.82 2.883 352.12 2.840 require.php: 6819.24 1.446 5995.49 1.668 无APC带APC 请求/秒平均值(毫秒)请求/秒平均值(毫秒) basic.php:7819.87 1.277 6960.49 1.437 complex.php:346.82 2.883 352.12 2.840 require.php:6819.24 1.446 5995.49 1.668
APC在这方面做得不多,但占用了大量内存,但在现实世界的应用程序中可能会出现不同的画面。

两者之间的差异可以忽略不计。如果当前大部分执行时间都花在需要文件上,那么通过使用optcode缓存,您可能会看到一个显著的提升,比如,如果您还没有这样做的话

除此之外-基准测试,找出瓶颈的确切位置。根据我的经验,Required通常是老式程序化PHP应用程序中最慢的部分,但即使包含了许多文件,如果这些文件加起来都是“慢”的应用程序,我也会感到惊讶

编辑:好的,一个快速的基准测试。我创建了三个“hello world”PHP脚本,如示例所示。第一个(basic.php)只是回显字符串。第二个(complex.php)包含一个if-false语句,其中包含从另一个应用程序粘贴的约5000行php代码。第三个(require.php)包含相同的if语句,但在另一个文件的~5000行代码中是必需的

basic.php和complex.php之间的页面生成时间(由microtime()测量)约为0.000004秒,因此并不显著。apache bench的一些更全面的结果:

without APC with APC req/sec avg (ms) req/sec avg (ms) basic.php: 7819.87 1.277 6960.49 1.437 complex.php: 346.82 2.883 352.12 2.840 require.php: 6819.24 1.446 5995.49 1.668