إنّ الإعلانات التي تستهلك قدرًا غير متناسب من الموارد على الجهاز تؤثر سلبًا في تجربة المستخدم، بدءًا من التأثيرات الواضحة المتمثّلة في خفض الأداء ووصولاً إلى النتائج الأقل ظهورًا، مثل استنزاف البطارية أو استهلاك أذونات معدل نقل البيانات. وتتراوح هذه الإعلانات بين الإعلانات الضارّة بشكل نشط، مثل تطبيقات تعدين العملات المشفّرة، والإعلانات التي تعرض محتوًى أصليًا يتضمّن أخطاء غير مقصودة أو مشاكل في الأداء.
يضع Chrome حدودًا على الموارد التي يمكن للإعلان استخدامها ويزيل هذا الإعلان في حال تجاوز الحدود. يمكنك قراءة الإشعار على مدونة Chromium للحصول على مزيد من التفاصيل. الآلية المستخدَمة لإزالة الإعلانات هي تداخل الإعلانات الذي يستهلك موارد الشبكة.
معايير الإعلانات ذات الاستهلاك المكثّف للموارد
يُعتبر الإعلان ثقيلًا إذا لم يتفاعل معه المستخدم (مثلاً، لم ينقر عليه) وكان يستوفي أيًا مما يلي المعايير:
- استخدام سلسلة المحادثات الرئيسية لأكثر من 60 ثانية في المجمل
- استخدام سلسلة المحادثات الرئيسية لأكثر من 15 ثانية في أي فترة زمنية تبلغ 30 ثانية
- استخدام أكثر من 4 ميغابايت من معدل نقل البيانات للشبكة
تُحتسَب جميع الموارد المستخدَمة من قِبل أيّ إطارات iframe فرعية لإطار الإعلان ضمن الحدود المسموح بها للتدخل في هذا الإعلان. يُرجى العلم أنّ حدود وقت المعالجة في سلسلة المهام الرئيسية ليست هي نفسها الوقت المنقضي منذ تحميل الإعلان. تُحدِّد الحدود القصوى المدة التي تستغرِقها وحدة المعالجة المركزية لتنفيذ رمز الإعلان.
اختبار التدخل
تم طرح التدخل في الإصدار 85 من Chrome، ولكن يتم تلقائيًا إضافة بعض التشويش وvariability إلى الحدود الدنيا لحماية خصوصية المستخدم.
يؤدي ضبط chrome://flags/#heavy-ad-privacy-mitigations
على إيقاف إلى إزالة
هذه الحماية، ما يعني أنّه يتم تطبيق القيود بشكل حتمي،
وفقًا للحدود فقط. من المفترض أن يسهّل ذلك تصحيح الأخطاء والاختبار.
عند بدء التدخل، من المفترض أن يظهر المحتوى في إطار iframe لإعلان ثقيل تم استبداله برسالة تمّت إزالة الإعلان. إذا نقرت على رابط التفاصيل المضمّن، ستظهر لك رسالة توضّح ما يلي: "يستخدم هذا الإعلان موارد كثيرة جدًا لجهازك، لذلك أزاله متصفّح Chrome."
يمكنك الاطّلاع على التدخل الذي تم تطبيقه على نموذج المحتوى على heavy-ads.glitch.me. يمكنك أيضًا استخدام الموقع الإلكتروني التجريبي هذا لتحميل عنوان URL عشوائي كطريقة سريعة لاختبار المحتوى الخاص بك.
يُرجى العِلم أنّ هناك عددًا من الأسباب التي قد تمنع تطبيق أحد التدخلات أثناء الاختبار.
- سيؤدي إعادة تحميل الإعلان نفسه ضمن الصفحة نفسها إلى استثناء هذه التركيبة من التدخل. يمكن أن يساعدك محو سجلّ التصفّح وفتح الصفحة في علامة تبويب جديدة.
- تأكَّد من أنّ الصفحة لا تزال في المقدّمة. سيؤدي وضع الصفحة في الخلفية (التبديل إلى نافذة أخرى) إلى إيقاف قوائم المهام للصفحة مؤقتًا، وبالتالي لن يؤدي ذلك إلى بدء تدخل وحدة المعالجة المركزية.
- تأكَّد من عدم النقر على محتوى الإعلان أثناء الاختبار، ولن يتم تطبيق التدخل على المحتوى الذي يتلقّى أي تفاعل من المستخدم.
الإجراءات المطلوبة منك
إذا كنت تعرض إعلانات من مقدّم خدمة خارجي على موقعك الإلكتروني
ليس عليك اتّخاذ أي إجراء، ولكن يُرجى العِلم أنّه قد تظهر للمستخدمين إعلانات تتجاوز الحدود المُزالة عند زيارتهم موقعك الإلكتروني.
إذا كنت تعرض إعلانات الطرف الأول على موقعك الإلكتروني أو تقدّم إعلانات لعرض إعلانات تابعة لجهة خارجية
تابِع القراءة للتأكّد من تنفيذ عمليات المراقبة اللازمة من خلال 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 API 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();
ومع ذلك، بما أنّ التدخل سيؤدي إلى إزالة الصفحة من الإطار المضمّن
، عليك إضافة عنصر أمان لضمان تسجيل التقرير بالتأكيد
قبل اختفاء الصفحة تمامًا، مثل إعلان ضمن إطار مضمّن. لهذا الغرض، يمكنك ربط طلب الاستدعاء نفسه بالحدث 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 لاختبار ذلك باستخدام ملف div مضمّن مُعدّ مسبقًا ومُصنَّف كإعلان. يمكنك استخدام "أدوات مطوري البرامج في Chrome" للتحقّق من صحة المحتوى الذي تم وضع علامة عليه كإعلان. في لوحة العرض (التي يمكن الوصول إليها من خلال قائمة النقاط الثلاث ⋮ ثم مزيد من الأدوات > العرض)، اختَر تمييز إطارات الإعلان . في حال اختبار المحتوى في نافذة المستوى الأعلى أو سياق آخر لم يتم فيه تمييزه كإعلان، لن يتم بدء التدخل، ولكن سيظل بإمكانك التحقّق يدويًا من الحدود الدنيا.
يتم أيضًا عرض حالة الإعلان في اللقطة في لوحة العناصر حيث تتم إضافة تعليق توضيحي ad
بعد علامة الفتح <iframe>
. يظهر ذلك أيضًا في
لوحة التطبيق ضمن قسم اللقطات، حيث ستشمل اللقطات التي تمّ وضع علامة عليها للإعلان
سمة "حالة الإعلان".
استخدام الشبكة
افتح لوحة الشبكة في "أدوات مطوّري البرامج في Chrome" للاطّلاع على النشاط الإجمالي للشبكة للإعلان. عليك التأكّد من وضع علامة في المربّع بجانب الخيار "إيقاف ذاكرة التخزين المؤقت" للحصول على نتائج متّسقة عند إجراء عمليات تحميل متكرّرة.
ستعرض لك القيمة المنقولة في أسفل الصفحة المبلغ المنقول للصفحة بأكملها. ننصحك باستخدام إدخال فلتر في أعلى الصفحة لحصر الطلبات على الطلبات ذات الصلة بالإعلان فقط.
إذا عثرت على الطلب الأوّلي للإعلان، على سبيل المثال، مصدر الإطار المضمّن، يمكنك أيضًا استخدام علامة التبويب المشغِّل ضمن الطلب للاطّلاع على كل الطلبات التي يُطلقها.
إنّ ترتيب القائمة الكاملة للطلبات حسب الحجم هو طريقة جيدة لرصد موارد كبيرة جدًا. وتشمل الأسباب الشائعة الصور والفيديوهات التي لم تتم تحسينها.
بالإضافة إلى ذلك، يمكن أن تكون طريقة الترتيب حسب الاسم طريقة جيدة لرصد الطلبات المتكررة. قد لا يكون هناك مورد واحد كبير يتسبب في التدخل، بل قد يكون هناك عدد كبير من الطلبات المتكررة التي تتجاوز الحد الأقصى بشكل تدريجي.
استخدام وحدة المعالجة المركزية (CPU)
ستساعدك لوحة الأداء في أدوات مطوّري البرامج في تشخيص مشاكل استخدام وحدة المعالجة المركزية. تمثل الخطوة الأولى في فتح قائمة إعدادات الالتقاط. استخدِم القائمة المنسدلة وحدة المعالجة المركزية (CPU) لإبطاء وحدة المعالجة المركزية قدر الإمكان. من المرجّح أن يتم تفعيل التدخلات في وحدة المعالجة المركزية على الأجهزة ذات الطاقة المنخفضة أكثر من أجهزة التطوير المتطوّرة.
بعد ذلك، انقر على الزر تسجيل لبدء تسجيل النشاط. يمكنك تجربتَي تحديد وقت التسجيل ومدته، لأنّ عملية تحميل عملية التتبّع الطويلة قد تستغرق وقتًا طويلاً. بعد تحميل التسجيل، يمكنك استخدام المخطط الزمني في أعلى الشاشة للقيام بما يلي: اختيار جزء من التسجيل. ركِّز على المناطق في الرسم البياني التي تظهر باللون الأصفر أو البنفسجي أو الأخضر والتي تمثّل النص البرمجي والعرض والتلوين.
اطّلِع على علامات التبويب من الأسفل إلى الأعلى و شجرة المكالمات و سجلّ الأحداث في أسفل الصفحة. يمكن أن تساعدك ترتيب هذه الأعمدة حسب الوقت المستغرَق في تنفيذ الإجراء والوقت الإجمالي في تحديد العوامل التي تؤثّر سلبًا في الأداء في الرمز البرمجي.
يتم أيضًا ربط ملف المصدر المرتبط هناك، حتى تتمكّن من اتّباعه إلى لوحة المصادر لفحص تكلفة كل سطر.
تشمل المشاكل الشائعة التي يجب البحث عنها في هذه الحالة الرسومات المتحركة التي تم تحسينها بشكلٍ سيئ التي تؤدي إلى عمليات مستمرة لتنسيق ورسم الصور أو عمليات باهظة التكلفة مخفية ضمن مكتبة مضمّنة.
كيفية الإبلاغ عن التدخلات غير الصحيحة
يضع Chrome علامة على المحتوى كإعلان من خلال مطابقة طلبات الموارد مع قائمة الفلاتر. إذا تم وضع علامة على محتوى غير إعلاني، ننصحك بتغيير هذا الرمز لتجنّب مطابقة قواعد الفلترة. إذا كنت تشكّ في أنّه تم تطبيق تدخّل بشكلٍ غير صحيح، يمكنك إبلاغنا بالمشكلة من خلال هذا النموذج. يُرجى التأكّد من تسجيل مثال على تقرير التدخل والاحتفاظ بنماذج عناوين URL لإعادة إنتاج المشكلة.