Closed staabm closed 7 years ago
Gerade mal einen Test mit array_unique
auf der Website gemacht, auf der der Speicherüberlauf passiert ist.
Items: 8481
Items nach array_unique
: 1341
Speicher verbraucht: 528440 bytes
Ist jetzt nicht so wild, oder? Sollten wir den Code wie von @staabm beschrieben anpassen oder lieber so lassen?
Oh, spannend: Wenn man hingegen den kompletten Flow trackt, also vom Beginn aller Queries über das Befüllen des Arrays und der späteren Filterung, ist der Speicherverbrauch etwa so:
Vorher: ~5 MB Nachher: ~1,8 MB
Das spricht deutlich für Markus’ Anpassung, was? Vor allem, weil sie blitzschnell gemacht ist.
Sorry, doch nicht. Hatte versehentlich die Prüfungen auf $media->isImage()
ausgeklammert, und das war leider der wesentliche Faktor, der den Speicher so sehr reduziert hat. Kommt die Prüfung wieder rein, ergibt sich leider kein merklicher Unterschied zwischen der Vorher-Variante und der Nachher-Variante. Beide benötigen ~5 MB.
Entschuldigt bitte, dass ich mir hier einen Wolf schreibe, aber: Verwirft man die Mediainstanz nach jeder Prüfung mittels rex_media::clearInstance($item);
, schrumpft der Speicherverbrauch in beiden Varianten auf besagte ~1,8 MB. 🎉
(Siehe Kommentar von @gharlan in https://github.com/FriendsOfREDAXO/cache_warmup/commit/541f1daa04e07d82e98cc5ee5526f269f162cdd6#commitcomment-20528983)
Dann weg mit den instanzen :-)
Sobald wir erstmal an einem punkte sind wo es für große installation gut funktioniert brauch man ja nicht dann jede kleinigkeit ändern.
Wg instance pool wuerd ich noch reinmachen und sonst nur wirklich gut messbares
Finde ich auch. Instanzen kommen morgen rein und dann gibt’s ein neues Release.
WONTFIX, hat aber viele Erkenntnisse gebracht. Danke! :)
aktuell arbeiten wir in https://github.com/FriendsOfREDAXO/cache_warmup/blob/master/lib/selector.php mit einem array was gefüllt wird und am ende mittels
array_unique()
duplikate entfernt werden.array_unique
auf große arrays ist speicheritensiv.-> anstatt die array values zu füllen könnte man auch mit keys arbeiten, da sich diese autom. überschreiben und so erst gar keine duplikate entstehen. Ob es was bringt muss man natürlich ausprobieren ;-).
IST-Beispiel (https://3v4l.org/JeUEg):
Vorschlag-Beispiel (https://3v4l.org/JMRcJ):