-
-
Notifications
You must be signed in to change notification settings - Fork 213
Seitencache und Spracherkennung #7618
Comments
Das ist ein grundsätzliches Problem bei einer nicht unterstützten und damit gecachten Sprache ( |
@dmolineus PR? ;) |
Wenn wir uns im Voraus auf eine Lösung verständigen können, mach ich das. Mein Vorschlag ist folgender:
Dadurch erspart man sich eine Datenbankabfrage beim Laden vom Cache, um die Standardsprache zu ermitteln. Die doppelten Cache-Einträge sind imho zu verschmerzen. |
Woher soll das System denn wissen dass für |
Danke für den Einwand, hatte ich nicht bedacht. Ich seh erstmal keine Möglichkeit ohne Datenbankabfrage dies festzustellen (es sei denn man hat eine Cache-Datei mit allen verfügbaren Sprachen). |
@leofeyer up for discussion-Label? |
Eine Datenbank-Abfrage kommt jedoch beim Laden aus dem Cache keinesfalls in Frage. |
bzw. der Rootseiten Sprach Definition inkl. Fallbacksprache. Dann käme man zumindest für den Fall hier #7650 schon weiter. |
Wir haben heute auf Mumble darüber gesprochen, verstehen aber das Problem nicht so ganz. Könntest Du uns das nochmal erklären bzw. beim nächsten Mumble-Termin mit uns besprechen? |
Es ist das gleiche Problem, wie @amenk in #7650 detaillierter beschrieben hat und hier ja auch verlinkt ist. Doch gern noch einmal konkreter.
Dies tritt auch auf, wenn Accept-Language Header Die Probleme dabei sind:
Der ursprünglich vermutete Zusammenhang mit dem Update auf Contao 3.4 konnte nicht bestätigt werden. Der Fehler wurde jedoch erst durch den massiven Performance-Verlust nach dem Update sichtbar (Ladezeit ~0.9sec gegebüber ~0.35sec davor). Gern erläutere ich es auch bei einem nächsten Mumble-Termin, bin aber zu den 19 Uhr Terminen donnerstags nicht verfügbar. |
Meiner Meinung nach vertust Du Dich in Punkt 2:
Wenn die Primärsprache aus dem Accept-Language-Header |
Ich habe mir den Code nicht angesehen, aber ich bin der Überzeugung die Seite wird unter |
Nein, wird sie nicht. https://github.com/contao/core/blob/master/system/modules/core/classes/FrontendTemplate.php#L204 Wäre auch fahrlässig, da man durch einen gefakten Header den Cache zuspammen könnte. |
Da habt ihr beide Recht. |
Ich denke man sollte wie in #7618 (comment) beschrieben die Root Seiten und Fallback Struktur separat cachen. |
Das nützt nichts, weil wir ja nicht wissen ob es eine Sprache |
Ich dachte jetzt an ein Array, Serialisiert in einer Datei abgelegt in der die Root Seiten und deren Sprachen gecacht werden. So braucht man keine Datenbankabfrage. Ein andere Möglichkeit wird es denke ich nicht geben, denn man braucht ja die Infos über die Fallback Struktur. |
Genau das war auch meine Idee, die ich oben vorgeschlagen hatte. |
Und generell braucht man wohl noch irgendwo ein Stück Code was von de-DE auf de mappt, oder? |
Ein Mapping zwischen de <-> de-DE gäre gut, auch wenn nicht ganz trivial. Angenommen man hat eine Seite mit de-AT und eine mit de-DE stellt sich die Frage auf was de dann gemappt wird. |
Behoben in ed1a73a. Beim Aufbau des internen Cache wird jetzt eine Mapper-Datei angelegt, die bestehende Sprachen plus Fallback-Sprache auf die jeweiligen Cache-Keys mappt. Nur wenn der interne Cache gar nicht aufgebaut ist, fällt der Frontend-Controller auf die bisherige Lösung mit der ersten akzeptierten Sprache zurück. |
@ALL Bitte testen und Feedback geben. |
Ich stimme für Nein. Begründung:
|
@Toflar So einfach ist das nicht.
|
Auf einer Seite, die nur einen Seitenbaum hat und als Sprache Wenn eine Contao Seite von der Cache Funktionalität abhängig ist (warum auch immer) besteht imho eine starke Beeinträchtigung. |
Es geht ja nicht um die Frage ob's ein Bug ist oder nicht. Selbstverständlich ist es einer und wenn es ein Bug ist dann beeinflusst der selbstverständlich auch die Funktionalität. Ist doch logisch. Ich hab nur gesagt er beeinträchtigt die Funktionalität von Contao nicht wesentlich weil es keinen Grund gibt, warum der Cache auf die Funktionsweise einen Einfluss haben sollte. Er reduziert nur Server- und/oder Bandwidth-Load. |
Ja ok, verstehe. Würde auch verstehen, wenn dieser Fix letztendlich auch erst in der nächsten LTS version auftaucht (wie von leofeyer erwähnt). |
Nicht ganz, das trifft natürlich nur auf die Startseite zu (ev. nur falls diese ein Alias |
Fände auch dass das in die 3.5 sollte. Es ist nicht wirklich ein Bug, sondern ein known limitation (siehe #7650) |
Ah ok, da hab ich wohl zu wenig getestet :) |
Auf die Funktionsweise nicht, auf die wahrgenommene Performance jedoch schon. Gerade wenn man auf der Startseite ein weniger perfomantes Contao Modul einsetzt (Events-Modul mit > 5000 Events), hat man schnell Ladezeiten, die wenig erfreulich sind. |
Das ist richtig. Das wäre dann aber, wie gesagt, der Speed und nicht die Funktionsweise :-) |
Für mich wäre 3.5 auch in Ordnung. In den Projekten, wo dies ein Problem war, läuft eh seit längerem ein Workaround, sodass das Problem dort nicht mehr relevant ist. |
Hab die Änderungen in der 3.4 zurückgenommen und nach 3.5 portiert. |
@dmolineus : wie sieht dieser workaround aus? wäre vielleicht auch für andere interessant |
@fritzmg Dieser Workaround macht nichts anderes, als über den public function hookGetCacheKey($cacheKey)
{
if (\Environment::get('request') === '' || \Environment::get('request') === 'index.php') {
$cacheKey = 'empty.de-DE';
}
return $cacheKey;
} Wenn man mehrere Sprachen hat, müsste man hier halt das Mapping zwischen den 2 und 5 Zeichen Sprache-Codes und auf die Fallback-Sprache mit implementieren. |
There is still a bug in this issue! See #7909. |
This is still a problem in Contao 3.5.25 (see https://community.contao.org/de/showthread.php?66351-Startseite-nicht-im-Seitencache for example). Reproduction
|
This is due to the fact, that Contao will search for a cache key that consists of However, since this only happens, when the internal cache is not active (after applying #8695), I consider this not much of an issue. You are unlikely to not use the internal cache in the productive environment. |
Nach dem Update von einer Contao-Installation 3.3.7 auf 3.4.3 funktionierte der Seiten-Cache nicht mehr. Nach einigen Debuggen fiel mir auf, dass Contao nun die Seite mit "de-DE" cachte, in den Seiteneinstellungen jedoch das Sprachkürzel "de" hinterlegt war.
Daher hat Contao die Seite nicht aus dem Cache geladen obwohl die Seite auch als Sprachenfallback arbeitet.
Durch die Umstellung in den Seiteneinstellungen besteht jedoch das Problem, dass ein Browser, der lediglich ein "de" als Accept-Language sendet, wieder eine ungecachte Seite lädt.
The text was updated successfully, but these errors were encountered: