Verwendet keine passiven Listener, um die Scrollleistung zu verbessern (Lighthouse Report)

Lesezeit: 4 Minuten

In einem kürzlich erschienenen Lighthouse-Bericht wurde das folgende Problem gemeldet.

Verwendet keine passiven Listener, um die Bildlaufleistung zu verbessern

Erwähnt wird auch…

Erwägen Sie, Ihre Berührungs- und Radereignis-Listener als zu markieren passive um die Scrollleistung Ihrer Seite zu verbessern.

Wie löse ich dieses Problem? Es scheint mit jQuery zusammenzuhängen.

Benutzer-Avatar
Satelier Diego

Zu diesem Thema gab es einen langen Thread in https://github.com/jquery/jquery/issues/2871 im Jahr 2016

Zusamenfassend:

  • jQuery kann keine Unterstützung für passive Listener hinzufügen.
  • Es wird erwartet, dass dies in jQuery 4 hinzugefügt wird (4 Jahre und immer noch in 3.5.x)
  • Die vorgeschlagene Lösung besteht darin, diesen Code direkt nach dem Laden von jQuery hinzuzufügen:

jQuery.event.special.touchstart = {
        setup: function( _, ns, handle ){
            this.addEventListener("touchstart", handle, { passive: true });
        }
    };

UPDATE 2021: Fügen Sie nach jquery den folgenden Code hinzu. Dies behebt das Problem und entfernt die Pagespeed-Warnung

jQuery.event.special.touchstart = {
    setup: function( _, ns, handle ) {
        this.addEventListener("touchstart", handle, { passive: !ns.includes("noPreventDefault") });
    }
};
jQuery.event.special.touchmove = {
    setup: function( _, ns, handle ) {
        this.addEventListener("touchmove", handle, { passive: !ns.includes("noPreventDefault") });
    }
};
jQuery.event.special.wheel = {
    setup: function( _, ns, handle ){
        this.addEventListener("wheel", handle, { passive: true });
    }
};
jQuery.event.special.mousewheel = {
    setup: function( _, ns, handle ){
        this.addEventListener("mousewheel", handle, { passive: true });
    }
};

  • Ich habe dies im script-Tag nach dem script-Tag hinzugefügt, das jquery-3.3.1.min.js hinzufügt. Die Leuchtturmleistung wird noch nicht gesteigert. Hat hier jemand eine Lösung gefunden, um den Bericht “Verwendet keine passiven Zuhörer zur Verbesserung der Bildlaufleistung” tatsächlich loszuwerden?

    – K. Scheich

    2. November 2020 um 14:00 Uhr

  • Ist es das Ziel, den Leuchtturmbericht für Ihren Chef/Kunden gut aussehen zu lassen oder die Seite tatsächlich leistungsfähiger zu machen?

    – Kandiszucker

    5. Dezember 2020 um 19:00 Uhr

  • @squarecandy Ich denke beide Punkte sind für viele Menschen relevant 😉

    – GDY

    18. Dezember 2020 um 12:53 Uhr

  • Ich habe den Code direkt nach dem Laden von jQuery (v3.2.1) hinzugefügt, aber PageSpeed ​​erwähnt immer noch passive Listener

    – stckvrw

    5. Juli 2021 um 8:02 Uhr

  • @escape-llc Das Hinzufügen eines Patches zu Ihrem Projekt und das Testen, um sicherzustellen, dass es in diesem Projekt funktioniert, ist viel weniger kompliziert als das Aktualisieren einer js-Bibliothek, die (buchstäblich) vom halben Internet verwendet wird. Der Issue-Thread aus dem jQuery-Github, der in dieser Antwort verlinkt ist, erklärt, dass eine robuste Lösung eine umfassende Überarbeitung bedeuten würde .on mit bahnbrechenden Änderungen.

    – ian.pvd

    28. Januar um 23:46 Uhr

Das hat den Trick getan!

// Passive event listeners
jQuery.event.special.touchstart = {
    setup: function( _, ns, handle ) {
        this.addEventListener("touchstart", handle, { passive: !ns.includes("noPreventDefault") });
    }
};
jQuery.event.special.touchmove = {
    setup: function( _, ns, handle ) {
        this.addEventListener("touchmove", handle, { passive: !ns.includes("noPreventDefault") });
    }
};

  • Gibt es eine inoffizielle jQuery-Distribution mit diesem Fix? Würde es die Leuchtturmwarnung verhindern?

    – Benutzer1340531

    23. März 2021 um 11:36 Uhr

  • denke du musst die entfernen ! Vor ns.includes

    – Omi

    17. Mai 2021 um 9:32 Uhr

  • verhindert die Leuchtturmwarnung zum Zeitpunkt dieses Kommentars mit jquery 3.6.0

    – entschärft

    19. Januar um 15:03 Uhr

Wie man Ereignis-Listener passiv macht, um die Scrollleistung zu verbessern. So lösen Sie dieses Problem:

  1. Gehen Sie zur Kerndatei des Themas.
  2. Suchen Sie nach header.php oder Sie können ein Plugin verwenden, um Code in den Header einzufügen.
  3. Kopieren Sie den Code und fügen Sie ihn in die Datei header.php ein.
  4. Wenn Sie den Code in header.php verwenden, würde ich Ihnen dringend empfehlen, das öffnende und schließende PHP-Tag zu verwenden.

Geben Sie hier die Bildbeschreibung ein

  <script>!function(e){"function"==typeof define&&define.amd?define(e):e()}(function(){var e,t=["scroll","wheel","touchstart","touchmove","touchenter","touchend","touchleave","mouseout","mouseleave","mouseup","mousedown","mousemove","mouseenter","mousewheel","mouseover"];if(function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}()){var n=EventTarget.prototype.addEventListener;e=n,EventTarget.prototype.addEventListener=function(n,o,r){var i,s="object"==typeof r&&null!==r,u=s?r.capture:r;(r=s?function(e){var t=Object.getOwnPropertyDescriptor(e,"passive");return t&&!0!==t.writable&&void 0===t.set?Object.assign({},e):e}(r):{}).passive=void 0!==(i=r.passive)?i:-1!==t.indexOf(n)&&!0,r.capture=void 0!==u&&u,e.call(this,n,o,r)},EventTarget.prototype.addEventListener._original=e}});</script>

  • Wann hat jemals jemand etwas darüber gesagt, dass dies WordPress ist?

    – Mühlhorn

    1. März um 21:00 Uhr

  • Der Code ist legitim und hat das Problem auf meiner Seite gelöst. Ich habe es einfach nicht zum Header hinzugefügt, ich habe es nur mit anderem js-Code hinzugefügt. Vielen Dank 🙂

    – stiviniii

    28. Juli um 20:08 Uhr

1215440cookie-checkVerwendet keine passiven Listener, um die Scrollleistung zu verbessern (Lighthouse Report)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy