Menggunakan Page Visibility API

Ernest Delgado
Ernest Delgado

Pengantar

Sebagai developer Web, kita cenderung tertarik dengan teknologi baru yang memungkinkan kita membuat halaman Web yang lebih menarik dan interaktif. Grafis 3D dengan WebGL? Tentu saja. Kemampuan audio lanjutan dengan WebAudio? Tentu saja. Aplikasi kolaborasi real-time yang menggunakan kamera dan mikrofon Web? Daftarkan saya.

Yang tidak terlalu menarik, meskipun sama pentingnya, adalah teknologi yang memungkinkan kita membuat aplikasi yang berjalan lebih efisien dan memberikan pengalaman pengguna yang lebih baik secara keseluruhan. Di sinilah API seperti PageVisibility berperan.

Page Visibility API menjalankan fungsi sederhana tetapi penting – API ini memungkinkan aplikasi Anda mengetahui kapan halaman dapat dilihat oleh pengguna. Informasi dasar ini memungkinkan pembuatan halaman Web yang berperilaku berbeda saat tidak dilihat. Pertimbangkan beberapa contoh:

  • Halaman Web yang mengambil informasi dari server dapat memperlambat siklus pembaruannya jika tidak dilihat secara aktif
  • Halaman yang menampilkan carousel gambar yang berputar atau konten video/audio dapat dijeda hingga pengguna menampilkan halaman lagi
  • Aplikasi dapat memutuskan untuk menampilkan notifikasi kepada pengguna hanya jika notifikasi tersebut disembunyikan dari tampilan

Pada awalnya, API ini mungkin tidak tampak sangat berguna selain untuk memudahkan pengguna, tetapi mengingat peningkatan besar dalam penjelajahan Web seluler, apa pun yang membantu menghemat daya baterai perangkat menjadi sangat penting. Dengan menggunakan PageVisibility API, situs Anda dapat membantu perangkat pengguna menggunakan lebih sedikit daya dan lebih tahan lama.

Browser Support

  • Chrome: 33.
  • Edge: 12.
  • Firefox: 18.
  • Safari: 7.

Source

Spesifikasi API, yang saat penulisan ini berada dalam tahap Rekomendasi Calon, menyediakan properti untuk mendeteksi status visibilitas dokumen serta peristiwa untuk merespons perubahan visibilitas.

Dalam tutorial ini, saya akan membahas dasar-dasar API dan menunjukkan cara menerapkannya ke beberapa contoh praktis (jangan ragu untuk langsung melihatnya jika Anda tidak sabar).

Properti Visibilitas Dokumen

Spesifikasi PageVisibilityAPI versi saat ini menentukan dua properti dokumen: boolean hidden dan enumerasi visibilityState. Properti visibilityState saat ini memiliki empat kemungkinan nilai: hidden, visible, prerender, dan unloaded.

Seperti yang Anda duga, atribut tersembunyi menampilkan nilai benar jika dokumen tidak terlihat sama sekali. Biasanya, ini berarti dokumen diperkecil, berada di tab latar belakang, layar kunci OS aktif, dll. Atribut ditetapkan ke salah jika ada bagian dokumen yang setidaknya terlihat sebagian di setidaknya satu layar. Selain itu, untuk mengakomodasi alat aksesibilitas, atribut tersembunyi dapat disetel ke salah jika alat seperti kaca pembesar layar sepenuhnya mengaburkan dokumen, tetapi menampilkan tampilannya.

Menangani awalan vendor

Agar tetap berfokus pada kode, bukan semua awalan khusus vendor, saya akan menggunakan beberapa fungsi bantuan untuk mengisolasi khusus browser. Segera setelah Anda menghentikan dukungan untuk Browser Android 4.4, Anda dapat menghapus bagian ini dan menggunakan nama standar.

function getHiddenProp(){
    var prefixes = ['webkit','moz','ms','o'];

    // if 'hidden' is natively supported just return it
    if ('hidden' in document) return 'hidden';

    // otherwise loop over all the known prefixes until we find one
    for (var i = 0; i < prefixes.length; i++){
        if ((prefixes[i] + 'Hidden') in document)
            return prefixes[i] + 'Hidden';
    }

    // otherwise it's not supported
    return null;
}

Contoh Properti Dokumen

Sekarang kita dapat menulis fungsi lintas browser, isHidden(), untuk melihat apakah dokumen terlihat.

function isHidden() {
    var prop = getHiddenProp();
    if (!prop) return false;

    return document[prop];
}

Untuk tampilan visibilitas dokumen yang lebih terperinci, Anda dapat menggunakan properti visibilityState. Properti ini menampilkan salah satu dari empat nilai:

  • hidden: dokumen sepenuhnya disembunyikan dari tampilan
  • visible: dokumen setidaknya terlihat sebagian di setidaknya satu perangkat layar
  • prerender: dokumen dimuat di luar layar dan tidak terlihat (nilai ini bersifat opsional; tidak semua browser akan mendukungnya)
  • unloaded: jika dokumen akan di-unload, nilai ini akan ditampilkan (nilai ini bersifat opsional; tidak semua browser akan mendukungnya)

Peristiwa VisibilityChange

Selain properti visibilitas, ada peristiwa visibilitychange yang diaktifkan setiap kali status visibilitas dokumen berubah. Anda dapat mendaftarkan pemroses peristiwa untuk peristiwa ini langsung di objek dokumen:

Contoh Peristiwa

// use the property name to generate the prefixed event name
var visProp = getHiddenProp();
if (visProp) {
  var evtname = visProp.replace(/[H|h]idden/,'') + 'visibilitychange';
  document.addEventListener(evtname, visChange);
}

function visChange() {
   var txtFld = document.getElementById('visChangeText');

   if (txtFld) {
      if (isHidden())
         txtFld.value += "Tab Hidden!\n";
      else
         txtFld.value += "Tab Visible!\n";
   }
}

Ringkasan

Membuat aplikasi Web yang hebat melibatkan lebih dari sekadar menggunakan fitur menarik yang dapat dilihat dan berinteraksi dengan pengguna. Aplikasi yang benar-benar hebat menggunakan resource dan perhatian pengguna dengan cermat, dan Page Visibility API adalah bagian penting dari teka-teki tersebut. Untuk mempelajari lebih lanjut cara mem-build aplikasi Web yang hemat resource, lihat artikel terkait performa lainnya.

Referensi Eksternal