Menangani Intervensi Iklan Berat

Iklan yang menggunakan resource dalam jumlah yang tidak proporsional di perangkat akan berdampak buruk pada pengalaman pengguna—mulai dari efek yang jelas berupa penurunan performa hingga konsekuensi yang kurang terlihat seperti menghabiskan baterai atau menghabiskan kuota bandwidth. Iklan ini berkisar dari yang secara aktif berbahaya, seperti penambang mata uang kripto, hingga konten asli dengan bug atau masalah performa yang tidak disengaja.

Chrome menetapkan batas pada resource yang dapat digunakan iklan dan menghapus iklan tersebut jika batas terlampaui. Anda dapat membaca pengumuman di blog Chromium untuk mengetahui detail selengkapnya. Mekanisme yang digunakan untuk menghapus muatan iklan adalah Intervensi Iklan Berat.

Kriteria Iklan Berat

Iklan dianggap berat jika pengguna belum berinteraksi dengannya (misalnya, belum mengetuk atau mengkliknya) dan memenuhi salah satu kriteria berikut:

  • Menggunakan thread utama selama total lebih dari 60 detik
  • Menggunakan thread utama selama lebih dari 15 detik dalam jendela 30 detik
  • Menggunakan bandwidth jaringan lebih dari 4 megabyte

Semua resource yang digunakan oleh iframe turunan dari frame iklan akan dihitung terhadap batas untuk melakukan intervensi pada iklan tersebut. Perhatikan bahwa batas waktu thread utama tidak sama dengan waktu yang berlalu sejak memuat iklan. Batasnya adalah berapa lama waktu yang dibutuhkan CPU untuk mengeksekusi kode iklan.

Menguji intervensi

Intervensi dikirimkan di Chrome 85, tetapi secara default ada beberapa derau dan variabilitas yang ditambahkan ke nilai minimum untuk melindungi privasi pengguna.

Menetapkan chrome://flags/#heavy-ad-privacy-mitigations ke Nonaktif akan menghapus perlindungan tersebut, yang berarti pembatasan diterapkan secara deterministik, murni sesuai dengan batas. Hal ini akan mempermudah proses debug dan pengujian.

Saat intervensi dipicu, Anda akan melihat konten dalam iframe untuk iklan berat yang diganti dengan pesan Ad removed. Jika Anda mengikuti link Detail yang disertakan, Anda akan melihat pesan yang menjelaskan: "Iklan ini menggunakan terlalu banyak resource untuk perangkat Anda, sehingga Chrome menghapusnya."

Anda dapat melihat intervensi yang diterapkan ke konten contoh di weight-ads.glitch.me Anda juga dapat menggunakan situs pengujian ini untuk memuat URL arbitrer sebagai cara cepat untuk menguji konten Anda sendiri.

Berhati-hatilah saat menguji bahwa ada sejumlah alasan yang dapat mencegah intervensi diterapkan.

  • Memuat ulang iklan yang sama dalam halaman yang sama akan mengecualikan kombinasi tersebut dari intervensi. Menghapus histori penjelajahan dan membuka halaman di tag baru dapat membantu.
  • Pastikan halaman tetap dalam fokus - menempatkan halaman di latar belakang (beralih ke jendela lain) akan menjeda task queue untuk halaman, sehingga tidak akan memicu intervensi CPU.
  • Pastikan Anda tidak mengetuk atau mengklik konten iklan selama pengujian - intervensi tidak akan diterapkan pada konten yang menerima interaksi pengguna.

Apa yang perlu Anda lakukan?

Anda menampilkan iklan dari penyedia pihak ketiga di situs Anda

Tidak perlu tindakan apa pun, tetapi perlu diketahui bahwa pengguna mungkin melihat iklan yang melebihi batas yang dihapus saat berada di situs Anda.

Anda menampilkan iklan pihak pertama di situs Anda atau Anda menyediakan iklan untuk ditampilkan oleh pihak ketiga

Lanjutkan membaca untuk memastikan Anda menerapkan pemantauan yang diperlukan melalui Reporting API untuk intervensi Iklan Berat.

Anda membuat konten iklan atau mengelola alat untuk membuat konten iklan

Lanjutkan membaca untuk memastikan Anda mengetahui cara menguji konten untuk menemukan masalah performa dan penggunaan resource. Sebaiknya Anda juga merujuk ke panduan tentang platform iklan pilihan Anda karena platform tersebut dapat memberikan saran atau batasan teknis tambahan, misalnya, lihat Panduan Google untuk materi iklan display. Pertimbangkan untuk membuat nilai minimum yang dapat dikonfigurasi langsung ke dalam alat pembuatan untuk mencegah iklan berperforma buruk agar tidak ditayangkan.

