Pemuatan adaptif: meningkatkan performa web di perangkat yang lambat

Pelajari cara memastikan setiap pengguna mendapatkan pengalaman terbaik dengan mengoptimalkan situs Anda untuk batasan hardware dan jaringan tertentu.

Kemampuan perangkat dan koneksi jaringan sangat bervariasi. Situs yang memuaskan pengguna di perangkat kelas atas mungkin tidak dapat digunakan di perangkat kelas bawah. Situs yang dapat dimuat dengan lancar pada jaringan yang cepat dapat dihentikan di jaringan yang lambat. Setiap pengguna dapat mengalami situs yang lambat. Itulah sebabnya mengembangkan solusi "satu ukuran untuk semua" mungkin tidak selalu berhasil.

Dalam bincang-bincang Chrome Dev Summit, Addy Osmani dari Google dan Nate Schloss dari Facebook mengeksplorasi solusi untuk masalah tersebut, yakni pola penayangan yang lebih mengakomodasi berbagai batasan pengguna. Mereka menyebutnya pemuatan adaptif.

Apa itu pemuatan adaptif?

Pemuatan adaptif mencakup pemberian pengalaman yang berbeda kepada pengguna yang berbeda berdasarkan batasan jaringan dan hardware mereka, khususnya:

  • Pengalaman core yang cepat untuk semua pengguna (termasuk perangkat kelas bawah).

  • Penambahan fitur khusus kelas atas secara bertahap, jika jaringan dan hardware pengguna dapat menanganinya.

Dengan mengoptimalkan batasan hardware dan jaringan tertentu, Anda memungkinkan setiap pengguna mendapatkan pengalaman terbaik untuk perangkat mereka. Menyesuaikan pengalaman dengan batasan pengguna dapat mencakup:

  • Menayangkan gambar dan video berkualitas rendah di jaringan yang lambat.

  • Membatasi kecepatan frame animasi pada perangkat kelas bawah.

  • Menghindari operasi komputasi yang mahal pada perangkat kelas bawah.

  • Memblokir skrip pihak ketiga di perangkat yang lebih lambat.

  • Memuat JavaScript yang tidak penting untuk interaktivitas hanya pada CPU cepat.

Dukungan browser dan cara menerapkan pemuatan adaptif

Sinyal yang dapat Anda gunakan untuk pemuatan adaptif tercantum di bawah. Dukungan browser juga disertakan untuk setiap sinyal:

Properti navigator.deviceMemory digunakan untuk mengurangi konsumsi memori di perangkat kelas bawah.

Dukungan Browser

  • 63
  • 79
  • x
  • x

Sumber

Properti navigator.hardwareConcurrency adalah jumlah core CPU. Layanan ini digunakan untuk membatasi eksekusi JavaScript yang mahal dan mengurangi logika yang menggunakan CPU secara intensif saat perangkat tidak dapat menanganinya dengan baik.

Dukungan Browser

  • 37
  • 15
  • 48
  • x

Sumber

NetworkInformation.effectiveType

Properti navigator.connection.effectiveType digunakan untuk menyesuaikan transfer data agar menggunakan lebih sedikit bandwidth.

Dukungan Browser

  • 61
  • 79
  • x
  • x

Sumber

NetworkInformation.saveData

Properti navigator.connection.saveData digunakan untuk memanfaatkan preferensi Penghemat Data pengguna.

Dukungan Browser

  • 49
  • ≤79
  • x
  • x

Sumber

Ada dua tempat untuk mengambil keputusan terkait konten yang akan ditayangkan kepada pengguna: klien dan server. Pada klien, Anda memiliki JavaScript API yang disebutkan di atas. Di server, Anda dapat menggunakan petunjuk klien untuk mendapatkan insight tentang kemampuan perangkat pengguna dan jaringan yang terhubung dengan mereka.

Pemuatan adaptif di React

React Adaptive Loading Hooks & Utilitas adalah suite untuk ekosistem React yang mempermudah penyesuaian situs Anda ke perangkat kelas bawah. Ini mencakup:

  • Hook useNetworkStatus() untuk beradaptasi berdasarkan status jaringan (slow-2g, 2g, 3g, atau 4g).

  • Hook useSaveData() untuk beradaptasi berdasarkan preferensi Penghemat Data pengguna.

  • Hook useHardwareConcurrency() untuk beradaptasi berdasarkan jumlah inti prosesor CPU yang logis di perangkat pengguna.

  • Hook useMemoryStatus() untuk beradaptasi berdasarkan memori perangkat (RAM) pengguna.

Setiap hook menerima argumen opsional untuk menetapkan nilai awal. Opsi ini berguna dalam dua skenario: saat browser pengguna tidak mendukung API yang relevan dan untuk rendering sisi server tempat Anda dapat menggunakan data petunjuk klien untuk menetapkan nilai awal di server. Misalnya, hook useNetworkStatus() dapat menggunakan nilai awal yang diteruskan dari petunjuk klien untuk rendering sisi server dan, saat dijalankan pada klien, akan memperbarui dirinya sendiri jika jenis efektif jaringan berubah.

React Adaptive Loading Hook & Utilitas diterapkan menggunakan API platform web (Informasi Jaringan, Memori Perangkat, dan Hardware konkurensi). Anda dapat menggunakan API yang sama untuk menerapkan konsep pemuatan adaptif ke framework dan library lain, seperti Angular, Vue, dan lainnya.

