ich habe bei der Optimierung eines größeren Projekts die Ladezeit von über 5 Sekunden auf ca. 1 Sekunde reduzieren können, einfach nur indem open_basedir deaktiviert wurde!
Das stellte ich fest, als Tideways mir anzeigte dass 50% der Ladezeit (TTFB) nur für File I/O investiert wurde. Hauptsächlich für „is_readable()“, „file_exists“ usw. Die meisten Abfragen fanden zentral in der Klasse „Enlight_Loader“ statt.
Dort habe ich dann zum Test einen rudimentären Cache und kleine Optimierungen eingebaut und konnte damit die Ladezeit schon auf 2 Sekunden reduzieren.
Im weiteren Verlauf habe ich rausgefunden, dass alle Abfragen wie file_exists() von PHP gecached werden, aber NUR wenn open_basedir inaktiv ist.
Dieser Bug ist dokumentiert: https://bugs.php.net/bug.php?id=77406
In Enlight/Loader fanden insg. 30.000 Abfragen per file_exists(), is_readable() oder is_dir() statt und ohne Cache hat sich das sehr negativ bemerkbar gemacht.
Jetzt lädt die Seite im Schnitt in einer Sekunde!
Ich werde jetzt bei allen Projekten darauf achten, dass „open_basedir“ möglichst inaktiv ist.
Wenn man nicht auf open_basedir verzichten kann, dem sei diese Extension angeraten:
Ich betreue ein System, das auch deutlich langsamer war, als alle anderen Systeme, die ich so kenne. Die Ladezeiten waren unterirdisch. Auch hier hat die Abschaltung von open_basedir einen enormen Geschwindigkeitsboost gebracht. Allerdings kenne ich etliche Systeme, die trotz open_basedir sehr schnell sind. Ich glaube, dass die Abschaltung nur dort ein Muss ist, wo die Performance deutlich schlechter ist, als sie eigentlich sein sollte.
Die Performance war bei einem HighTraffic-Shop mit aktiviertem open_basedir mehr.als.unterirdisch (insbesondere nach Update auf SW 5.6).
open_basedir = none hat im wahrsten Sinne die Rakete gezündet, ich kann es immer noch nicht ganz fassen (tideways von über 5 Sekunden auf ~500ms!)
Mal sehen, was der Hoster dazu meint. Ich verstehe schon den Zusammenhang mit dem realpath cache, aber so ganz klar ist mir nicht, dass das Problem
entweder nicht viel häufiger auftritt (und somit auch bekannter sein müsste!) oder eben eine ganz spezifische Konstellation im Shop dazu führt.
Oder alle Shops mit wirklich Traffic haben das ohnehin auf “none” stehen?