PHP需要数千个文件性能问题

时间:2018-01-26 04:04:21

标签: php autoload

当你要动态地需要数百或数千个文件时,我想问一下php性能。

见下面的脚本

[夹]
产品(50个档案)
用户(20个文件)
报告(91个文件)

每个文件夹都有很多文件,但这些文件是类。以下示例

class cls_product_01 {
   public $db;
   function __construct($dbconn){
      $this->db = $dbconn;
   }

   function saveProduct(){
     //PS: the saveproduct.ext.php is a normal code (native approach)
     require __dir__ .'/product/saveproduct.ext.php';
   }

}

我有简单的控制器,它将根据ajax params动态调用类

$newAjaxClass = 'cls_'. $_POST['actionid'];
$newApp = new $newAjaxClass($dbconn);

我想通过循环来要求每个文件夹上的所有ajax文件。 由于存在大量文件,这会减慢网站的速度吗?

PS:由于难以维护以前开发人员的代码,我正在重写此代码。

问题:考虑到这种方法,如果我从一开始加载/需要所有文件,这类似于自动加载,应用程序会变慢,但如果包含大量文件会慢下来我会有点犹豫(吃了很多ram) ) 进行中。特别是我将包括大约300到400个文件组合所有文件夹。

据我所知,使用_autoload可以更轻松,因为它会动态加载依赖项。最大的问题是使用自动加载这些大量的脚本会减慢应用程序的速度吗?有一百个文件,自动加载会占用多少RAM?

2 个答案:

答案 0 :(得分:1)

检查自动加载。 http://php.net/__autoload

基本上,如果你告诉它如何知道在哪里找到文件,给定班级名称,那么你不需要预先要求它们。

答案 1 :(得分:1)

您可以使用spl_autoload_register()

spl_autoload_register(function ($class_name) {
    include $class_name . '.class.php';
});

http://php.net/manual/en/language.oop5.autoload.php

这是延迟加载,因此除非需要,否则它不会预先包含所有文件。

例如,如果您要加载cls_product_01,请致电:

new `cls_product_01();` 

将查找文件cls_product_01.class.php,它将被包含在内。但是你的情况看起来非常麻烦,我认为你真的需要再次考虑你的设计。而且我认为根据用户提供的数据包含文件并不是一个好主意。 [例如$newAjaxClass = 'cls_'. $_POST['actionid'];]

希望它有所帮助。