Das KOSTENLOSE Pagespeed-Optimierungsskript für den letzten Ausweg

Beschleunigen Sie Ihre nicht reparierbare Seite mit dieser Methode des letzten Auswegs, um selbst die langsamsten Seiten zu verbessern

Arjen Karel Core Web Vitals Consultant
Arjen Karel - linkedin
Last update: 2026-03-07

Das KOSTENLOSE Pagespeed-Optimierungsskript für den letzten Ausweg

Manchmal stoße ich als Core Web Vitals-Berater auf eine nicht reparierbare Seite. Es ist nicht so, dass sie nicht repariert werden kann, weil ich nicht weiß, wie! Nein, sie ist nicht reparierbar, weil die Behebung bedeuten würde, große Teile einer Website neu zu schreiben, die bereits ersetzt werden soll. Oder manchmal, wenn es einfach nicht genug Zugriff und Kontrolle gibt, um den Code der Website zu verbessern, wie man es bei geschlosseneren CMS-Systemen wie WIX, HubSpot, WebFlow usw. sieht. Oder letztendlich, wenn das Budget einfach nicht vorhanden ist. Es passiert nicht oft, aber manchmal können Kunden die Menge der Arbeit, die erledigt und bezahlt werden muss, nicht genau vorhersagen.

Zuletzt überprüft von Arjen Karel im März 2026

Wir stellen vor: "Das Pagespeed-Optimierungsskript für den letzten Ausweg"

Wenn Sie sich in dieser schwierigen Lage befinden, ist dieses Skript Ihr verzweifelter letzter Versuch, den Pagespeed zumindest ein wenig zu verbessern, bis Sie etwas Besseres entwickeln können. Es funktioniert clever, indem es den Mutation Observer verwendet. Das Skript überwacht die Erstellung des Document Object Models Ihrer Website durch den Browser und fängt langsamen Code sofort ab und ersetzt ihn durch schnelleren Code.

Was es tut:

  • Fängt alle renderblockierenden Skripte ab und verschiebt sie (defer), indem der Typ des Skripts auf type="module". geändert wird. Dieser Trick nutzt die Tatsache, dass alle modularen Skripte standardmäßig verzögert werden. Sogar Inline-Skripte. Dies macht dies zur sichersten Methode, um alle Seitenskripte aufzuschieben.
  • Lazy Loading von Bildern: loading="lazy" und decoding="async" wird zu allen Bildern hinzugefügt. Dadurch wird das Laden dieser Bilder aufgeschoben, bis sie fast im sichtbaren Viewport sind, zusammen mit asynchronen Aktualisierungen des Bildlayouts. Seien Sie vorsichtig: Sie möchten Ihr LCP-Bild nicht "lazy" laden. Verwenden Sie die Konfiguration prioImgs, um es auszuschließen. Lesen Sie, warum das Lazy Loading des LCP-Bildes der Performance schadet.
  • Lazy Load von iFrames. Wie bei Bildern kann das Lazy Loading von iFrames Ihren eigenen, wichtigeren Content priorisieren!

Konfiguration

Das Skript nimmt ein einzelnes "Konfigurationsobjekt" entgegen und verwendet diese Konfiguration, um das Aufschieben oder Lazy Loading wichtiger Bilder und Skripte zu überspringen. Bei iFrames funktioniert es umgekehrt, es lädt nur die iFrames "lazy", die mit Ihrer Konfiguration übereinstimmen. Alle Konfigurationen werden als regulärer Ausdruck bereitgestellt. Das mag beängstigend klingen, aber in der Praxis ist es wirklich einfach.

  • prioScripts: Überspringt das Aufschieben von Skripten, bei denen die src mit der Konfiguration übereinstimmt.
    Beispiel: 'jquery|menu' stimmt mit Ihrem jQuery- und Ihrem Menü-Skript überein
  • prioImgs: Überspringt das Lazy Loading für alle Bilder, bei denen der Bildname, die Bildklasse oder die Bild-ID übereinstimmen.
    Beispiel: 'hero' stimmt sowohl mit <img id="hero" ..> als auch mit <img src="hero.jpg"> überein
  • lazyFrames: Lädt nur iFrames "lazy", bei denen die iFrame-src mit der Konfiguration übereinstimmt.
    Beispiel: 'youtube|maps' lädt alle YouTube- und Google Maps-iFrames "lazy".

Nutzung

Bearbeiten Sie einfach die Konfiguration, damit sie den Anforderungen Ihrer Website entspricht, und fügen Sie sie als Allererstes in den Head der Seite ein. Denken Sie daran: Das Skript kann Probleme nur beheben, nachdem es gefunden wurde. Je tiefer Sie es also im Head der Seite platzieren, desto weniger effektiv wird es sein!

Einschränkungen

Wie ich bereits erwähnt habe, sollten Sie dieses Skript wirklich nicht als Ihre Hauptlösung verwenden, um Ihren Pagespeed zu reparieren. Nur wenn alles andere fehlschlägt, während Sie aktiv an einer neuen Site arbeiten, ist eine solche Lösung akzeptabel!
Technisch ausgedrückt liefert sich dieses Skript ein Wettrennen mit dem Browser (und dem Preload-Scanner), sodass nicht vorhersehbar ist, welche langsamen Elemente bereits zum Download ausgelöst wurden, bevor das Skript aktiviert wird.

Das Pagespeed-Optimierungsskript für den letzten Ausweg

Hier ist eine minifizierte Version, die in der Produktion verwendet werden sollte

!function(t){['prioScripts', 'prioImgs', 'lazyFrames'].forEach(e=>{t[e]=t[e]?RegExp(t[e],"i"):null});let e=new MutationObserver(e=>{e.forEach(({addedNodes:e})=>{e.forEach(e=>{if(1===e.nodeType)switch(e.tagName){case"SCRIPT":if(!t.prioScripts||!t.prioScripts.test(e.src)){let t=e.getAttribute("type");t&&"text/javascript"!==t||e.setAttribute("type","module")}break;case"IMG":console.log(e.outerHTML),t.prioImgs&&(t.prioImgs.test(e.outerHTML)||e.getAttribute("loading"))||(e.setAttribute("loading","lazy"),e.setAttribute("decoding","async"));break;case"IFRAME":t.lazyFrames.test(e.src)&&e.setAttribute("loading","lazy")}})})});/MSIE|Trident/.test(navigator.userAgent)||(e.observe(document.documentElement,{childList:!0,subtree:!0}),document.addEventListener("DOMContentLoaded",()=>{e.disconnect()}))}({prioScripts:"jquery",prioImgs:"hero",lazyFrames:"youtube|maps"});

Hier ist eine besser lesbare Version des Skripts. Verwenden Sie diese nicht in der Produktion! Verwenden Sie die minifizierte Version!

!function (cfg) {\r\n\r\n    // Regexify config or nullify\r\n    ['prioScripts', 'prioImgs', 'lazyFrames'].forEach((e) => {\r\n        cfg[e] = cfg[e] ? new RegExp(cfg[e], "i") : null;\r\n    });\r\n\r\n    t0 = performance.now();\r\n\r\n    /* Watch mutated nodes */\r\n    const mutator = new MutationObserver((e) => {\r\n        e.forEach(({ addedNodes: e }) => {\r\n            e.forEach((e) => {\r\n                switch (e.nodeType) {\r\n                    case 1:\r\n                        switch (e.tagName) {\r\n                            // defer scripts by adding type="module", excusive test on src\r\n                            case "SCRIPT":\r\n                                if (!cfg.prioScripts || !cfg.prioScripts.test(e.src)) {\r\n                                    let type = e.getAttribute("type");\r\n                                    if (!type || type === "text/javascript") {\r\n                                        e.setAttribute("type", "module");\r\n                                    }\r\n                                }\r\n                                break;\r\n\r\n                            // lazy load images, excusive test on outerHTML for classname, id etc etc\r\n                            case "IMG":\r\n                                console.log(e.outerHTML);\r\n                                if (!cfg.prioImgs || (!cfg.prioImgs.test(e.outerHTML) && !e.getAttribute("loading"))) {\r\n                                    e.setAttribute("loading", "lazy");\r\n                                    e.setAttribute("decoding", "async");\r\n                                }\r\n                                break;\r\n\r\n                            // lazy load iframes, inclusive test on src\r\n                            case "IFRAME":\r\n                                if (cfg.lazyFrames.test(e.src)) {\r\n                                    e.setAttribute("loading", "lazy");\r\n                                }\r\n                                break;\r\n                        }\r\n                        break;\r\n                }\r\n            });\r\n        });\r\n    });\r\n\r\n\r\n    // Check for IE\r\n    if (!/MSIE|Trident/.test(navigator.userAgent)) {\r\n        mutator.observe(document.documentElement, { childList: true, subtree: true });\r\n        document.addEventListener("DOMContentLoaded", () => {\r\n            mutator.disconnect();\r\n            console.log("I quit after watching for " + (performance.now() - t0) + " ms");\r\n        });\r\n    }\r\n}({\r\n    prioScripts: 'jquery',\r\n    prioImgs: 'hero',\r\n    lazyFrames: 'youtube|maps',\r\n});\r\n\r\n\r\n

About the author

Arjen Karel is a web performance consultant and the creator of CoreDash, a Real User Monitoring platform that tracks Core Web Vitals data across hundreds of sites. He also built the Core Web Vitals Visualizer Chrome extension. He has helped clients achieve passing Core Web Vitals scores on over 925,000 mobile URLs.

Performance degrades unless you guard it.

I do not just fix the metrics. I set up the monitoring, the budgets, and the processes so your team keeps them green after I leave.

Start the Engagement
Das KOSTENLOSE Pagespeed-Optimierungsskript für den letzten AuswegCore Web Vitals Das KOSTENLOSE Pagespeed-Optimierungsskript für den letzten Ausweg