التعامل مع التدخلات الإعلانية الشديدة

الإعلانات التي تستهلك قدرًا غير متناسب من الموارد على أحد الأجهزة تؤثر سلبًا في تجربة المستخدم، بدءًا من الآثار الواضحة لتدهور الأداء والنتائج الأقل وضوحًا مثل استنزاف البطارية أو استهلاك مخصصات معدل نقل البيانات. وتتراوح هذه الإعلانات بين البرامج الضارة بشكل نشط، مثل مناجم العملات المشفّرة، وصولاً إلى المحتوى الحقيقي الذي يتضمّن أخطاءً غير مقصودة أو مشاكل في الأداء.

يضع Chrome حدودًا للموارد التي قد يستخدمها الإعلان، ويُلغي تحميل هذا الإعلان في حال تجاوز هذه الحدود. يمكنك قراءة الإعلان على مدونة Chromium للاطّلاع على مزيد من التفاصيل. الآلية المستخدمة لإلغاء تحميل الإعلانات هي التأثير وسط الإعلانات.

معايير الإعلانات ذات الحجم الكبير

يُعتبر الإعلان ثقيلًا إذا لم يتفاعل المستخدم معه (على سبيل المثال، لم ينقر عليه أو ينقر عليه) ويستوفي أيًا من المعايير التالية:

  • استخدام سلسلة المحادثات الرئيسية لمدّة إجمالية أكثر من 60 ثانية
  • استخدام سلسلة التعليمات الرئيسية لمدة أكثر من 15 ثانية في أي نافذة مدتها 30 ثانية
  • يستخدم أكثر من 4 ميغابايت من معدل نقل البيانات للشبكة.

يتم احتساب جميع الموارد التي تستخدمها أي إطارات iframe تابعة لإطار الإعلان ضمن حدود التداخل في ذلك الإعلان. من المهمّ ملاحظة أنّ الحدود الزمنية لسلسلة المحادثات الرئيسية تختلف عن الوقت المنقضي منذ تحميل الإعلان. تكمن الحدود في المدة التي تستغرقها وحدة المعالجة المركزية (CPU) لتنفيذ رمز الإعلان.

اختبار التدخل

تم نقل التدخل في الإصدار 85 من Chrome، ولكن تم تلقائيًا إضافة بعض التشويش والتغيّر إلى الحدود لحماية خصوصية المستخدم.

ويؤدي ضبط السياسة chrome://flags/#heavy-ad-privacy-mitigations على غير مفعَّل إلى إزالة إجراءات الحماية هذه، ما يعني أنه يتم تطبيق القيود بشكل حاسم وفقًا للحدود البحتة. ومن المفترض أن يؤدي هذا إلى تسهيل عملية تصحيح الأخطاء والاختبار.

وعند بدء التدخل، من المفترض أن يظهر المحتوى في إطار iframe لإعلان مكثف تم استبداله برسالة تمت إزالة الإعلان. إذا اتبعت رابط التفاصيل المضمن، ستظهر لك رسالة توضح: "يستخدم هذا الإعلان عددًا كبيرًا جدًا من الموارد لجهازك، لذلك قام Chrome بإزالته".

يمكنك الاطّلاع على التدخل المطبَّق على نموذج المحتوى على heavy-ads.glitch.me. يمكنك أيضًا استخدام موقع الاختبار هذا لتحميل عنوان URL عشوائي كطريقة سريعة لاختبار محتوى موقعك الإلكتروني.

