Zur Zeit lade ich alle meine Klassen ein, indem ich eine "all.inc.php" -Datei auf jeder Seite meiner Site einfüge. Diese Datei enthält dann alle Configs, Klassen, Funktionen usw., auf denen ich arbeiten werde die ganze Seite.
Mein Problem dabei ist, dass ich oft Klassen verwende, die nur bestimmte Seiten / Bereiche einer Webseite betreffen, so dass ich oft eine Reihe von Klassen am Anfang der Seite einschließe, die nicht verwendet werden.
Offensichtlich würde das Autoloading der Klassen dieses Problem beheben, also ist meine Frage, würde das automatische Laden der Klassen mir einen Performance-Nachteil geben, da der Server dann prüfen muss, ob eine Datei existiert? Und wenn es einen Nachteil gibt, ist dieser Nachteil dann schlimmer als eine Anzahl von Klassen, die nicht auf der Seite verwendet werden können? Oder ist der Unterschied negierbar?
Dieser Artikel enthält einige Informationen und Benchmarks: PHP-Autoload-Leistung . Fazit:
Autoloading beeinträchtigt die Leistung nicht wesentlich. Include_path Nachschlagen, Lesen und Parsen von PHP-Skripten von der Festplatte dauert viel länger als die Kosten für die Autoloading-Logik.
Autoloading verbessert die Leistung, wenn das Skript die Dateien nicht jedes Mal im Dateisystem durchsuchen muss. Wenn Sie Namespaces verwenden, können Sie den Namespace und den Klassennamen in einen Ordner mappen, und eine Datei wie Some / Nice / ClassName würde Some / Nice / ClassName.php zuordnen.
Wenn Sie keine Namespaces verwenden und Ordner durchsuchen müssen, empfehle ich Ihnen, eine benutzerdefinierte Singleton-Klasse zu erstellen, die Dateien enthält, mit denen Sie beispielsweise Folgendes tun können:
App :: verwendet ('Some / Nice', 'ClassName');
In Autoload verwenden Sie den registrierten Pfad und den Klassennamen, um ihn einem Pfad und einer Datei zuzuordnen, die beide Argumente der uses-Methode in meinem Beispiel kombinieren. Dadurch erhalten Sie einige Namespace-ähnliche Funktionen zum Laden von Klassen, bis Sie Ihre App so konfigurieren können, dass sie Namespaces verwendet.
Jede include()
und require()
(und ihre _once
Geschwister) haben eine Leistungseinbuße für sich. Das Suchen und Lesen von Datenträgern hat auch ihren Preis. Es hängt wirklich von deinem Code ab, wenn du 20 Klassen lädst, aber nur 2 oder 3 an einem einzelnen Punkt verwendest, dann ist es definitiv die Autoloading-Route wert.
Wenn die Leistung Ihr Hauptanliegen ist, sollten Sie Ihre Klassendateien in einer einzigen Datei zusammenführen und instanziieren, was Sie brauchen.