Pemuatan lambat tingkat browser untuk CMS

Pembelajaran untuk mengadopsi atribut pemuatan standar

Tujuan saya dengan postingan ini adalah untuk meyakinkan developer dan kontributor platform CMS (yaitu orang yang mengembangkan core CMS) bahwa sekarang adalah waktunya untuk menerapkan dukungan untuk fitur pemuatan lambat gambar tingkat browser. Kami juga akan membagikan rekomendasi tentang cara memastikan pengalaman pengguna berkualitas tinggi dan memungkinkan penyesuaian oleh developer lain saat menerapkan pemuatan lambat. Panduan ini berasal dari pengalaman kami menambahkan dukungan ke WordPress serta membantu Joomla, Drupal, dan TYPO3 menerapkan fitur ini.

Terlepas dari apakah Anda adalah developer platform CMS atau pengguna CMS (yaitu seseorang yang membuat situs dengan CMS), Anda dapat menggunakan postingan ini untuk mempelajari lebih lanjut manfaat pemuatan lambat tingkat browser di CMS Anda. Lihat bagian Langkah berikutnya untuk mendapatkan saran tentang cara memicu platform CMS Anda untuk menerapkan pemuatan lambat.

Latar belakang

Selama setahun terakhir, gambar dan iframe pemuatan lambat menggunakan atribut loading telah menjadi bagian dari Standar HTML WHATWG dan mengalami peningkatan adopsi oleh berbagai browser. Namun, pencapaian ini hanya meletakkan dasar untuk web yang lebih cepat dan hemat resource. Sekarang, atribut loading digunakan di ekosistem web terdistribusi.

Sistem pengelolaan konten mendukung sekitar 60% situs, sehingga platform ini berperan penting dalam mendorong adopsi fitur browser modern ke web. Dengan beberapa CMS open source populer seperti WordPress, Joomla, dan TYPO3 yang telah menerapkan dukungan untuk atribut loading pada gambar, mari kita lihat pendekatan dan poin penting yang relevan untuk mengadopsi fitur tersebut di platform CMS lainnya. Media pemuatan lambat adalah fitur performa web utama yang harus dimanfaatkan situs dalam skala besar, itulah sebabnya mengadopsinya di tingkat inti CMS direkomendasikan.

Alasan untuk menerapkan pemuatan lambat sekarang

Standardisasi

Penggunaan fitur browser yang tidak standar di CMS memfasilitasi pengujian yang luas dan dapat menampilkan potensi area peningkatan. Namun, konsensus umum di seluruh CMS adalah, selama fitur browser tidak distandarisasi, sebaiknya fitur tersebut diterapkan dalam bentuk ekstensi atau plugin untuk platform masing-masing. Hanya setelah distandarisasi, fitur dapat dipertimbangkan untuk diadopsi di inti platform.

Dukungan browser

Dukungan browser untuk fitur ini juga merupakan masalah yang serupa: Sebagian besar pengguna CMS harus dapat memanfaatkan fitur ini. Jika ada persentase browser yang cukup besar yang belum mendukung fitur tersebut, fitur tersebut harus memastikan bahwa setidaknya tidak memiliki efek buruk bagi browser tersebut.

Nilai minimum jarak dari area pandang

Masalah umum terkait penerapan pemuatan lambat adalah pada prinsipnya meningkatkan kemungkinan gambar tidak akan dimuat setelah terlihat di area pandang pengguna karena siklus pemuatan dimulai pada tahap selanjutnya. Berbeda dengan solusi berbasis JavaScript sebelumnya, browser mendekati hal ini secara konservatif dan lebih jauh lagi dapat menyesuaikan pendekatannya berdasarkan data pengalaman pengguna di dunia nyata, sehingga meminimalkan dampaknya, sehingga pemuatan lambat tingkat browser akan aman untuk diadopsi oleh platform CMS.

Rekomendasi pengalaman pengguna

Memerlukan atribut dimensi pada elemen

Untuk menghindari pergeseran tata letak, sudah menjadi rekomendasi lama bahwa konten tersemat seperti gambar atau iframe harus selalu menyertakan atribut dimensi width dan height, sehingga browser dapat menyimpulkan rasio aspek elemen tersebut sebelum benar-benar memuatnya. Rekomendasi ini relevan terlepas dari apakah elemen dimuat lambat atau tidak. Namun, karena kemungkinan gambar tidak dimuat sepenuhnya setelah berada di area pandang 0,1% lebih besar, hal ini menjadi sedikit lebih berlaku dengan pemuatan lambat.

Sebaiknya CMS memberikan atribut dimensi pada semua gambar dan iframe. Jika hal ini tidak memungkinkan untuk setiap elemen tersebut, sebaiknya abaikan gambar pemuatan lambat yang tidak menyediakan kedua atribut ini.

Menghindari pemuatan lambat elemen paruh atas

Saat ini, CMS direkomendasikan untuk hanya menambahkan atribut loading="lazy" ke gambar dan iframe yang diposisikan di bawah lipatan, untuk menghindari penundaan dalam metrik Largest Contentful Paint, yang dalam beberapa kasus dapat signifikan seperti yang ditemukan pada Juli 2021. Namun, perlu diakui bahwa menilai posisi elemen secara relatif terhadap area pandang sebelum proses rendering itu rumit. Hal ini berlaku terutama jika CMS menggunakan pendekatan otomatis untuk menambahkan atribut loading, tetapi meskipun berdasarkan intervensi manual, beberapa faktor seperti ukuran dan rasio aspek tampilan perlu dipertimbangkan. Namun, sebaiknya hapus gambar hero dan gambar atau iframe lain yang cenderung muncul di atas lipatan agar tidak dimuat lambat.

Menghindari penggantian JavaScript

Meskipun JavaScript dapat digunakan untuk memberikan pemuatan lambat ke browser yang (belum) mendukung atribut loading, mekanisme tersebut selalu mengandalkan penghapusan atribut src dari gambar atau iframe, yang menyebabkan penundaan untuk browser yang benar-benar mendukung atribut tersebut. Selain itu, meluncurkan solusi berbasis JavaScript tersebut di frontend CMS skala besar akan meningkatkan area permukaan untuk potensi masalah, yang merupakan bagian dari alasan tidak ada CMS utama yang mengadopsi pemuatan lambat di intinya sebelum fitur browser standar.

Rekomendasi teknis

Mengaktifkan pemuatan lambat secara default

Rekomendasi keseluruhan untuk CMS yang menerapkan pemuatan lambat tingkat browser adalah mengaktifkannya secara default, yaitu loading="lazy" harus ditambahkan ke gambar dan iframe, sebaiknya hanya untuk elemen yang menyertakan atribut dimensi. Mengaktifkan fitur ini secara default akan menghasilkan penghematan resource jaringan yang lebih besar daripada jika harus diaktifkan secara manual, misalnya per gambar.

Sebisa mungkin, loading="lazy" harus hanya ditambahkan ke elemen yang kemungkinan muncul di bawah fold. Meskipun persyaratan ini dapat sulit diterapkan untuk CMS karena kurangnya kesadaran sisi klien dan berbagai ukuran area pandang, sebaiknya setidaknya gunakan heuristik perkiraan untuk menghapus elemen seperti gambar hero yang kemungkinan akan muncul di atas lipatan agar tidak dimuat lambat.

Mengizinkan modifikasi per elemen

Meskipun loading="lazy" harus ditambahkan ke gambar dan iframe secara default, Anda harus mengizinkan penghapusan atribut pada gambar tertentu, misalnya untuk mengoptimalkan LCP. Jika audiens CMS secara rata-rata dianggap lebih paham teknologi, ini bisa berupa kontrol UI yang ditampilkan untuk setiap gambar dan iframe yang memungkinkan untuk memilih tidak menggunakan pemuatan lambat untuk elemen tersebut. Atau, sebagai tambahan, API dapat diekspos ke developer pihak ketiga sehingga mereka dapat melakukan perubahan serupa melalui kode.