Penerapan pemuatan adaptif

Bagian ini mengeksplorasi demo tentang cara menggunakan pemuatan adaptif dan contoh dunia nyata dari situs seperti Facebook, eBay, Tinder, dan lainnya.

Demo Film React menunjukkan cara mengadaptasi penayangan media berdasarkan status jaringan. Ini adalah aplikasi untuk menjelajahi film yang menampilkan poster, ringkasan, dan daftar pemeran. Berdasarkan jenis koneksi efektif pengguna, poster berkualitas tinggi akan ditayangkan pada koneksi cepat dan poster berkualitas rendah pada poster yang lambat.

Twitter memiliki mode Penghemat Data yang dirancang untuk mengurangi jumlah data yang digunakan. Dalam mode ini, gambar pratinjau dimuat dalam resolusi rendah dan gambar besar hanya dimuat saat Anda mengetuk pratinjau. Dengan mengaktifkan opsi ini, pengguna di iOS dan Android dapat menghemat penggunaan data dari gambar sebesar 50%, dan pengguna di web menghemat 80%. Berikut adalah demo React yang menggunakan hook Simpan Data untuk mereplikasi linimasa Twitter. Coba buka panel Network DevTools dan lihat perbedaan jumlah data yang ditransfer saat men-scroll saat Save Data dinonaktifkan dibandingkan saat diaktifkan.

Screencast yang membandingkan scroll linimasa Twitter dengan Penghemat Data aktif dan nonaktif. Jika Penghemat Data diaktifkan, hanya pratinjau gambar yang akan dimuat dan video tidak diputar otomatis.

eBay secara kondisional mengaktifkan dan menonaktifkan fitur seperti zoom saat kondisi hardware atau jaringan pengguna tidak mendukungnya dengan baik. Anda dapat mencapainya melalui pemisahan kode adaptif dan pemuatan kode—cara untuk memuat komponen yang lebih interaktif secara bersyarat atau menjalankan operasi yang lebih berat secara komputasi pada perangkat kelas atas, tanpa mengirimkan skrip tersebut kepada pengguna yang menggunakan perangkat yang lebih lambat. Lihat video pada durasi 16 menit di mana Addy menunjukkan pola ini yang diterapkan dengan React.lazy() dan Suspense di halaman produk demo eBay.

Diagram modul yang dikirim untuk halaman produk pada perangkat kelas bawah dan kelas atas: kedua versi mencakup

Tinder menggunakan sejumlah pola pemuatan adaptif di web dan aplikasi Lite-nya untuk menjaga pengalaman yang cepat bagi semua orang. Jika pengguna berada di jaringan yang lambat atau mengaktifkan Penghemat Data, pengguna akan menonaktifkan putar otomatis video, membatasi pengambilan data rute, dan membatasi pemuatan gambar berikutnya di carousel untuk memuat gambar satu per satu saat pengguna menggeser. Setelah menerapkan pengoptimalan ini, mereka melihat peningkatan yang signifikan dalam jumlah geser rata-rata di negara-negara seperti Indonesia.

Screenshot dua versi chat Tinder: dengan video yang diputar otomatis dan dengan video dengan overlay tombol putar. Screenshot profil Tinder dengan teks 'Batasi gambar carousel di Penghemat Data atau 3G'. Cuplikan kode untuk pengambilan data video dalam area pandang hanya menggunakan 4G.

Pemuatan adaptif di Facebook

Satu masalah yang muncul dalam pemuatan adaptif adalah mengelompokkan perangkat ke dalam class kelas atas dan kelas bawah berdasarkan sinyal yang tersedia. Pada perangkat seluler, string user-agent (UA) memberikan nama perangkat yang memungkinkan Facebook menggunakan data yang tersedia secara publik mengenai karakteristik perangkat untuk mengelompokkan perangkat seluler ke dalam kelas. Namun, pada perangkat desktop, satu-satunya informasi relevan yang diberikan UA adalah sistem operasi perangkat.

Untuk mengelompokkan perangkat desktop, Facebook mencatat data tentang sistem operasi, inti CPU (dari navigator.hardwareConcurrency), dan memori RAM (navigator.deviceMemory) dalam pemantauan performanya. Melihat hubungan antara berbagai jenis hardware dan performa, mereka mengklasifikasikan perangkat ke dalam lima kategori. Dengan class hardware yang diintegrasikan ke dalam pemantauan performa, mereka mendapatkan gambaran yang lebih lengkap tentang cara pengguna menggunakan produk Facebook bergantung pada perangkat mereka dan dapat mengidentifikasi regresi dengan lebih mudah.

Lihat video pada 24 menit, di mana Nate membahas cara Facebook mendekati pengelompokan perangkat dan menggunakan pemuatan adaptif untuk animasi dan memuat JavaScript.

Pelajari pemuatan adaptif lebih lanjut

Pemuatan adaptif adalah mendesain situs dengan mempertimbangkan inklusivitas. Bangun pengalaman inti yang berfungsi dengan baik untuk semua pengguna, lalu alihkan atau lapisan fitur yang membuatnya semakin canggih jika pengguna memiliki memori, CPU, atau jaringan yang cepat. Untuk mempelajari pemuatan adaptif lebih lanjut, lihat demo yang tersedia dan tonton diskusi Chrome Dev Summit: