2 ポイント 投稿者 GN⁺ 2024-07-08 | 2件のコメント | WhatsAppで共有
  • YouTube埋め込みは約1.3MBあり、複数の埋め込み間でリソースを共有しない
  • <lite-youtube> Webコンポーネントを使えば約100kまで削減でき、リソースを共有しつつ機能も犠牲にしない

YouTube動画の埋め込み

  • YouTube動画はWebサイトに埋め込める
  • YouTubeのShareメニューで**< > Embed**オプションを選ぶと、<iframe>を含むHTMLコードが提供される
  • <iframe>はパフォーマンス面では望ましくないが、保護されたサードパーティーコンテンツには適している

パフォーマンス改善の提案

  • loading="lazy"属性を追加し、動画が見えていないときはすぐに読み込まれないようにする
  • インラインスタイルを追加して、動画の元の比率を保ちつつレスポンシブにする

現在のYouTube埋め込みの問題点

  • YouTube埋め込みが1つだけあるページでも、32件のリクエスト、1.3MBのデータ転送、2.76秒の読み込み時間が発生する
  • 複数の埋め込み間でリソースを共有しないため、埋め込み数が増えるほど転送量が線形に増加する

見た目と機能

  • YouTube埋め込みは動画の「ポスター」画像、動画タイトル、大きな再生ボタンを提供する
  • こうした機能は、多くのリソースを使わなくても実装できる

なぜこの方式なのか?

  • 軽量な埋め込みをテストしたところ、エンゲージメントが低下したという報告がある
  • しかしこれは直感に反する結果であり、さらに深い検討が必要だ
  • 多くのリソースを消費することは、環境面でも問題になる

解決策: 別の方法で埋め込み体験を再現する

  • GoogleのPaul Irishが作成したlite-youtube-embed Webコンポーネントがある
  • このコンポーネントは視覚的パフォーマンスに重点を置き、約224倍高速にレンダリングされる
  • 標準の埋め込みと同じ機能を提供しつつ、速度、効率、デフォルトのプライバシーを向上させる

Lite YouTube Embedの使い方

  1. Webコンポーネントを初期化するJavaScriptを読み込む
  2. 使用する
  • npmからインストールするか、プロジェクトにコピーして使える
  • CDNからリンクして使うこともできる

代替案

  • Shadow DOM版(スタイル保護、スタイリングは難しい)
  • 自前で実装
    • Raymond Camden: YouTube埋め込みWebコンポーネントの構築(VanillaおよびWebC版)
    • Adrian Roselli: YouTubeおよびVimeo Webコンポーネント
  • Mux: <youtube-video>(DOM APIに一致)
  • React移植版およびNext.js公式版

GN⁺のまとめ

  • YouTube埋め込みは多くのリソースを使い、パフォーマンスに悪影響を与える
  • lite-youtube-embedのようなWebコンポーネントを使えば、パフォーマンスを大幅に改善できる
  • 環境面でもポジティブな影響が期待できる
  • 似た機能を提供する他のWebコンポーネントも検討に値する

2件のコメント

 
GN⁺ 2024-07-08
Hacker Newsの意見
  • コミュニティフォーラムのプラットフォームで YouTube 埋め込みを検出し、クリックされるまで読み込まれないプロキシサムネイルに置き換えている

    • 1人が YouTube 動画を共有したからといって、すべてのユーザーが 1MB を超える YouTube JavaScript をダウンロードし、Google に IP を追跡される必要はない
  • 著者は軽量版がエンゲージメントを下げるとは信じていない

    • 一方で、私は完全にそう信じている
    • 推奨されている lite-youtube-embed プロジェクトページのデモでは、軽量版のほうが動画再生までにより長くかかる
    • 読み込み時間がミリ秒単位で伸びるほど、エンゲージメントは低下する
  • 別のプレイヤーがユーザーに異なる扱いをするのは驚くことではない

    • lite-youtube-embed では実際の YouTube ページへクリックして移動できない
    • これはコンテンツの実際の出所へ行くのを妨げようとする試みに見える可能性がある
    • 埋め込み動画を再生することはほとんどないが、再生するときは通常の YouTube 体験のほうを好む
    • 追加のレイヤーがあるように見えると、クリックする可能性は下がる
  • これは、開発者がユーザーがソフトウェアをどう使うかを正確には知り得ないという誤った信念の一例である

    • 動画と Google の利用を減らし、JavaScript のメガバイト数を減らしたい
    • より良いウェブのために YouTube 動画の埋め込みはやめるべきだ
  • ブロガーが GitHub Gist 埋め込みを使わないようにする必要がある

    • Hugo のような静的サイトジェネレーターは、シンタックスハイライト付きのコードスニペットをサポートしている
    • 動的サイトは highlight.js を使える
  • 埋め込み全体の重さを減らし、UX を改善する1つの方法は広告をブロックすることだ

    • Content Security Policies を使ってページ上の広告をブロックできる
  • ublock ユーザー向けのクライアント側ソリューションとして click 2 load を使える

    • Chrome が manifest v3 へ移行中なので、動作しないかもしれない
  • 軽量埋め込みがエンゲージメントを低下させるというテスト結果がある

    • 読み込み時間の高速化はエンゲージメントを改善するはずだが、軽量埋め込みでエンゲージメントが下がったなら、機能が犠牲になっていた可能性がある
  • 埋め込み動画は、YouTube サーバー上のファイルを指す <video> 要素であり得る

    • 商業的利益がそれを妨げていた
  • 埋め込み数が増えるほど、重さは線形に増加する

    • 同一生成元ポリシーによって、キャッシュされたリソースを使えるようにすべきだ
  • lite youtube embed の代替として、自分のソリューションを共有する

    • 完全なカスタマイズ性の面で、より良いトレードオフを提供する