Das native verzögerte Laden von Iframes auf Browserebene ist hier
Das native Lazy Loading für gelandete Bilder in Chrome 76 über Wird geladen
Attribut und dann kam es zu Firefox. Wir freuen uns, das zu teilen
native Lazy Loading für Iframes ist jetzt
standardisiert und es ist auch mit Chrome- und Chromium-Browsern kompatibel.
<iframe src="https://example.com"
Wird geladen="faul"
Breite="600"
Höhe="400"></iframe>
Natives iframe-verzögertes Laden verzögert das Laden von iframes außerhalb des Bildschirms, bis der Benutzer einen Bildlauf in die Nähe von ihnen durchführt. Dies speichert Daten, beschleunigt das Laden anderer Teile der Seite und reduziert die Speichernutzung.
Dies Manifestation von
zeigt verzögertes Laden von Video-Einbettungen:
Warum sollten wir Iframes träge laden?
Einbettungen von Drittanbietern decken eine breite Palette von Anwendungsfällen ab, von Videoplayern bis hin zu Social Media-Posts und Anzeigen. Oft ist dieser Inhalt nicht sofort im Benutzeransichtsfenster sichtbar. Vielmehr wird es nur angezeigt, wenn sie die Seite nach unten scrollen. Trotzdem zahlen Benutzer die Kosten für das Herunterladen von Daten und teurem JavaScript für jeden Frame, auch wenn sie nicht dorthin scrollen.
Basierend auf den Recherchen von Chrome zu iframes außerhalb des Bildschirms wird für Data Saver-Benutzer automatisch verzögert geladenDas verzögerte Laden von Iframes kann zu durchschnittlichen Dateneinsparungen von 2-3%, ersten Farbreduzierungen mit 1-2%-Inhalten im Median und 2%-Verbesserungen bei der Verzögerung der ersten Eingabe (FID) beim 95. Perzentil führen.
Wie funktioniert das native Lazy Loading für Iframes?
das Wird geladen
Mit diesem Attribut kann ein Browser das Laden von Iframes und Bildern vom Bildschirm verschieben, bis Benutzer in die Nähe scrollen. Wird geladen
unterstützt drei Werte:
faul
: ist ein guter Kandidat für faules Laden.eifrig
: kein guter Kandidat für faules Laden. Sofort aufladen.Wagen
: Der Browser ermittelt, ob er faul geladen wird.
Wagen
Es ist derzeit ein nicht standardmäßiger Wert, aber heute ist dies die Standardeinstellung in Chrome. Chrome beabsichtigt, einen Vorschlag für diesen Wert in die Standardtabelle aufzunehmen.
Verwendung der Wird geladen
Das Attribut in iframes funktioniert wie folgt:
<iframe src="https://example.com"
Wird geladen="faul"
Breite="600"
Höhe="400"></iframe>
<iframe src="https://example.com"
Breite="600"
Höhe="400"></iframe>
<iframe src="https://example.com"
Wird geladen="eifrig"
Breite="600"
Höhe="400"></iframe>
Wenn Sie das Attribut überhaupt nicht angeben, hat dies die gleichen Auswirkungen wie das explizite Laden der Ressource mit Begeisterung, mit Ausnahme von Der Lichtmodus
Benutzer, bei denen Chrome die verwenden wird Wagen
Wert, um zu entscheiden, ob es faul geladen werden soll.
Wenn du es brauchst dynamisch Erstellen Sie Iframes über JavaScript und stellen Sie sie ein
iframe.loading = 'faul'
im element ist auch
unterstützt:
var iframe = Dokument.createElement('iframe');
iframe.src = 'https://example.com';
iframe.Wird geladen = 'lazy';
Dokument.Körper.appendChild(iframe);
Iframe-spezifisches verzögertes Ladeverhalten
Das Ladeattribut wirkt sich anders auf Iframes aus als Bilder, je nachdem, ob der Iframe ausgeblendet ist. (Versteckte Iframes werden häufig zu Analyse- oder Kommunikationszwecken verwendet.) Chrome verwendet die folgenden Kriterien, um festzustellen, ob ein Iframe ausgeblendet ist:
- Die Breite und Höhe des Iframes sind
4px
oder weniger. Anzeige: keine
oderSichtbarkeit: versteckt
Es wird angewendet.- Der Iframe wird mit negativer X- oder Y-Positionierung außerhalb des Bildschirms positioniert.
- Dieses Kriterium gilt für beide
Laden = faul
yLaden = Auto
.
Wenn ein Iframe eine dieser Bedingungen erfüllt, betrachtet Chrome ihn als ausgeblendet und lädt ihn in den meisten Fällen nicht verzögert. Nicht ausgeblendete Iframes werden nur geladen, wenn sie sich innerhalb des Ladedistanzschwellenwerts befinden. Chrome zeigt einen Platzhalter für verzögert geladene Iframes an, die noch abgerufen werden.
Welche Auswirkungen könnten wir bei beliebten Iframe-Einbettungen mit verzögertem Laden sehen?
Was wäre, wenn wir das Web im Allgemeinen so ändern könnten, dass die Iframes des verzögerten Ladebildschirms die Standardeinstellung sind? Es würde ein bisschen so aussehen:
Lazy Loading YouTube Video Embeds (spart beim ersten Laden der Seite ~ 500 KB):
<iframe src="https://www.youtube.com/embed/YJGCZCaIZkQ"
Wird geladen="faul"
Breite="560"
Höhe="315"
frameborder="0"
ermöglichen="accelerometer; autoplay;
encrypted-media; gyroscope;
picture-in-picture"
allowfullscreen></iframe>
Anekdote: Als wir zum verzögerten Laden von YouTube-Einbettungen für Chrome.com gewechselt sind, haben wir 10 Sekunden gespart, wie schnell unsere Seiten auf Mobilgeräten interaktiv sein können. Ich habe einen internen Fehler bei YouTube geöffnet, um zu besprechen, wie man etwas hinzufügt
Laden = faul
zu Ihrem Einbettungscode.
Wenn Sie nach effizienteren Möglichkeiten zum Hochladen von YouTube-Einbettungen suchen, sind Sie möglicherweise an der interessiert YouTube Lite-Komponente.
Faules Laden von Instagram-Inserts (spart beim ersten Laden> 100 KB in gzip):
Instagram-Einbettungen bieten einen Markup-Block und ein Skript, die einen Iframe in Ihre Seite einfügen. Durch das verzögerte Laden dieses Iframes muss nicht das gesamte für die Einfügung erforderliche Skript geladen werden. Da solche Einbettungen in den meisten Artikeln häufig unterhalb des Ansichtsfensters angezeigt werden, scheint dies ein vernünftiger Kandidat für das native verzögerte Laden Ihres Iframes zu sein.
Lazify Loading Spotify Embeds (spart beim ersten Laden 514 KB):
<iframe src="https://open.spotify.com/embed/album/1DFixLWuPkv3KT3TnV35m3"
Wird geladen="faul"
Breite="300"
Höhe="380"
frameborder="0"
allowtransparency="wahr"
ermöglichen="encrypted-media"></iframe>
Obwohl die obigen Einbettungen die potenziellen Vorteile des verzögerten Ladens von Iframes für Medieninhalte veranschaulichen, besteht die Möglichkeit, diese Vorteile auch in Anzeigen zu sehen.
Fallstudie: Native Lazy Loading von Facebook Social Plugins
Von Facebook soziale Plugins Ermöglichen Sie Entwicklern, Facebook-Inhalte auf ihren Webseiten einzubetten. Einige dieser Plugins werden angeboten, wie eingebettete Beiträge, Fotos, Videos, Kommentare ... Das beliebteste ist das Als Ergänzung - Eine Schaltfläche, die anzeigt, wer die Seite "gemocht" hat. Standardmäßig werden durch das Einbetten des Like-Plugins in eine Webseite (unter Verwendung des FB JSSDK) ~ 215 KB Ressourcen abgerufen, von denen 197 KB JavaScript sind. In vielen Fällen wird das Plugin möglicherweise am Ende eines Artikels oder am Ende einer Seite angezeigt, sodass das Laden außerhalb des Bildschirms möglicherweise nicht optimal ist.
Dank an Ingenieur Stoyan Stefanov, Alle Facebook Social Plugins unterstützen jetzt das native Laden von iframe Lazy. Entwickler, die sich für das verzögerte Laden über Plugins entscheiden Daten faul
Die Einstellungen können nun das Laden verhindern, bis der Benutzer in der Nähe einen Bildlauf durchführt. Auf diese Weise funktioniert das Einbetten für Benutzer, die es benötigen, weiterhin vollständig, und für diejenigen, die keine Seite nach unten scrollen, werden Dateneinsparungen erzielt. Hoffentlich ist dies die erste von vielen Ergänzungen zur Erforschung des faulen Ladens von nativem Iframe in der Produktion.
Warten Sie, können Browser nicht einfach träge Off-Screen-Iframes automatisch laden?
Sie können es auf jeden Fall. In Chrome 77 hat Chrome die Unterstützung für Bilder außerhalb des Bildschirms und das verzögerte Laden von Iframes nativ hinzugefügt, wenn sich ein Benutzer dafür entschieden hat
Der Lichtmodus
(Datenspeichermodus) in Chrome für Android.
Der Basismodus wird häufig in Regionen der Welt verwendet, in denen die Qualität der Netzwerkverbindung und der Datenpläne nicht die beste ist. Jedes Byte ist wichtig, und daher können faul ladende Iframes für diese Benutzer einen signifikanten Unterschied bewirken.
Origins kann anhand der Option erkennen, wie viel Prozent Ihres Datenverkehrs von Benutzern im Basismodus stammt navigator.connection.saveData
Eigentum, das Teil der ist Netzwerkinformationen
API.
Kann ich Iframes über mehrere Browser hinweg verzögert laden? Ja
Das native Lazy-Laden von Iframes kann als progressive Verbesserung angewendet werden. Unterstützte Browser Laden = faul
In Iframes wird der Iframe faul geladen, während der Wird geladen
Das Attribut wird in Browsern, die es noch nicht unterstützen, ignoriert.
Es ist auch möglich, Off-Screen-Iframes mit der JavaScript-Bibliothek Lazysizes zu laden. Dies kann wünschenswert sein, wenn:
- erfordern mehr benutzerdefinierte Schwellenwerte für das verzögerte Laden, als das native verzögerte Laden derzeit bietet
- Wir möchten den Benutzern eine konsistente Erfahrung beim langsamen Laden von iframe über alle Browser hinweg bieten.
<Skript src="lazysizes.min.js" asynchron></Skript>
<iframe frameborder="0"
Klasse="lazyload"
allowfullscreen=""
Breite="600"
Höhe="400"
data-src="//www.youtube.com/embed/ZfV-aYdU4uE">
</iframe>
Verwenden Sie das folgende Muster, um die Funktion zum verzögerten Laden zu erkennen und verzögerte Größen zu erhalten, wenn diese nicht verfügbar sind:
<iframe frameborder="0"
Klasse="lazyload"
Wird geladen="faul"
allowfullscreen=""
Breite="600"
Höhe="400"
data-src="//www.youtube.com/embed/ZfV-aYdU4uE">
</iframe>
<Skript>
wenn ('loading' im HTMLIFrameElement.prototype) {
const iframes = Dokument.querySelectorAll('iframe[loading="lazy"]');
iframes.forEach(iframe => {
iframe.src = iframe.dataset.src;
});
} else {
const Skript = Dokument.createElement('script');
Skript.src =
'https://cdnjs.cloudflare.com/ajax/libs/lazysizes/5.2.2/lazysizes.min.js';
Dokument.Körper.appendChild(Skript);
}
</Skript>
Eine Option für WordPress-Benutzer
Möglicherweise sind viele Iframes über Jahre verteilt, in denen Inhalte auf einer WordPress-Site veröffentlicht wurden. Optional können Sie Ihrem WordPress-Theme den folgenden Code hinzufügen functions.php
Datei zum automatischen Einfügen Laden = "faul"
zu Ihren vorhandenen Iframes, ohne sie einzeln manuell aktualisieren zu müssen.
Beachten Sie, dass Derzeit wird auch an der nativen Unterstützung für das verzögerte Laden von Iframes im WordPress-Kern gearbeitet. Das folgende Snippet sucht nach den relevanten Flags, sodass WordPress, sobald die Funktionalität integriert ist, die nicht mehr manuell hinzufügt Laden = "faul"
Attribut, um sicherzustellen, dass es mit diesen Änderungen interoperabel ist und nicht zu einem doppelten Attribut führt.
Funktion wp_lazy_load_iframes_polyfill( $content ) {
wenn ( function_exists( 'wp_lazy_loading_enabled' ) && wp_lazy_loading_enabled( 'iframe', 'the_content' ) ) {
Rückkehr $content;
}Rückkehr str_replace( '<iframe ', '<iframe loading="lazy" ', $content );
}
add_filter( 'the_content', 'wp_lazy_load_iframes_polyfill' );
Wenn Ihre WordPress-Site Caching verwendet (Hinweis: sollte es sein), vergessen Sie nicht, den Cache Ihrer Site anschließend neu zu erstellen.
Fazit
Durch das Backen der nativen Unterstützung für das verzögerte Laden von Iframes können Sie die Leistung Ihrer Webseiten erheblich verbessern. Wenn Sie Kommentare zum verzögerten Laden von nativem Iframe haben, können Sie gerne ein Problem an senden Chrome Bug Tracker.
Und falls Sie es verpasst haben, sehen Sie sich die Sammlung von Bildern und Videos zum verzögerten Laden von web.dev an, um weitere Ideen zum faulen Laden zu erhalten.
Wir danken Dom Farolino, Scott Little, Houssein Djirdeh, Simon Pieters, Kayce Basques, Joe Medley und Stoyan Stefanov für ihre Bewertungen.