Apa yang terjadi jika iklan dihapus?

Intervensi di Chrome dilaporkan melalui Reporting API yang diberi nama tepat dengan jenis laporan intervention. Anda dapat menggunakan Reporting API untuk mendapatkan notifikasi tentang intervensi, baik melalui permintaan POST ke endpoint pelaporan atau dalam JavaScript Anda.

Laporan ini dipicu di iframe bertag iklan root beserta semua turunan, yaitu setiap frame yang di-unload oleh intervensi. Artinya, jika iklan berasal dari sumber pihak ketiga, yaitu iframe lintas situs, pihak pihak ketiga tersebut (misalnya, penyedia iklan) yang akan menangani laporan.

Untuk mengonfigurasi halaman untuk laporan HTTP, responsnya harus menyertakan header Report-To:

Report-To: { "url": "https://example.com/reports", "max_age": 86400 }

Permintaan POST yang dipicu akan menyertakan laporan seperti ini:

POST /reports HTTP/1.1
Host: example.com

Content-Type: application/report

[{
 "type": "intervention",
 "age": 60,
 "url": "https://example.com/url/of/ad.html",
 "body": {
   "sourceFile": null,
   "lineNumber": null,
   "columnNumber": null,
   "id": "HeavyAdIntervention",
   "message": "Ad was removed because its CPU usage exceeded the limit. See https://www.chromestatus.com/feature/4800491902992384"
 }
}]

JavaScript API menyediakan ReportingObserver dengan metode observe() yang dapat digunakan untuk memicu callback yang disediakan pada intervensi. Hal ini dapat berguna jika Anda ingin melampirkan informasi tambahan ke laporan untuk membantu proses debug.

// callback that will handle intervention reports
function sendReports(reports) {
  for (let report of reports) {
    // Log the `report` json via your own reporting process
    navigator.sendBeacon('https://report.example/your-endpoint', report);
  }
}

// create the observer with the callback
const observer = new ReportingObserver(
  (reports, observer) => {
    sendReports(reports);
  },
  { buffered: true }
);

// start watching for interventions
observer.observe();

Namun, karena intervensi benar-benar akan menghapus halaman dari iframe, Anda harus menambahkan alat pengaman untuk memastikan laporan benar-benar diambil sebelum halaman sepenuhnya ditutup, misalnya, iklan dalam iframe. Untuk melakukannya, Anda dapat mengaitkan callback yang sama ke peristiwa pagehide.

window.addEventListener('pagehide', (event) => {
  // pull all pending reports from the queue
  let reports = observer.takeRecords();
  sendReports(reports);
});

Perlu diingat bahwa, untuk melindungi pengalaman pengguna, peristiwa pagehide membatasi jumlah pekerjaan yang dapat terjadi di dalamnya. Misalnya, mencoba mengirim permintaan fetch() dengan laporan akan menyebabkan permintaan tersebut dibatalkan. Anda harus menggunakan navigator.sendBeacon() untuk mengirim laporan tersebut, dan meskipun demikian, hal ini hanya merupakan upaya terbaik oleh browser, bukan jaminan.

JSON yang dihasilkan dari JavaScript mirip dengan yang dikirim pada permintaan POST:

[
  {
    type: 'intervention',
    url: 'https://example.com/url/of/ad.html',
    body: {
      sourceFile: null,
      lineNumber: null,
      columnNumber: null,
      id: 'HeavyAdIntervention',
      message:
        'Ad was removed because its network usage exceeded the limit. See https://www.chromestatus.com/feature/4800491902992384',
    },
  },
];

Mendiagnosis penyebab intervensi

Konten iklan hanyalah konten web, jadi gunakan alat seperti Lighthouse untuk mengaudit keseluruhan performa konten Anda. Audit yang dihasilkan memberikan panduan inline tentang peningkatan. Anda juga dapat merujuk ke koleksi web.dev/fast.

Sebaiknya uji iklan dalam konteks yang lebih terisolasi. Anda dapat menggunakan opsi URL kustom di https://heavy-ads.glitch.me untuk mengujinya dengan iframe siap pakai yang diberi tag iklan. Anda dapat menggunakan Chrome DevTools untuk memvalidasi konten yang telah diberi tag sebagai iklan. Di panel Rendering (dapat diakses melalui menu tiga titik , lalu More Tools > Rendering), pilih "Highlight Ad Frames". Jika menguji konten di jendela tingkat teratas atau konteks lain yang tidak diberi tag sebagai iklan, intervensi tidak akan dipicu, tetapi Anda masih dapat memeriksa nilai minimum secara manual.

