Frage

Sehr einfache Frage diesmal, grundsätzlich habe ich eine Gruppe von Ordnern und einige von ihnen enthalten Dateien, die ich automatisch laden möchte, wenn ich mein Websites-Skript ausführen möchte.Ich möchte jedoch nicht angeben, welche Dateien automatisch laden, da ich möchte, dass der Prozess dynamisch sein möchte, und ich möchte verschiedene Dateien in der FLY erstellen und löschen. Natürlich ist es natürlich die einfachste Lösung, eine Liste von Ordnern in den Verzeichnissen zu erhalten und die Pfade zu den automatischen Lastdateien zu erstellen, wenn die Dateien vorhanden sind, dann enthält das Skript sie. Aber meine Frage ist, wie viel die Leistung meines Skripts beeinträchtigen?Es ist eigentlich ein Rahmen, den ich später veröffentlichen möchte, so dass die Leistung ziemlich das Problem ist. Irgendwelche Ideen?

War es hilfreich?

Lösung

You should consider simply letting PHP autoload your classes.

If that won't work, then you're pretty much left with the directory-scanning solution, and you shouldn't really care about performance penalties. If you want the functionality, you'll put up with the costs.

Generally you shouldn't stress overmuch about performance in PHP anyways. If it becomes an issue when your framework is complete, revisit it. Chances are you'll find whatever performance gains/losses you incur now are rendered moot by implementing a good caching system in your framework.

See Premature Optimization.

Andere Tipps

It depends on your disk speed, file system, and the size of the directory. No matter what, having to dynamically load the directory to get the list of files will take longer than loading a static list; how much of an increase is acceptable depends on your requirements.

If it's an option, caching that list could help.

Autoloading is great although it's not "free", the performance hit is not noticeable. Of course you can measure this and refactor if needed.

Here's my autoloader:

spl_autoload_register(
    function ($className) {
        $possibilities = array(
            APPLICATION_PATH.'beans'.DIRECTORY_SEPARATOR.$className.'.php',
            APPLICATION_PATH.'controllers'.DIRECTORY_SEPARATOR.$className.'.php',
            APPLICATION_PATH.'helpers'.DIRECTORY_SEPARATOR.$className.'.php',
            APPLICATION_PATH.'models'.DIRECTORY_SEPARATOR.$className.'.php',
            APPLICATION_PATH.'views'.DIRECTORY_SEPARATOR.$className.'.php'
        );
        foreach (explode(PATH_SEPARATOR, ini_get('include_path')) as $k => $v) {
            $possibilities[] = $v.DIRECTORY_SEPARATOR.$className.'.php';
        }
        foreach ($possibilities as $file) {
            if (file_exists($file)) {
                require_once($file);
                return true;
            }
        }
        return false;
    }
);

It depends.

Try your approach and measure. You can always add caching later. Or resort to autoload.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top