Ich möchte die Web Vitals für meine Website verbessern, insbesondere LCP. Ich habe Probleme, bei denen die Zeit etwa 2,7 Sekunden beträgt (sollte unter 2,5 Sekunden liegen). Von https://web.dev/optimize-lcp:
Genauer gesagt misst LCP die Zeit vom Beginn des Seitenaufrufs durch den Benutzer bis zum Rendern des größten Bildes oder Textblocks innerhalb des Viewports.
Ich habe das Problem auf eine Banner-Theme-Komponente eingegrenzt, die ich geschrieben habe. Ein Bannerbild, das ich als Widget „above-main-container“ einbinde, ist das größte Objekt, das auf praktisch jeder Seite auf den Bildschirm gemalt wird.
Code
<script type="text/discourse-plugin" version="0.8">
const h = require("virtual-dom").h;
api.createWidget("my-banner", {
tagName: "div",
html() {
return h("img.banner-center", {src: settings.banner_image, fetchpriority: "high", style: "aspect-ratio: 925 / 359 ; width: 100%"})
}
});
</script>
<script type="text/x-handlebars" data-template-name="/connectors/above-main-container/banner">
{{mount-widget widget="my-banner"}}
</script>
Ich glaube, Folgendes passiert. Das Div, das das Bild enthält, wird über JS eingebunden. Daher müssen eine Reihe von Voraussetzungen erfüllt sein, wenn eine Discourse-Seite aktualisiert wird, bevor dieser JS-Code ausgeführt wird. Dies führt dazu, dass das Banner nach 2,5 Sekunden abgerufen wird und somit die LCP-Metrik beeinträchtigt.
Ich habe versucht, das Bannerbild mit fetchpriority="high" zu priorisieren, wie im Code zu sehen ist. Aber ich glaube, das behebt nicht das grundlegende Timing-Problem hier.
Haben Sie Vorschläge, wie ich das Rendern dieser speziellen Theme-Komponente priorisieren kann? Wäre es besser, sie in ein Plugin umzuwandeln? Gibt es eine andere Möglichkeit, das Banner so früh wie möglich einzufügen? Danke!
