PHP: 要求/包含 vs 自动加载程序

分享于 

4分钟阅读

Web开发

  繁體

在处理大量的交通时,谷歌长时间内深入了我大脑的重要性。

在本文中,我将演示一种非常简单的方法来提高PHP网站的性能。 它看起来跟"旧学校"的PHP文本的粒度不一样,但结果是令人难以置信的 ! 通过删除 requireinclude的使用并替换为 spl_autoload_register 函数,节省的时间超过 10倍 !

不仅如此,在理论上,它的代码行少 !

首先,让我们创建三个包含空类定义的基本PHP文件。 它们被称为:class1.php,class2.php。 我已经将它们分组在一个代码清单中,但它们应该是三个单独的文件:

<?phpclass Class1 {
}?><?phpclass Class2 {
}?><?phpclass Class3 {
}?>

现在我将创建两个类似的文件。 这些文件只是在 for 循环中创建了三个新类。 我称为 require.php的第一个文件:

<?php$start = microtime();
 for ($x = 0; $x <500; $x++) {
require_once 'class1.php';
require_once 'class2.php';
require_once 'class3.php';
 $class1 = new Class1();$class2 = new Class2();$class3 = new Class3();
}
 $end = microtime();?><hr/>Execution Time: <?php echo ($end - $start) ;?> seconds.

第二个文件称为 autoloader.php:

<?php$start = microtime();
spl_autoload_register('autoload');
 for ($x = 0; $x <500; $x++) {$class1 = new Class1();$class2 = new Class2();$class3 = new Class3();
}
 $end = microtime();?><hr/>Execution Time: <?php echo ($end - $start) ;?> seconds.
 <?php/**
* Loads a class.
* @param string $className The name of the class to load.
*/function autoload($className) {
require_once strtolower($className). '.php';
}

正如你可以能注意到的,唯一的差别在于这个文件的顶部,调用 spl_autoload_register 来告诉PHP如何加载类。 在这个场景中,我告诉它调用 autoload 函数。 这里函数在类名称上执行小写,并要求文件。

注意,需要注意的是,一致的名称约定需要自动加载类。 否则,可以使用一个类和 static array 来将所有类名与相应的文件相关联,使用它的他方法。

现在,我已经在Git上创建并发布了一个速度测试器: https://github.com/endyourif/speedtester

使用这个应用程序,我运行了两次,每页 100次。 应用完成后,它将删除最高和最低的时间,然后计算平均值。

准备 be。

require.php 文件的平均运行时间为 7毫秒。

滚动滚筒? !

autoloader.php 文件的平均运行时间为 1毫秒。

但是,这是因为在本地运行,没有实际处理,因此,如果在这种情况下,有 7倍的速度提高 !

摘要

在 require.php 文件中,你可能会注意到,我在 for 循环中执行了 require_once。 显然,这不是应该如何开发的。 这里的思想是,在典型的代码中,当有多个文件包括和引用时,就会尝试多次包含同一个文件。

正如上面演示的那样,当PHP检查该文件是否已经加载和存在时,性能会显著降低。

要下载上示例中的文件,请在这里查看我的Git repo: https://github.com/endyourif/RequireVsAutloader


相关文章