كن على دراية عند إجراء الاختبار بأن هناك عددًا من الأسباب التي قد تحول دون تطبيق التدخل.

  • ستؤدي إعادة تحميل الإعلان نفسه في الصفحة نفسها إلى إعفاء هذا الدمج من التدخل. يمكن أن يساعد محو سجل التصفح وفتح الصفحة في علامة جديدة في هذا الأمر.
  • عليك التأكّد من إبقاء الصفحة محل التركيز، إذ إنّ تشغيل خلفية الصفحة (التبديل إلى نافذة أخرى) سيؤدي إلى إيقاف قوائم انتظار المهام مؤقتًا للصفحة، وبالتالي لن يؤدي إلى تدخل وحدة المعالجة المركزية (CPU).
  • تأكد من عدم النقر على محتوى الإعلان أو النقر عليه أثناء الاختبار - لن يتم تطبيق التدخل على المحتوى الذي يتلقّى أي تفاعل من جانب المستخدم.

الإجراءات المطلوبة منك

أنّك تعرض إعلانات من مقدّم خدمة خارجي على موقعك الإلكتروني

لا يلزم اتّخاذ أي إجراء، ولكن يُرجى العلم بأنّ المستخدمين قد يشاهدون إعلانات تتجاوز الحدود التي تمّت إزالتها عند زيارة موقعك الإلكتروني.

تعرض إعلانات الطرف الأول على موقعك الإلكتروني أو إعلانات صورية لجهة خارجية

يُرجى مواصلة القراءة للتأكّد من تنفيذ إجراءات المراقبة اللازمة عبر واجهة Reporting API للتدخلات الإعلانية المُجهدة.

إنشاء محتوى إعلاني أو استخدام أداة لإنشاء محتوى الإعلانات

يُرجى متابعة القراءة للتأكّد من أنّك على دراية بكيفية اختبار المحتوى الخاص بك بحثًا عن مشاكل في الأداء واستخدام الموارد. يجب أيضًا الرجوع إلى الإرشادات الواردة على المنصّات الإعلانية التي تختارها لأنّها قد تقدّم نصائح أو قيود فنية إضافية. على سبيل المثال، يمكنك الاطّلاع على إرشادات Google لتصميمات الإعلانات الصورية. ننصحك بإنشاء حدود قابلة للضبط مباشرةً في أدوات التأليف لمنع عرض الإعلانات ذات الأداء الضعيف

ماذا يحدث عند إزالة إعلان؟

يتم الإبلاغ عن التدخل في Chrome من خلال واجهة برمجة التطبيقات Reporting API المناسبة لنوع التقرير intervention. يمكنك استخدام Reporting API لتلقّي إشعارات بشأن التدخلات إما من خلال طلب POST إلى نقطة نهاية إعداد التقارير أو ضمن JavaScript.

ويتم تشغيل هذه التقارير في إطار iframe الأساسي الذي تم وضع علامات على الإعلانات به جنبًا إلى جنب مع جميع العناصر التابعة له، أي كل إطار تم إلغاء تحميله بالتدخل. هذا يعني أنّه إذا كان مصدر الإعلان هو مصدر تابع لجهة خارجية، أي إطار iframe على مواقع إلكترونية مختلفة، تقع على عاتق تلك الجهة الخارجية (مثل مزوّد الإعلان) مسؤولية معالجة التقرير.

لإعداد الصفحة لإعداد تقارير HTTP، يجب أن تتضمّن الاستجابة عنوان Report-To:

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

سيتضمن طلب POST الذي يتم تشغيله تقريرًا مثل هذا:

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 لـ ReportingObserver طريقة observe() التي يمكن استخدامها لتشغيل معاودة الاتصال المقدَّمة بشأن التدخلات. وقد يكون هذا مفيدًا إذا كنت تريد إرفاق معلومات إضافية بالتقرير للمساعدة في تصحيح الأخطاء.

// 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();

ومع ذلك، ولأنّ التدخل سيؤدي إلى إزالة الصفحة من iframe حرفيًا، يجب إضافة خطأ آمن لضمان تسجيل التقرير بالتأكيد قبل أن تختفي تمامًا الصفحة، مثلاً إعلان ضمن iframe. لإجراء ذلك، يمكنك جذب معاودة الاتصال نفسها إلى الحدث "pagehide".

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

يُرجى العِلم أنّ حدث pagehide يحدّ من حجم العمل الذي يمكن تنفيذه في إطار الحفاظ على تجربة المستخدم. على سبيل المثال، ستؤدي محاولة إرسال طلب fetch() مع التقارير إلى إلغاء هذا الطلب. عليك استخدام navigator.sendBeacon() لإرسال هذا التقرير، وبعد ذلك نقدّم لك أفضل جهد من المتصفّح ولا نضمن لك.

ويكون تنسيق JSON الناتج من JavaScript مشابهًا للتنسيق الذي تم إرساله في طلب 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',
    },
  },
];

تشخيص سبب التدخل

المحتوى الإعلاني هو مجرد محتوى على الويب، لذلك عليك الاستفادة من أدوات مثل Lighthouse لتدقيق الأداء العام للمحتوى الخاص بك. وتوفر عمليات التدقيق الناتجة إرشادات مضمَّنة حول التحسينات. يمكنك أيضًا الاطّلاع على مجموعة web.dev/fast.

قد يكون من المفيد اختبار إعلانك في سياق أكثر عزلة. يمكنك استخدام خيار عنوان URL المخصص على https://heavy-ads.glitch.me لاختبار هذا باستخدام إطار iframe جاهز وعليه علامات إعلانية. يمكنك استخدام "أدوات مطوري البرامج في Chrome" للتحقّق من أنّ المحتوى قد تم وضع علامة عليه كإعلان. في لوحة العرض (التي يمكن الوصول إليها من خلال قائمة الخيارات الإضافية ثم المزيد من الأدوات > العرض) اختر "تمييز إطارات الإعلانات". في حال اختبار المحتوى في نافذة ذات المستوى الأعلى أو في سياق آخر لم يتم وضع علامة عليه كإعلان، لن يتم بدء التدخّل، ولكن سيظل بإمكانك التحقّق يدويًا من الحدود الدنيا.

يتم أيضًا عرض حالة إعلان الإطار في لوحة العناصر حيث تتم إضافة التعليق التوضيحي ad بعد علامة الفتح <iframe>. ويظهر هذا أيضًا في لوحة التطبيق ضمن قسم الإطارات، حيث ستشتمل الإطارات الموضوع عليها علامات بالإعلان سمة "حالة الإعلان".

استخدام الشبكة

انتقِل إلى لوحة الشبكة في "أدوات مطوري البرامج في Chrome" للاطّلاع على نشاط الشبكة بشكل عام للإعلان. ننصحك بالتأكد من تحديد الخيار "إيقاف ذاكرة التخزين المؤقت" للحصول على نتائج متّسقة في عمليات التحميل المتكرّرة.

لوحة الشبكة في &quot;أدوات مطوري البرامج&quot;
لوحة الشبكة في "أدوات مطوري البرامج"

ستعرض لك القيمة المنقولة أسفل الصفحة المبلغ الذي تم تحويله للصفحة بأكملها. يمكنك استخدام إدخال فلتر في أعلى الصفحة لحصر الطلبات على تلك المتعلقة بالإعلان فقط.

إذا عثرت على الطلب الأولي للإعلان، على سبيل المثال، مصدر إطار iframe، يمكنك أيضًا استخدام علامة التبويب المُنشئ ضمن الطلب للاطّلاع على جميع الطلبات التي يؤديها.

علامة التبويب &quot;المُنشئ&quot; لأحد الطلبات
علامة التبويب "المُنشئ" لطلب ما.

يعد فرز القائمة الإجمالية للطلبات حسب الحجم طريقة جيدة لاكتشاف الموارد الكبيرة جدًا. من أكثر الأسباب شيوعًا لذلك استخدام الصور والفيديوهات التي لم يتم تحسينها.

يمكنك ترتيب الطلبات حسب حجم الردود.
ترتيب الطلبات حسب حجم الردود:

بالإضافة إلى ذلك، يمكن أن يكون الفرز حسب الاسم طريقة جيدة لاكتشاف الطلبات المتكررة. قد لا يكون مصدرًا كبيرًا واحدًا يتسبب في عملية التدخل، ولكن قد يتضمن عددًا كبيرًا من الطلبات المتكرّرة التي تتجاوز الحدّ الأقصى تدريجيًا.

استخدام وحدة المعالجة المركزية (CPU)

ستساعد لوحة الأداء في "أدوات مطوري البرامج" في تشخيص مشاكل استخدام وحدة المعالجة المركزية (CPU). الخطوة الأولى هي فتح قائمة الالتقاط. استخدِم القائمة المنسدلة وحدة المعالجة المركزية (CPU) لإبطاء سرعة وحدة المعالجة المركزية (CPU) قدر الإمكان. يزيد احتمال ظهور تدخلات وحدة المعالجة المركزية (CPU) على الأجهزة ذات الطاقة المنخفضة جدًا مقارنةً بآلات التطوير المتطورة.

يمكنك تفعيل تقييد الشبكة ووحدة المعالجة المركزية (CPU) في لوحة &quot;الأداء&quot;.
فعِّل ميزة تقييد الشبكة ووحدة المعالجة المركزية (CPU) من خلال لوحة "الأداء".

بعد ذلك، انقر على زر التسجيل لبدء تسجيل النشاط. ننصحك بتجربة الوقت الذي ستقضيه في التسجيل ومدته، إذ يمكن أن يستغرق تحميل النتائج وقتًا طويلاً. بعد تحميل التسجيل، يمكنك استخدام المخطط الزمني العلوي لاختيار جزء من التسجيل. ركز على المناطق على الرسم البياني باللون الأصفر أو الأرجواني أو الأخضر الثابت التي تمثل النصوص والعرض والرسم.

ملخّص عملية تتبُّع في لوحة &quot;الأداء&quot;
ملخّص عملية التتبّع في لوحة "الأداء"

اطّلِع على علامات التبويب من أسفل إلى أعلى وشجرة المكالمات وسجلّ الأحداث في أسفل الصفحة. يمكن أن يساعد ترتيب هذه الأعمدة حسب الوقت الذاتي وإجمالي الوقت في تحديد المؤثِّرات السلبية في التعليمة البرمجية.

فرز حسب &quot;وقت ذاتي&quot; في علامة التبويب &quot;من أسفل إلى أعلى&quot;.
الترتيب حسب "الوقت الذاتي" في علامة التبويب "من أسفل إلى أعلى"

ويكون ملف المصدر المرتبط مرتبطًا به أيضًا، حتى يمكنك متابعته إلى لوحة Sources (المصادر) للاطّلاع على تكلفة كل سطر.

وقت التنفيذ المعروض في لوحة &quot;المصادر&quot;
وقت التنفيذ المعروض في لوحة "المصادر"

تتمثّل المشاكل الشائعة التي يجب البحث عنها هنا في الصور المتحركة التي تم تحسينها بشكل سيئ والتي تشغِّل باستمرار التنسيق والطلاء أو العمليات المكلفة التي يتم إخفاؤها داخل مكتبة مضمّنة.

كيفية الإبلاغ عن التدخلات غير الصحيحة

يضع Chrome علامة على المحتوى كإعلان من خلال مطابقة طلبات الموارد مع قائمة فلاتر. إذا وضعت علامات على المحتوى غير الإعلاني، ننصحك بتغيير ذلك الرمز لتجنّب مطابقة قواعد الفلترة. إذا كنت تشك في أنه تم تطبيق أحد الإجراءات بشكل غير صحيح، يمكنك طرح مشكلة من خلال هذا النموذج. يُرجى التأكد من حصولك على مثال لتقرير التدخل والحصول على نموذج عنوان URL لإعادة إظهار المشكلة.