Lazy loading YouTube videí
Jak načítat embedované video z YouTube, až když je potřeba.
Máme-li na stránce více videí vložených například pomocí <iframe>
z YouTube, značně to načítání zpomalí. Jeden takový <iframe>
je cca 7 HTTP požadavků a 0,5 MB dat, což může načítání webu na mnoho tisíců milisekund otrávit.
Řešení
Co takhle místo <iframe>
zobrazit obrázek videa, přidat nějaké atrapy ovládacích prvků skutečného přehrávače – a ten zobrazit až po najetí myší (onmouseover
)?
Náhledy
Obrázek (náhled) videa lze získat překvapivě snadno. Různé varianty obrázku videa se nacházejí na jednotných URL, kam stačí zadat jenom kód videa (to je část za wathc?v=
: youtube.com/watch?v=m_t4_6eHFdk
).
- miniaturní náhledy
http://img.youtube.com/vi/m_t4_6eHFdk/1.jpg
Generují se tři (začátek, prostředek a konec), tj čísla na konci 1–3. O rozměrech 120 × 90 pixelů.
- náhledy v různých velikostech
320 × 180
http://img.youtube.com/vi/m_t4_6eHFdk/mqdefault.jpg
480 × 360
http://img.youtube.com/vi/m_t4_6eHFdk/hqdefault.jpg
640 × 480
http://img.youtube.com/vi/m_t4_6eHFdk/sddefault.jpg
Rozměry podle maximálního rozlišení videa
http://img.youtube.com/vi/m_t4_6eHFdk/maxresdefault.jpg
Náhledy pomocí API
Alternativní možnost k těmto adresám je získání URL obrázků pomocí YouTube API. Těžko ale soudit, co bude trvanlivější… Nicméně obrázky jsou zatím alespoň jednodušší na realisaci.
Živá ukázka a řešení
V HTML a kaskádových stylech se vytvoří atrapa. JavaScript ji potom prohodí za skutečný přehrávač videa.
HTML by mohlo vypadat takto:
<div class='yt' style='background: #000 url("http://img.youtube.com/vi/m_t4_6eHFdk/sddefault.jpg") center 65%'>
<a onmouseover='yt(this)' href='http://www.youtube.com/watch?v=m_t4_6eHFdk'><span>Název videa</span></a>
</div>
V CSS se potom vytvoří atrapa ovládacího prvku (pomocí obrázku).
Naposicuje se dolů a název videa ve <span>
u v odkazu zase nahoru.
Nakonec JavaScript zajistí, aby se v div.yt
vytvořil <iframe>
s videem a atrapa v podobě odkazu zmizela.
function yt(video) {
var ifr = document.createElement("iframe");
ifr.width = 640;
ifr.height = 385;
ifr.src = video.href.replace("watch?v=", "embed/");
video.parentNode.appendChild(ifr);
video.parentNode.removeChild(video);
}
Automatisace
Asi by se nikomu nechtělo vkládat ručně výše uvedené HTML, proto jsou dvě možnosti:
- Na straně serveru při vložení URL na YouTube ji nahradit upravenou HTML skořápkou. (Nahrazení by nemělo být v žádném případě trvalé.)
Vkládat YT videa jako běžné odkazy, JavaScriptem je najít, doplnit jim skořápku a navěsit funkci
yt
.
Kromě toho by serverový skript mohl zajišťovat stažení náhledového obrázku z YT na vlastní server.
Komentáře