Performa video

Pada modul sebelumnya, Anda telah mempelajari beberapa teknik performa terkait gambar, yang merupakan jenis resource yang banyak digunakan di web dan dapat menghabiskan bandwidth yang signifikan jika tidak berhati-hati dalam mengoptimalkannya dan mempertimbangkan area pandang pengguna.

Namun, gambar bukan satu-satunya jenis media yang umum terlihat di web. Video adalah jenis media populer lainnya yang sering digunakan di laman web. Sebelum melihat beberapa kemungkinan pengoptimalan, penting untuk memahami cara kerja elemen <video> terlebih dahulu.

File sumber video

Saat menggunakan file media, file yang Anda kenali di sistem operasi (.mp4, .webm, dan lainnya) disebut penampung. Penampung berisi satu atau beberapa streaming. Pada umumnya, ini adalah streaming video dan audio.

Anda dapat mengompresi setiap streaming menggunakan codec. Misalnya, video.webm dapat berupa penampung WebM yang berisi streaming video yang dikompresi menggunakan VP9, dan streaming audio yang dikompresi menggunakan Vorbis.

Memahami perbedaan antara penampung dan codec sangat membantu, karena cara ini membantu Anda mengompresi file media menggunakan bandwidth yang jauh lebih sedikit, yang menyebabkan lebih sedikit waktu pemuatan halaman secara keseluruhan, serta berpotensi meningkatkan Largest Contentful Paint (LCP) halaman, yang merupakan metrik yang berfokus pada pengguna dan salah satu dari tiga Core Web Vitals.

Salah satu cara untuk mengompresi file video melibatkan penggunaan FFmpeg:

ffmpeg -i input.mov output.webm

Perintah sebelumnya—meskipun sederhana seperti yang didapat saat menggunakan FFmpeg—mengambil file input.mov dan menghasilkan file output.webm menggunakan opsi FFmpeg default. Perintah sebelumnya menghasilkan file video lebih kecil yang berfungsi di semua browser modern. Menyesuaikan video atau opsi audio yang ditawarkan FFmpeg dapat membantu Anda mengurangi ukuran file video lebih jauh. Misalnya, jika Anda menggunakan elemen <video> untuk mengganti GIF, Anda harus menghapus trek audio:

ffmpeg -i input.mov -an output.webm

Jika Anda ingin menyesuaikan sedikit lebih lanjut, FFmpeg menawarkan flag -crf saat mengompresi video tanpa menggunakan encoding kecepatan bit variabel. -crf adalah singkatan dari Constant Rate Factor. Ini adalah setelan yang menyesuaikan tingkat kompresi, dan melakukannya dengan menerima bilangan bulat dalam rentang tertentu.

Codec seperti H.264 dan VP9 mendukung flag -crf, tetapi penggunaannya bergantung pada codec yang Anda gunakan. Untuk mengetahui informasi selengkapnya, baca faktor rasio konstan untuk encoding video dalam H.264, serta kualitas konstan saat mengenkode video di VP9.

Beberapa format

Saat menangani file video, menentukan beberapa format berfungsi sebagai penggantian untuk browser yang tidak mendukung semua format modern.

<video>
  <source src="video.webm" type="video/webm">
  <source src="video.mp4" type="video/mp4">
</video>

Karena semua browser modern mendukung codec H.264, MP4 dapat digunakan sebagai pengganti browser lama. Versi WebM dapat menggunakan codec AV1 yang lebih baru, yang belum didukung secara luas, atau codec VP9 versi sebelumnya, yang didukung lebih baik daripada AV1, tetapi biasanya tidak mengompresi sebaik AV1.

Atribut poster

Gambar poster video ditambahkan menggunakan atribut poster pada elemen <video>, yang memberi petunjuk kepada pengguna tentang konten video sebelum pemutaran dimulai:

<video poster="poster.jpg">
  <source src="video.webm" type="video/webm">
  <source src="video.mp4" type="video/mp4">
</video>

Putar otomatis

Menurut Arsip HTTP, 20% video di seluruh web menyertakan atribut autoplay. autoplay digunakan saat video harus segera diputar, misalnya saat digunakan sebagai latar belakang video atau sebagai pengganti GIF animasi.

GIF animasi dapat berukuran sangat besar, terutama jika memiliki banyak frame dengan detail yang rumit. Bukanlah hal yang aneh bagi GIF animasi untuk menggunakan beberapa megabyte data, yang dapat menghabiskan signifikan bandwidth yang lebih baik untuk digunakan untuk resource yang lebih penting. Secara umum, Anda sebaiknya menghindari format gambar animasi, karena padanan <video> jauh lebih efisien untuk jenis media ini.

Jika video putar otomatis merupakan persyaratan untuk situs, Anda dapat menggunakan atribut autoplay langsung pada elemen <video>:

<!-- This will automatically play a video, but
     it will loop continuously and be muted: -->
<video autoplay muted loop playsinline>
  <source src="video.webm" type="video/webm">
  <source src="video.mp4" type="video/mp4">
</video>

Dengan menggabungkan atribut poster dan Intersection Observer API, Anda dapat mengonfigurasi halaman untuk hanya mendownload video setelah berada di dalam area pandang. Gambar poster dapat berupa placeholder gambar berkualitas rendah, seperti frame pertama video. Setelah video muncul di area pandang, browser mulai mendownload video. Hal ini dapat mempercepat waktu pemuatan konten dalam area pandang awal. Di sisi negatifnya, saat menggunakan gambar poster untuk autoplay, pengguna akan menerima gambar yang hanya ditampilkan sebentar hingga video dimuat dan mulai diputar.

Pemutaran yang dimulai pengguna

Umumnya, browser mulai mendownload file video segera setelah parser HTML menemukan elemen <video>. Jika memiliki elemen <video> tempat pengguna memulai pemutaran, Anda mungkin tidak ingin video mulai didownload sampai pengguna berinteraksi dengannya.

Anda dapat memengaruhi apa yang didownload untuk resource video menggunakan atribut preload milik elemen <video>:

  • Menyetel preload="none" akan memberi tahu browser bahwa tidak ada konten video yang harus dipramuat.
  • Menyetel preload="metadata" hanya akan mengambil metadata video, seperti durasi video dan mungkin informasi sekilas lainnya.

Menyetel preload="none" kemungkinan akan menjadi kasus yang paling diinginkan jika Anda memuat video yang mengharuskan pengguna memulai pemutaran.

Dalam kasus ini, Anda dapat meningkatkan pengalaman pengguna dengan menambahkan gambar poster. Cara ini memberi pengguna beberapa konteks tentang isi video. Selain itu, jika gambar poster adalah elemen LCP, Anda dapat meningkatkan prioritas gambar poster menggunakan petunjuk <link rel="preload"> beserta fetchpriority="high":

<link rel="preload" as="image" href="poster.jpg" fetchpriority="high">

Penyematan

Mengingat semua kerumitan dalam mengoptimalkan dan menayangkan konten video secara efisien, tidak masalah untuk melimpahkan masalah ini ke layanan video khusus seperti YouTube atau Vimeo. Layanan tersebut mengoptimalkan penayangan video untuk Anda, tetapi menyematkan video dari layanan pihak ketiga dapat memberikan efeknya sendiri terhadap performa, karena pemutar video tersemat sering kali dapat menyajikan banyak resource tambahan, seperti JavaScript.

Mengingat kenyataan ini, penyematan video pihak ketiga dapat memengaruhi performa halaman secara signifikan. Menurut Arsip HTTP, sematan YouTube akan memblokir rangkaian pesan utama selama lebih dari 1,7 detik untuk situs median. Memblokir thread utama dalam jangka waktu yang lama merupakan masalah pengalaman pengguna yang serius yang dapat memengaruhi Interaction to Next Paint (INP) halaman. Namun, Anda dapat melakukan penyusupan dengan tidak langsung memuat sematan saat pemuatan halaman awal, dan membuat placeholder untuk penyematan yang diganti dengan sematan video sebenarnya saat pengguna berinteraksi dengan sematan tersebut.

Demo video

Menguji pengetahuan Anda

Urutan elemen <source> di dalam elemen <video> induk tidak menentukan resource video mana yang akhirnya didownload.

Benar.
Coba lagi.
Salah.
Benar.

Atribut poster milik elemen <video> dianggap sebagai kandidat LCP.

Benar.
Benar.
Salah.
Coba lagi.

Berikutnya: Mengoptimalkan font web

Selanjutnya dalam cakupan kita tentang cara mengoptimalkan tipe sumber daya tertentu adalah {i>font<i}. Mengoptimalkan font situs adalah hal yang sering diabaikan, tetapi dapat berdampak signifikan pada kecepatan pemuatan situs secara keseluruhan, dan metrik seperti LCP dan Pergeseran Tata Letak Kumulatif (CLS).