Room42 schreef op woensdag 8 januari 2020 @ 01:06:
@
gnoe93 ik vind je informatie weinig concreet, tot nu toe. Heb je wat cijfers? Hoeveel megabyte aan Javascript laadt je per page load? Hoeveel libraries gebruik je en welke? Wat zijn de laadtijden precies en hoe verhoudt de CPU zich op dat moment?
Je blijft wat vaag met 'redelijk wat dit' en 'aardig wat dat'. Dus dat helpt niet echt om gefundeerde antwoorden te geven.
Ik had inderdaad beter wat profiling qua performance gedaan op voorhand; ik maakte direct de assumptie dat de hoeveelheid JS de oorzaak van het probleem was. Ik verwachte een makkelijk antwoord op een moeilijke vraag.
Dit zijn de resultaten:
http://i.imgur.com/fk9ODxo.png
http://i.imgur.com/Jps1Eka.png
http://i.imgur.com/txGlt7b.png
http://i.imgur.com/Mc9LrOz.png
http://i.imgur.com/5TYpoKi.png
Ik denk dat ik hier uit kan afleiden dat het grootste probleem de grootte van de DOM is. Als ik de pagina beperkt tot een klein aantal resultaten, is de pagina inderdaad stukken sneller interactief. Het interpreteren/evalueren van JS neemt (slechts?) 23% + 7.7% van de tijd in beslag als ik het goed begrijp.
Het enige dat gedaan wordt bij de page load qua JS, is een hele boel event listeners registreren (hoofdzakelijk jQuery plugins), en een aantal noodzakelijke berekeningen qua window size/breakpoints om bepaalde classes te zetten. Ik gebruik zo weinig mogelijk externe dependencies: jQuery 3.4 en nouislider zijn mijn enige dependencies. De JS bundel is 39.5KB (69.9KB met jQuery er bij totaal). De function call van 15.5% kan genegeerd worden omdat die afkomstig is van LastPass.
Het probleem is dat de meeste HTML absoluut noodzakelijk is. Misschien kan ik gewoonweg de lijst resultaten korter maken en desnoods de resultaten bijhouden in memory om extra roundtrips naar de server te vermijden?
Tsjilp schreef op donderdag 9 januari 2020 @ 10:17:
Heb je je caching ook goed ingericht? Als je de jsfiles eenmaal hebt geladen zouden opvolgende pageloads niet veel vertraging mogen geven. Als ik het zo lees is de initialisatie van je pagina (dus *na* het inladen van de files) te zwaar
En wat Ramon zegt: je haalt je wel wat op de hals als je deze route in gaat...
Alles wordt 1 jaar gecached (max-age=31536000), behalve de gegenereerde HTML (no-store).
dev10 schreef op donderdag 9 januari 2020 @ 10:32:
[...]
Ik heb in een heel ver verleden wel eens iets gedaan met Turbolinks. (
https://github.com/turbolinks/turbolinks) Deze library zorgt voor het gedrag dat jij beschrijft. Belangrijkste waar je op moet letten is dat je de complete javascript bundle van de applicatie in eerste instantie moet laden, maar dat gaat in het algemeen wel goed. Mijn ervaring waren toentertijd wel positief, maar wat de huidige staat is durf ik je echt niet te zeggen omdat ik er al jaren niet meer mee gewerkt heb.
[...]
Daar heb je dus wel libraries voor die dat doen. Zoals hierboven staat werkte dat een aantal jaar geleden prima en dat was toen redelijk plug-and-play.
Turbolinks is exact wat ik in gedachte had!
[
Voor 4% gewijzigd door
gnoe93 op 09-01-2020 21:36
]