Status iklan frame juga ditampilkan di panel Elemen tempat anotasi ad ditambahkan setelah tag <iframe> pembuka. Hal ini juga terlihat di panel Aplikasi pada bagian Frame, tempat frame yang diberi tag iklan akan menyertakan atribut "Status Iklan".

Penggunaan jaringan

Buka panel Jaringan di Chrome DevTools untuk melihat aktivitas jaringan secara keseluruhan untuk iklan. Anda harus memastikan opsi "Disable cache" dicentang untuk mendapatkan hasil yang konsisten selama pemuatan berulang.

Panel Jaringan di DevTools.
Panel Jaringan di DevTools.

Nilai yang ditransfer di bagian bawah halaman akan menampilkan jumlah yang ditransfer untuk seluruh halaman. Sebaiknya gunakan input Filter di bagian atas untuk membatasi permintaan hanya ke permintaan yang terkait dengan iklan.

Jika Anda menemukan permintaan awal untuk iklan, misalnya, sumber untuk iframe, Anda juga dapat menggunakan tab Initiator dalam permintaan untuk melihat semua permintaan yang dipicunya.

Tab inisiator untuk permintaan.
Tab inisiator untuk permintaan.

Mengurutkan daftar permintaan secara keseluruhan menurut ukuran adalah cara yang baik untuk menemukan resource yang terlalu besar. Penyebab umum mencakup gambar dan video yang belum dioptimalkan.

Urutkan permintaan menurut ukuran respons.
Urutkan permintaan berdasarkan ukuran respons.

Selain itu, pengurutan menurut nama dapat menjadi cara yang baik untuk menemukan permintaan berulang. Hal ini mungkin bukan satu resource besar yang memicu intervensi, tetapi sejumlah besar permintaan berulang yang secara bertahap melebihi batas.

Penggunaan CPU

Panel Performa di DevTools akan membantu mendiagnosis masalah penggunaan CPU. Langkah pertama adalah membuka menu Setelan Perekaman. Gunakan dropdown CPU untuk memperlambat CPU sebanyak mungkin. Intervensi untuk CPU jauh lebih mungkin dipicu pada perangkat dengan daya lebih rendah daripada mesin pengembangan kelas atas.

Aktifkan pembatasan jaringan dan CPU di panel Performa.
Aktifkan throttling jaringan dan CPU di panel Performa.

Selanjutnya, klik tombol Record untuk mulai merekam aktivitas. Sebaiknya lakukan eksperimen terkait waktu dan durasi perekaman, karena rekaman aktivitas yang panjang dapat memerlukan waktu yang cukup lama untuk dimuat. Setelah rekaman dimuat, Anda dapat menggunakan linimasa atas untuk memilih bagian rekaman. Fokuskan pada area pada grafik berwarna kuning, ungu, atau hijau solid yang mewakili pembuatan skrip, rendering, dan gambar.

Ringkasan rekaman aktivitas di panel Performa.
Ringkasan rekaman aktivitas di panel Performa.

Jelajahi tab Bottom-Up, Call Tree, dan Event Log di bagian bawah. Mengurutkan kolom tersebut berdasarkan Self Time dan Total Time dapat membantu mengidentifikasi bottleneck dalam kode.

Urutkan berdasarkan Waktu Sendiri di tab Bottom-Up.
Urutkan menurut Waktu Mandiri di tab Bottom-Up.

File sumber terkait juga ditautkan di sana, sehingga Anda dapat mengikutinya ke panel Sumber untuk memeriksa biaya setiap baris.

Waktu eksekusi ditampilkan di panel Sumber.
Waktu eksekusi ditampilkan di panel Sumber.

Masalah umum yang perlu dicari di sini adalah animasi yang tidak dioptimalkan dengan baik yang memicu tata letak dan gambar yang berkelanjutan atau operasi mahal yang tersembunyi dalam library yang disertakan.

Cara melaporkan intervensi yang salah

Chrome memberi tag pada konten sebagai iklan dengan mencocokkan permintaan resource dengan daftar filter. Jika konten non-iklan telah diberi tag, sebaiknya ubah kode tersebut agar tidak cocok dengan aturan pemfilteran. Jika Anda mencurigai bahwa intervensi telah diterapkan dengan tidak benar, Anda dapat mengajukan masalah melalui template ini. Pastikan Anda telah mengambil contoh laporan intervensi dan memiliki URL contoh untuk mereproduksi masalah tersebut.