web-dev-qa-db-fra.com

Empêcher YouTube de charger plusieurs instances du lecteur JS?

J'ai remarqué sur de nombreux sites WordPress sur lesquels je travaille que lorsqu'il y a plus d'une vidéo YouTube intégrée, plusieurs instances du lecteur JS seront appelées.

Puisqu'il s'agit d'un mégaoctet de données, j'essaie de déterminer s'il existe un moyen de ne charger qu'une seule instance du JS. J'aurais pensé que la deuxième instance (ou plus) est redondante.

Voici ce qui est chargé deux fois, pour une page WP avec deux vidéos incorporées.

https://s.ytimg.com/yts/jsbin/player-en_US-vfle0WwUC/base.js (1.0MiB)

Je n'ai pu trouver aucune information à ce sujet, ce qui est un peu surprenant car je pensais que ce serait un problème que beaucoup de gens voudraient résoudre.

Aucune suggestion?

2
omega33

En théorie, l’incorporation de youtube se fait comme des iframes, et les iframe sont des pages virtuelles additionnelles indépendantes / qui sont affichées dans la même fenêtre. Par conséquent, le contenu d’un iframe ne peut pas avoir d’impact sur les autres iframes.

En pratique, ces JS seront mis en cache dans le navigateur. Le premier peut être chargé, mais le second (à moins que quelqu'un dans Google ait eu un grand moment) sera "servi" à partir du cache du navigateur.

répondre directement à la question - il n'y a pas grand chose qui puisse être fait du côté de wordpress pour l'éviter, et très probablement il n'y a rien à faire

3
Mark Kaplun

Google I/O 2011: l'iframe Player de YouTube: l'avenir de l'intégration vous racontera tout sur l'avenir du passé. Vous pourrez peut-être trouver une alternative à iFrame dans la section Développeur YouTube mais je regarderais cette vidéo en premier pour savoir pourquoi ils avaient choisi un iframe.

Le plus souvent, les actifs statiques tels que les fichiers JS sont mis en cache par votre navigateur. Cela signifie que les futures requêtes seront extraites du cache de votre navigateur plutôt que de récupérer une nouvelle copie. Il y a quelque chose appelé un TTL (Time to Live) écrit dans l'en-tête du fichier qui détermine la durée pendant laquelle l'élément peut être mis en cache. Certaines ressources sont définies sur 0, auquel cas la demande suivante ne sera pas extraite du cache. Mais mon intuition est que Google règle leurs TTL sur quelque chose d'assez raisonnable.

Si vous souhaitez trouver une alternative qui vous permette de ne mettre en file d'attente qu'un seul script et non un iframe, envisagez de remplacer l'intégration par défaut pour YouTube. Notez simplement la première fois que vous créez une incorporation pour ajouter les scripts, puis toutes les deux fois par la suite, affichez simplement le balisage vidéo.

add_filter('embed_oembed_html', 'override_youtube_embed_oembed_html', 99, 4);

function override_youtube_embed_oembed_html($html, $url, $attr, $post_id) {

    static $count = 0;

    $pos = strrpos($url, "youtube.com");
    if ($pos === false) {
        return $html;
    }

    $message = '';
    if( ! $count ) {
        $message = 'First bit of embed magic! ';
    }

    $count ++;
    return $message . "Your Magic Here! How many magics so far? " . $count;
}
1
jgraup