2 poin oleh GN⁺ 2024-07-08 | 2 komentar | Bagikan ke WhatsApp
  • Embed `` YouTube bawaan menimbulkan 32 request dan transfer 1,3MB bahkan jika hanya satu yang diletakkan di halaman kosong, sehingga terasa membebani dibanding UI video kecilnya
  • Jika beberapa video ditempel, resource tidak dibagikan sehingga bebannya bertambah secara linear; dalam pengukuran Zach Leatherman, 2 embed naik menjadi 2,4MB dan 3 embed menjadi 3,6MB
  • Fitur yang pertama kali terlihat hanyalah gambar poster, judul, dan tombol putar besar, sehingga pengalaman yang sama bisa direproduksi dengan lebih ringan memakai Web Component seperti ``
  • lite-youtube-embed berukuran sekitar 100KB dan membagikan resource antar embed, sehingga meningkatkan kecepatan dan efisiensi tanpa kehilangan fungsi
  • Karena embed YouTube dipakai sangat luas, mengurangi data sampai hitungan megabyte per embed menjadi optimasi nyata yang juga menurunkan penggunaan listrik dan emisi karbon

Biaya embed `` bawaan

  • Jika memilih Embed dari menu berbagi YouTube, akan diberikan HTML berbasis ``
  • Kode bawaan tidak memiliki loading="lazy", sehingga video di luar layar pun bisa langsung dimuat
  • Jika YouTube hanya menambahkan lazy loading ke iframe bawaan, peningkatan performa langsung bisa didapat

  • Untuk membuat iframe responsif dan mempertahankan rasio aslinya, iframe embed YouTube bisa ditargetkan langsung lewat CSS
iframe[src^="https://www.youtube.com/embed/";] {
  inline-size: 100%;
  block-size: auto;
  aspect-ratio: 16 / 9;
}

Pengukuran nyata dan kenaikan linear

  • Bahkan saat hanya menaruh satu embed YouTube di halaman kosong, biaya pemuatannya tetap besar
    • 32 request

      • Transfer data 1,3MB
      • Waktu muat 2,76 detik pada WiFi penulis
      • Zach Leatherman mencatat bahwa seiring jumlah embed bertambah, resource tidak dibagikan sehingga bobotnya meningkat secara linear
      • 2 embed: 2,4MB
      • 3 embed: 3,6MB
      • Saat ini ukurannya tampak sudah lebih besar daripada ketika Zach memeriksanya

UI yang pertama dilihat pengguna itu sederhana

  • Elemen yang pertama kali dihadapi pengguna pada embed YouTube terbatas
    • Gambar poster video
    • Judul video
    • Tombol putar besar yang memulai video saat diklik
  • UI dan perilaku seperti ini bisa diwujudkan tanpa harus lebih dulu memuat seluruh resource pemutar YouTube
  • Sulit menilai klaim bahwa embed yang lebih ringan menurunkan engagement jika metodologi dan datanya tidak dipublikasikan
  • Di masa lalu, ketika insinyur YouTube menguji halaman video yang lebih ringan, waktu muat rata-rata justru pernah meningkat
    • Halaman yang lebih ringan menjangkau pengguna dengan perangkat berperforma rendah dan koneksi internet lambat
    • Penggunaan dari pengguna yang baru menjadi bisa mengakses ini mungkin membuat metrik waktu muat rata-rata terlihat lebih lambat
    • Jika hanya melihat waktu muat rata-rata, peningkatan kecepatan nyata per pengguna bisa terlewat

Alternatif: Web Component ``

  • lite-youtube-embed buatan Paul Irish, sosok Google yang dikenal di bidang performa, adalah Web Component yang mereproduksi pengalaman embed bawaan dengan lebih ringan
  • Deskripsi proyeknya menyebut ia merender seperti embed asli sambil sekitar 224 kali lebih cepat
  • Pengalaman pengguna hampir sama dengan embed YouTube bawaan
    • Menampilkan gambar poster
    • Menampilkan judul
    • Menampilkan tombol putar besar
    • Memutar video saat diklik
  • Perbedaannya ada pada penggunaan dan pembagian resource
    • Embed YouTube bawaan: sekitar 1,3MB
    • ``: sekitar 100KB
    • Bisa berbagi resource antar banyak embed
    • Mendapatkan kecepatan, efisiensi, dan perlindungan privasi dasar tanpa kehilangan fungsi