WordPress, misalnya, memungkinkan untuk melewati atribut loading baik untuk seluruh tag atau konteks HTML maupun untuk elemen HTML tertentu dalam konten.

Melakukan retrofit pada konten yang ada

Pada tingkat tinggi, ada dua pendekatan untuk menambahkan atribut loading ke elemen HTML di CMS:

  • Tambahkan atribut dari dalam editor konten di backend, yang menyimpannya secara terus-menerus di database.
  • Tambahkan atribut secara langsung saat merender konten dari database di frontend.

Sebaiknya CMS memilih untuk menambahkan atribut secara langsung saat merender, untuk memberikan manfaat pemuatan lambat juga ke konten yang ada. Jika atribut hanya dapat ditambahkan melalui editor, hanya konten baru atau yang baru-baru ini diubah yang akan menerima manfaatnya, sehingga CMS akan mengurangi dampak penghematan resource jaringan secara drastis. Selain itu, menambahkan atribut dengan cepat akan memungkinkan modifikasi di masa mendatang dengan mudah, jika kemampuan pemuatan lambat tingkat browser diperluas lebih lanjut.

Menambahkan atribut secara langsung harus memenuhi atribut loading yang mungkin ada di elemen dan membiarkan atribut tersebut lebih diprioritaskan. Dengan cara ini, CMS atau ekstensi untuk CMS juga dapat menerapkan pendekatan yang didorong editor tanpa menyebabkan konflik dengan atribut duplikat.

Mengoptimalkan performa sisi server

Saat menambahkan atribut loading ke konten dengan cepat menggunakan (misalnya) middleware sisi server, kecepatan adalah pertimbangan. Bergantung pada CMS, atribut dapat ditambahkan melalui traversal DOM atau ekspresi reguler, dengan ekspresi reguler direkomendasikan untuk performa.

Penggunaan ekspresi reguler harus diminimalkan, misalnya satu ekspresi reguler yang mengumpulkan semua tag img dan iframe dalam konten, termasuk atributnya, lalu menambahkan atribut loading ke setiap string tag sesuai yang berlaku. WordPress, misalnya, sampai memiliki satu ekspresi reguler umum untuk melakukan berbagai operasi langsung ke elemen tertentu, yang menambahkan loading="lazy" hanyalah salah satunya, menggunakan satu ekspresi reguler untuk memfasilitasi beberapa fitur. Selain itu, bentuk pengoptimalan ini adalah alasan lain mengapa mengadopsi pemuatan lambat di core CMS direkomendasikan daripada ekstensi - hal ini memungkinkan pengoptimalan performa sisi server yang lebih baik.

Langkah berikutnya

Lihat apakah ada tiket permintaan fitur yang ada untuk menambahkan dukungan untuk fitur di CMS Anda, atau buka tiket baru jika belum ada. Gunakan referensi ke postingan ini sesuai kebutuhan untuk mendukung proposal Anda.

Kirim tweet kepada saya (felixarntz@) untuk mengajukan pertanyaan atau komentar, atau agar CMS Anda tercantum di halaman ini jika dukungan untuk pemuatan lambat tingkat browser telah ditambahkan. Jika Anda mengalami tantangan lain, kami juga ingin mempelajarinya lebih lanjut agar dapat menemukan solusinya.

Jika Anda adalah developer platform CMS, pelajari cara CMS lain menerapkan pemuatan lambat:

Anda dapat menggunakan pembelajaran dari riset dan rekomendasi teknis dari postingan ini untuk mulai berkontribusi pada kode CMS, misalnya dalam bentuk patch atau permintaan pull.

Foto hero oleh Colin Watts di Unsplash.