SymLinks vs. PHP Includes (Leistung)

SymLinks vs. PHP Includes (Leistung)

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)

  1. Datei lesen (unter ext2+ sind symbolische Links im Inode enthalten, daher nur ein Suchvorgang)
  2. andere Datei lesen
  3. PHP ausführen

B)

  1. Datei lesen
  2. PHP ausführen
  3. andere Datei lesen
  4. 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.

verwandte Informationen