Cara penggunaan dan implementasi terkait

  • Caranya adalah mendaftarkan Web Component lewat JavaScript lalu memakai elemen ``
  • Bisa lewat instalasi npm, salin langsung, atau tautan CDN
import "https://esm.sh/lite-youtube-embed";;
  • Cara yang direkomendasikan README adalah menaruh HTML lebih dulu, lalu memuat skrip secara asinkron untuk menerapkan progressive enhancement
  • Agar tetap tampil benar sebelum JavaScript dimuat, background-image bisa diletakkan di dalam HTML

  [Play Video: Keynote (Google I/O '18)](https://youtube.com/watch?v=ogfYd705cRs)

2 komentar

 
GN⁺ 2024-07-08
Pendapat di Hacker News
  • Di platform forum komunitas, mereka mendeteksi embed YouTube dan menggantinya dengan thumbnail proksi yang tidak dimuat sebelum diklik
    Hanya karena seseorang di sebuah thread membagikan video YouTube, tidak berarti semua orang yang membuka halaman itu harus mengunduh JavaScript 1MB+ dan bahkan dilacak IP-nya oleh Google

    • Saya mengelola situs infinite scroll yang isinya sebagian besar embed YouTube, SoundCloud, dan Reddit; untuk YouTube, pendekatan seperti ini baru membuatnya cukup layak dipakai
      Saya tidak terlalu peduli soal pelacakan, jadi saya memakai thumbnail yang disediakan YouTube apa adanya
    • Saya penasaran apakah ada solusi serupa untuk SoundCloud
      Player SoundCloud juga sangat berat
    • Kebetulan saya sedang menangani masalah yang sama, jadi saya ingin tahu kalau ada tips atau contoh untuk pendekatan ini
    • Saya penasaran apakah thumbnail-nya juga di-cache atau diproksi
      Jika thumbnail di-hotlink, Google masih bisa melacak dari sana juga
  • Penulis mengatakan tidak percaya ada bukti bahwa versi yang lebih ringan menurunkan engagement, tetapi menurut saya itu sangat mungkin terjadi
    Demo proyek lite-youtube-embed yang direkomendasikan punya player ringan dan player biasa; pada versi ringan, waktu hingga video mulai diputar terasa jelas lebih lama
    Setiap penambahan 1 milidetik waktu muat akan menurunkan engagement, dan di sini perbedaannya tampak ratusan milidetik atau lebih
    https://paulirish.github.io/lite-youtube-embed/

    • Kemungkinan besar begitu, tetapi perlu juga dipertimbangkan apakah membuat video mulai lebih cepat sepadan dengan harga yang harus dibayar berupa memperlambat halaman web tempat video itu di-embed
      Logika bahwa setiap milidetik itu penting juga berlaku untuk halaman web. Jika pengguna meninggalkan halaman, mereka bahkan tidak akan sampai ke videonya
      Selain itu, tidak masalah juga kalau pengguna tidak ingin menonton video. Secara pribadi, saya senang jika halaman web punya ringkasan sehingga saya bisa menghindari video
      Saya juga tidak suka dengan perombakan desktop YouTube; terlalu banyak ruang layar dipakai untuk mempromosikan video lain, bukan video yang sebenarnya ingin saya tonton. Saya berharap distraksinya lebih sedikit
    • Pada momen yang jarang ketika saya benar-benar ingin menonton video yang di-embed, menunggu beberapa ratus milidetik jauh lebih baik daripada memuat semua player embed yang tidak akan saya tonton setiap kali mengunjungi halaman
      Kalau dianalogikan dengan lampu lalu lintas, saya lebih suka lampu yang saya dekati berwarna hijau daripada semua lampu sebentar-sebentar merah
    • Klaim “setiap penambahan 1 milidetik waktu muat menurunkan engagement” lebih mirip keyakinan ala tahun 90-an
      Dari perilaku nyata perusahaan besar, jelas mereka tidak memedulikan hal semacam itu; kalau itu tidak penting bagi mereka, tidak ada alasan bagi kita untuk mengoptimalkannya atas nama mereka
      Dalam kasus penggunaan ini bukan masalah besar, tetapi di bagian stack lainnya kita tetap harus memperhatikan performa
    • Player YouTube yang lama memuat dan melakukan buffering seluruh video, sehingga nyaman karena tidak perlu mengunduh ulang saat ditonton lagi
      Saya tidak tahu bagaimana ini bisa mundur seperti sekarang, dan Google tampaknya makin lama makin merusak hal-hal yang sebelumnya bekerja dengan baik
    • Memang ada perbedaan, tetapi tampaknya tidak sebesar itu; saya akan terkejut kalau sampai 100ms
      Bisa berbeda tergantung lingkungan: Firefox, laptop i7-1185G7 berusia sekitar 2 tahun, Windows 11, Edge mode 32-bit yang terus diperbarui dan belum di-reboot selama beberapa minggu
      Kesan lambat sebagian besar berasal dari indikator loading yang berputar. Seolah-olah ia mengiklankan dirinya sendiri sebagai lambat
      Jeda dari klik hingga pemutaran memang bisa berpengaruh, tetapi untuk mengukur besarnya dengan benar diperlukan pihak berskala seperti YouTube
  • Mengenai rumor bahwa embed yang lebih ringan menurunkan engagement dan lite-youtube-embed yang diusulkan, pengguna bisa menganggap player yang sedikit saja berbeda tampilan atau perilakunya sebagai sesuatu yang asing dan tidak tepercaya
    Pada demo lite-youtube-embed, meski judulnya terlihat, tidak ada tautan untuk menuju halaman YouTube sebenarnya, sehingga bahkan terasa antagonis seolah menghalangi akses ke “konten” aslinya
    Tentu fitur itu bisa ditambahkan dengan mudah, tetapi ini mengungkap masalah yang lebih besar
    Saya hampir tidak pernah memutar video embed, tetapi kalau saya melakukannya, pengalaman YouTube biasa saja sudah cukup. Jika dibungkus lagi dengan lapisan lain yang tidak jelas, kemungkinan saya mengkliknya akan berkurang
    Ungkapan “tidak ada yang dikorbankan” dalam artikel ini adalah contoh pengembang yang keliru mengira mereka tahu bagaimana pengguna memakai perangkat lunak. Kenyataannya, itu selalu hanya dugaan
    Saya berharap video berkurang, ketergantungan pada Google di mana-mana berkurang, dan gumpalan JavaScript juga berkurang. Demi web yang lebih baik, semoga video YouTube tidak di-embed sembarangan di mana-mana
    https://paulirish.github.io/lite-youtube-embed/

    • Di UI embed resmi YouTube pun tombol Watch on YouTube tidak cukup menonjol, jadi saya selalu menekan play, lalu pause, lalu menekan tombol YouTube di kanan bawah
      Sekarang setelah tahu, saya berharap player ringan seperti ini juga punya tombol itu. Meski begitu, implementasi ini tidak sepenuhnya memblokir cara mudah untuk mendapatkan tautan
    • lite-youtube-embed juga tidak memiliki tombol Simpan ke Tonton nanti, padahal itu fitur yang sering saya pakai
      Memang bisa diakses setelah memutar video, tetapi itu bertentangan dengan tujuannya. Saya tidak ingin memutar video, dan juga tidak ingin menunggu sampai video dimuat lalu menjeda dan menekan tombol simpan
  • Sekarang tinggal membuat para blogger tidak memakai embed GitHub Gist
    Hugo, dan mungkin generator situs statis lainnya, sudah mendukung potongan kode dengan syntax highlighting secara bawaan, dan situs yang lebih dinamis pun bisa menghilangkan ketergantungan pada layanan pihak ketiga dengan highlight.js
    Memakai iframe yang berat untuk potongan kode kecil itu benar-benar aneh
    https://gohugo.io/content-management/syntax-highlighting/
    https://highlightjs.org

    • Rasanya biarkan saja orang melakukan apa yang mereka mau di situs mereka sendiri
      Meski saya tidak menyukainya, tidak masuk akal untuk “memaksa” orang mengubah situs agar sesuai dengan selera saya
    • Saat bekerja di Automattic, saya pernah menemukan bahwa emoji hati di Gist disediakan oleh WordPress, bukan GitHub
      Itu diperbaiki dalam beberapa minggu, tapi saya terkejut karena kondisinya sudah begitu selama bertahun-tahun
  • Jika bisa memanfaatkan Content Security Policy di halaman, kita bisa memblokir iklan untuk mengurangi bobot total embed dan juga memperbaiki pengalaman pengguna
    Info terkait: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Co...

    • Sebaiknya jangan sembarangan memasukkan unsafe-inline ke Content-Security-Policy
      Karena itu akan mematikan perlindungan CSP terhadap serangan injeksi. Jika memang diperlukan, ada cara-cara yang lebih aman untuk mengizinkan skrip inline
      https://content-security-policy.com/
  • Sepertinya ada bagian besar yang hilang dari cerita bahwa “embed yang lebih ringan menurunkan engagement”
    Secara alami, jika waktu muat lebih cepat, engagement seharusnya membaik. Namun jika engagement turun pada embed yang ringan, berarti ada fitur atau perilaku tertentu yang dikorbankan
    Tetapi tulisan ini mengatakan tidak ada yang dikorbankan, jadi ada sesuatu yang hilang dalam ceritanya

    • Saya ingat pernah membaca tulisan tentang perusahaan teknologi besar seperti Facebook atau Uber yang menambahkan optimisasi lalu mendapatkan hasil serupa, dan ternyata sebelumnya pasar baru yang bahkan tidak bisa membuka halaman mulai bisa mengaksesnya
      Di sini juga bisa saja serupa. Berkat embed yang lebih ringan, banyak orang untuk pertama kalinya bisa memuat video, tetapi mereka mungkin keluar pada tahap pemutaran karena perangkat atau koneksinya lambat
      Maka orang-orang yang sebelumnya tidak meninggalkan data apa pun karena tidak bisa memuat player sepenuhnya, kini bisa terlihat seolah-olah menaikkan rasio “berhenti menonton video”
    • “Jika waktu muat lebih cepat, engagement membaik” tidak sesederhana itu
      Pengguna punya ekspektasi dan toleransi waktu muat yang berbeda tergantung objeknya, dan halaman serta video di dalamnya adalah objek yang berbeda
      Waktu muat seluruh halaman juga tidak selalu terikat pada waktu muat embed, dan pemuatan seluruh halaman bisa menutupi waktu muat konten
      Metrik yang lebih penting mungkin bukan waktu muat embed, melainkan jeda dari klik sampai pemutaran
  • Sebagai solusi di sisi pengguna untuk pengguna uBlock, bisa memakai filter click2load
    Namun Chrome sedang beralih ke Manifest V3, jadi ini mungkin tidak berfungsi. Bisa merujuk filter dari yokoffing/filterlists
    https://raw.githubusercontent.com/yokoffing/filterlists/main...
    Pembuat Betterfox ini juga punya filter lain yang berguna di GitHub

    • Click2load memang perbaikan, tetapi embed tetap kurang bagus
      Yang saya inginkan hanyalah tautan biasa, jadi dulu saya membuat userscript singkat yang mengubah iframe YouTube di halaman menjadi tautan
      Untuk implementasi yang sederhana, hasilnya sangat mengejutkan bagus. Script itu mencari iframe youtube.com/embed dan youtube-nocookie.com/embed, mengubahnya menjadi tautan watch?v=, tetap mempertahankan timestamp, dan jika mau juga bisa menambahkan gambar thumbnail
  • Bagian “semakin banyak embed, bobotnya juga bertambah linear. Dua embed 2,4MB, tiga embed 3,6MB” terasa aneh
    Saya penasaran kenapa resource ini tidak diambil dari cache. Jika semuanya dimuat dari www.youtube.com, bukankah menurut same-origin policy resource yang sudah di-cache seharusnya bisa dipakai?

  • Bagian terbaik dari tulisan itu adalah saat dikatakan bahwa setelah beralih ke halaman yang ringan, rata-rata waktu muat halaman justru naik
    Setelah dilihat lebih detail, pengguna perangkat kelas bawah dan internet lambat untuk pertama kalinya benar-benar bisa memakai YouTube, dan karena mereka banyak menggunakannya, rata-rata terlihat melambat
    Kecepatan penggunaan nyata secara relatif menjadi lebih cepat untuk semua orang, dan menarik bahwa metrik rata-rata kecepatan muat halaman pada akhirnya hanyalah umpan yang tidak bermakna

  • Dulu saya pernah membuat ekstensi Firefox yang mengubah semua embed YouTube menjadi thumbnail, lalu membuka YouTube saat diklik
    Awalnya dibuat karena ponsel tidak punya Flash sementara embed Flash umum dipakai, dan kemudian diperluas hingga menangani embed iframe juga
    Dalam kebanyakan kasus, membuka situs web atau aplikasi YouTube penuh juga memberi pengalaman pengguna yang lebih baik daripada jendela embed kecil
    Saat itu saya menulisnya sesuai API ekstensi tingkat tinggi yang baru, tetapi dukungan antarversi browser tidak berlanjut sesuai harapan, jadi karena kesal saya tidak memindahkannya ke WebExtension. Membaca tulisan ini membuat saya ingin mem-porting-nya lagi