I Beschreibung
Wir haben jetzt unseren ersten SW6-Shop auf den Produktionsmodus gesetzt.
Wenn wir jetzt eine Seite des Shops (egal welche) zum ersten Mal aufrufen, beträgt die Ladezeit um die 700 ms - beim zweiten Aufruf ohne Browser-Cache liegt der Aufruf dann bei ca 120-140ms. Auch wenn ich auf zwei komplett unterschiedlichen Geräten dieses Szenario durchführe, ist dieser Effekt zu beobachten. Ich navigiere mit Gerät 1 zur Startseite unseres Shops (700ms Ladezeit) - dann navigiere ich mit einem zweiten Gerät aus einem komplett unabhängigen Netzwerk auf die Startseite und die Seite lädt in 120-140ms.
Bei SW 5 haben wir das gleiche Verhalten festgestellt - erster Aufruf ca. 600 ms und zweiter Auruf ohne Browser-Cache 30-60ms.
Klickt im Shop dann kein Nutzer für etwa eine halbe Stunde eine gewisse Seite an, so beträgt die Ladezeit dieser Seite wieder 600/700 ms für den nächsten Kunden.
Einstellungen:
Shopware 6.2.0
PHP 7.4.7
nginx
OPcache aktiviert
APCu aktiviert
10.3.23-MariaDB
Shopware Http-Cache ist aufgewärmt
-
Kann dieses Verhalten jemand erklären?
-
Liegt das am APCu, der nach einer gewissen geleert wird?
-
Liegt es am Opcache, der nach einer gewissen geleert wird?
-
Liegt es an irgendeinem MariaDB-Cache?
-
Liegt es an eine nginx-Einstellung?
-
Liegt es an der realpath_cache_ttl?
Hier noch ein Auszug wichtiger PHP-Einstellungen - für den SW6-Shop haben wir PHP 7.4.7 mit nginx im Einsatz:
extension=apcu.so
apc.enabled=1
apc.shm_size=256M
opcache.memory_consumption=512
opcache.max_accelerated_files=25000
opcache.max_wasted_percentage=10
opcache.validate_timestamps=0
realpath_cache_size=4096K
realpath_cache_ttl=600
zusätzliche nginx-Settings:
gzip on;
gzip_disable "MSIE [1-6]\\.(?!.*SV1)";
gzip_proxied any;
gzip_comp_level 5;
gzip_types text/plain text/css application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon image/bmp image/svg+xml;
gzip_vary on;
location ~* .(js|jpg|jpeg|gif|webp|png|css|tgz|gz|rar|bz2|doc|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|ttf|woff|woff2|svg)$ {
etag on;
expires 365d;
if_modified_since exact;
add_header Pragma "public";
add_header Cache-Control "max-age=31536000, public";
}
Bisher haben wir keinen Shopware-Shop gesehen, bei welchem dieses Verhalten nicht so nachgestellt werden kann - selbst bei https://store.shopware.com/
Gerne könnt ihr hier auch eure eigenen Erfahrungen teilen, welche Performance-Optimierungen ihr durchgeführt habt.
Eine Erklärung für das oben beschriebene Phänomen wäre klasse - noch besser wäre natürlich eine Lösung, wie die Performance kontinuierlich auf dem Level von 120-140ms Ladezeiten bleibt.
Theoretisch könnte man auch einen Crawler bauen, der alle 15 Minuten die Seiten des Shops besucht - das halte ich aber für ein wenig überzogen und bei Shops mit etlichen Kategorien/Produkten führt das zu einem massiven Overhead - für kleinere Shops sicherlich in Betracht zu ziehen um kontinuierlich eine schnelle Ladezeit gewährleisten zu können.
II Weitere Fragen zum Cache:
Wir haben einen Cronjob eingerichtet über den wir alle 12 Stunden den SW6-Cache neu aufbauen:
php /bin/console dal:refresh:index && php /bin/console cache:clear && php /bin/console cache:warmup && php /bin/console http:cache:warm:up
-
Werden hier auch die Variantenprodukte aufgewärmt?
-
Was ist der Unterschied zwischen cache:warmup (Symfony) und http:cache:warm:up?
-
Warum haben Dateien in /var/cache/prod_hbc8004ac21708e18e6f7c39c9a16f3c2/pools/eB2cM3LwVY/0/H teilweise einen lastmodified-Zeitstempel, der in der Zukunft liegt?
-
Warum befinden sich in /var/cache/ mehrere “prod_” Ordner - manchmal wird nach cache-clear der alte Ordner nicht gelöscht - ist das ein Bug oder bleiben hier nicht geänderte Dateien im alten Cache-Ordner?
Freue mich auf eure Antworten!