.png)
Welche dieser beiden ist für einen Linux-Server mit Apache einfacher/schneller zu verarbeiten?
A) Ein symbolischer Link, der auf eine PHP-Datei verweist:
file-sym.php ---> file-orig.php
B) Eine PHP-Datei ( file-inc.php
), die eine andere PHP-Datei ( file-orig.php
) einbindet, wie folgt:
Inhalt der Datei-inc.php
<?php
include('file-orig.php');
?>
Neugierig, ob jemand Benchmarks durchgeführt hat!
Antwort1
Mein Bauchgefühl sagt mir, dass der Symlink schneller sein wird, weil Sie beim Verarbeiten des ersten Glieds in dieser Kette weniger Daten lesen müssen. Ich bin mir allerdings nicht sicher, ob es einen großen Unterschied gibt. Vergleichen Sie die beiden, um einen Unterschied zu sehen.
A)
- Datei lesen (unter ext2+ sind symbolische Links im Inode enthalten, daher nur ein Suchvorgang)
- andere Datei lesen
- PHP ausführen
B)
- Datei lesen
- PHP ausführen
- andere Datei lesen
- PHP ausführen
Ich schätze, die include()-Variante ist gut für Windows-Benutzer, da diese auf ihren Systemen keine symbolischen Links haben können.
Antwort2
Viele Administratoren deaktivieren Apache-Symlinks aus Sicherheits- und Leistungsgründen.
Aus Leistungsgründen sehen Sie sich bitte diese Seite zur Apache-Optimierung an:http://httpd.apache.org/docs/2.2/misc/perf-tuning.html
Überall in Ihrem URL-Bereich, wo Sie kein Options FollowSymLinks oder ein Options SymLinksIfOwnerMatch haben, muss Apache zusätzliche Systemaufrufe ausgeben, um Symlinks zu überprüfen. Ein zusätzlicher Aufruf pro Dateinamenkomponente. Wenn Sie beispielsweise Folgendes hätten:
<Directory />
DocumentRoot /www/htdocs
Options SymLinksIfOwnerMatch
</Directory>
und es wird eine Anfrage für die URI /index.html gestellt. Dann führt Apache lstat(2) für /www, /www/htdocs und /www/htdocs/index.html aus. Die Ergebnisse dieser lstats werden nie zwischengespeichert, sie werden also bei jeder einzelnen Anfrage angezeigt.
Sie sehen, dass symbolische Links je nach Umgebung und Code ein exponentielles Leistungsproblem darstellen können.