2 Stimmen

require_once() oder nicht require_once()

Ich baue ein PHP CMS von Grund auf neu auf. Es gibt eine Super-Core-Datei in meinem System, die ich derzeit automatisch importieren lasse todos andere Pakete und Klassen, die den Kern des Systems ausmachen. Auf einer typischen Seite werden nur ein paar dieser Klassen und Methoden verwendet.

Unter Berücksichtigung der Belastung require_once() auf einen Server legt, um all diese Dateien einzuschließen, und die Zeit, die ein Benutzer warten muss, bis die Seite geladen ist, frage ich mich, welchen Weg ich einschlagen sollte:

  1. Behalten Sie den Superkern unverändert bei und schließen Sie automatisch den gesamten Systemkern für jede Seite ein, die diese Kerndatei enthält.
  2. Verwenden Sie den Superkern, um nur wesentliche Pakete, wie z. B. die Datenbankverwaltung, einzuschließen, und importieren Sie zusätzliche Pakete/Klassen je nach Bedarf.

Könnte mir bitte jemand sagen, welche der beiden Optionen die beste ist, und mir einen kurzen Überblick über die Vor- und Nachteile geben?

Vielen Dank für Ihre Zeit!!!

6voto

hakre Punkte 184133

Sie stellen die Frage nach der besten Ladestrategie. Dies ist oft diskutiert im Zusammenhang mit Selbstladern .

Wie bei jeder Strategie gibt es auch hier Vor- und Nachteile. Wenn Sie alle Dateien einbeziehen, können Sie sich den Ärger ersparen, eine zu vergessen. Ein Autoloader hingegen vergisst auch keine Datei.

Sie müssen jedoch nicht immer die eine oder andere Strategie anwenden, sondern können bei der Umsetzung mehrerer Strategien je nach Bedarf wählen. Wenn Sie zum Beispiel Ihr CMS entwickeln, können sich die Dinge oft ändern. Aber wenn das CMS auf einem Server installiert ist, ändert sich diese Version nicht oft.

In der Produktion kann es also von Vorteil sein, alle Kernbibliotheken in einer Datei zusammenzufassen und sie beim Start zu benötigen, je nachdem, wie stark ein Server ausgelastet ist.

Für einen einfachen Weg, eigene Systeme zu bauen, kann ich einen Autoloader vorschlagen. Wenn Sie Ihre Klassen Datei für Datei aufreihen, werden sie automatisch geladen, sobald Sie die Klasse verwenden.

Wenn Sie einen bestimmten Schritt in der Entwicklung erreicht haben, wissen Sie, welche Kerndateien vorhanden sind und welche nicht. Sie können diese dann standardmäßig laden, so dass der Autoloader für sie nicht mehr ausgelöst wird.

3voto

mauris Punkte 41384

Anfang dieses Jahres stieß ich bei der Entwicklung eines Frameworks in PHP auf genau dieses Problem.

Ich habe die Vor- und Nachteile abgewogen, und hier ist meine Bewertung:

Option 1 - Skript "Front Controller Pattern" enthält alle anderen Skripte

Vorteile

  • Das Einbinden von Paketen erfolgt innerhalb eines Skripts; Sie können auf einen Blick sehen, welche Dateien eingebunden sind und welche nicht.
  • Die Einbindung eines bestimmten Pakets wird immer nur einmal aufgerufen, es entsteht kein Overhead.

Benachteiligungen

  • Nehmen wir den Fall eines solchen:

Wir haben zwei Klassen Rectangle y Shape . Rectangle ist eine untergeordnete Klasse, d. h. eine Erweiterung von Shape . Das Kernskript enthält jedoch die Klassen in alphabetischer Reihenfolge. Wenn also Rectangle ist enthalten, Shape wird nicht gefunden und PHP gibt einen Fehler aus.

Rectangle Klasse:

class Rectangle extends Shape{

}

Shape Klasse:

class Shape{

}
  • mehr Overhead, wenn alles, was nicht benötigt wird, ebenfalls in den Speicher geladen wird.

Option 2 - Hauptpakete laden, dann andere Pakete nach Bedarf laden

Vorteile

  • Dateien werden nur dann aufgenommen, wenn sie benötigt werden. Reduziert den Overhead auf andere Weise
  • Löst das in Option 1 genannte Problem.
  • Sie können sich darauf konzentrieren, was jedes Paket von anderen Paketen benötigt, und diese einfach laden

Benachteiligungen

  • Overhead, da mehrere Anfragen für ein bestimmtes Paket auftreten können.
  • Die Aufnahme von Paketen erfolgt in jeder einzelnen Datei.

Programmiercode ist für Menschen. Um die Dinge logischer zu machen und das Problem aufzuschlüsseln, habe ich mich für die Option 2 entschieden, den Rahmen zu nutzen.

2voto

Wesley van Opdorp Punkte 14770

Laden Sie nichts, was Sie nicht benutzen werden. Implementieren Sie eine Autoloader oder vertiefen Sie Ihre require_once's.

Selbst wenn die Leistung vernachlässigbar ist, können Sie mit weniger Dateien schneller Fehler aufspüren und den Ablauf Ihrer Anwendung bestimmen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X