معرفة عمليات التنقّل التي تم حظرها من استخدام bfcache، وسبب ذلك
تُبلغ سمة notRestoredReasons
، التي تمت إضافتها إلى فئة PerformanceNavigationTiming
، عن معلومات حول ما إذا تم حظر استخدام الإطارات المتوفّرة في المستند من bfcache أثناء التنقّل، والسبب في ذلك. يمكن للمطوّرين استخدام هذه المعلومات لتحديد الصفحات التي تحتاج إلى تعديلات لجعلها متوافقة مع bfcache، ما يؤدي إلى تحسين أداء الموقع الإلكتروني.
الوضع الحالي
تم طرح واجهة برمجة التطبيقات notRestoredReasons
في الإصدار 123 من Chrome، ويتم طرحها تدريجيًا.
المفاهيم وطريقة الاستخدام
توفّر المتصفّحات الحديثة ميزة تحسين للتنقّل في السجلّ تُعرف باسم التخزين المؤقت للصفحات (bfcache). يتيح ذلك تجربة تحميل فورية عندما يعود المستخدمون إلى صفحة سبق لهم زيارتها. يمكن حظر الصفحات من الدخول إلى ذاكرة التخزين المؤقت bfcache أو إزالتها منها لأسباب مختلفة، بعضها مطلوب بموجب مواصفة وبعضها خاص بعمليات تنفيذ المتصفّح.
في السابق، لم يكن بإمكان المطوّرين معرفة سبب حظر صفحاتهم من استخدام ذاكرة التخزين المؤقت bfcache في الميدان، على الرغم من توفّر اختبار في أدوات مطوّري برامج Chrome. لتفعيل المراقبة في الحقل، تم توسيع فئة PerformanceNavigationTiming
لتشمل سمة notRestoredReasons
. يؤدي ذلك إلى عرض عنصر يحتوي على معلومات ذات صلة بالإطار العلوي وجميع إطارات iframe المتوفّرة في المستند:
- أسباب حظر استخدام bfcache
تفاصيل مثل الإطار
id
وname
للمساعدة في تحديد إطارات iframe في ملف HTMLويسمح ذلك للمطوّرين باتخاذ إجراء لجعل هذه الصفحات متوافقة مع bfcache، ما يؤدي إلى تحسين أداء الموقع الإلكتروني.
أمثلة
يمكن الحصول على مثيل PerformanceNavigationTiming
من ميزات مثل Performance.getEntriesByType()
وPerformanceObserver
.
على سبيل المثال، يمكنك استدعاء الدالة التالية لعرض جميع عناصر PerformanceNavigationTiming
المتوفّرة في المخطط الزمني للأداء وتسجيل notRestoredReasons
الخاصة بها:
function returnNRR() {
const navEntries = performance.getEntriesByType("navigation");
for (let i = 0; i < navEntries.length; i++) {
console.log(`Navigation entry ${i}`);
let navEntry = navEntries[i];
console.log(navEntry.notRestoredReasons);
}
}
بالنسبة إلى عمليات التنقّل في السجلّ، تعرض السمة PerformanceNavigationTiming.notRestoredReasons
عنصرًا بالبنية التالية التي تمثّل حالة الحظر للإطار من المستوى الأعلى:
{
children: [],
id: null,
name: null,
reasons: [
{"reason", "unload-listener"}
],
src: null,
url: "https://www.example.com/page/"
}
في ما يلي السمات:
children
- صفيف من العناصر التي تمثّل حالة الحظر لأيّ إطارات من المصدر نفسه تم تضمينها في الإطار من المستوى الأعلى. يتضمّن كل عنصر البنية نفسها للعنصر الرئيسي، ما يتيح تمثيل أي عدد من مستويات اللقطات المضمّنة داخل العنصر بشكل متكرّر. إذا لم يكن للإطار عناصر فرعية، ستكون الصفيف فارغة.
id
- سلسلة تمثّل قيمة سمة
id
للإطار (على سبيل المثال<iframe id="foo" src="...">
). إذا لم يكن للإطار سمةid
، ستكون القيمةnull
. بالنسبة إلى الصفحة ذات المستوى الأعلى، يكون هذا الرقمnull
. name
- سلسلة تمثّل قيمة سمة
name
للّقطة (على سبيل المثال<iframe name="bar" src="...">
). إذا لم تتضمّن اللقطةname
، ستكون القيمة سلسلة فارغة. بالنسبة إلى الصفحة ذات المستوى الأعلى، يكون هذا الرقمnull
. reasons
- صفيف من السلاسل يمثّل كلّ منها سبب حظر الصفحة التي تمّ التنقّل إليها من استخدام bfcache هناك العديد من الأسباب المختلفة التي قد تؤدي إلى حظر التطبيق. راجِع قسم أسباب الحظر للحصول على مزيد من التفاصيل.
src
- سلسلة تمثّل مسار مصدر الإطار (على سبيل المثال
<iframe src="b.html">
). إذا لم يتضمّن الإطارsrc
، ستكون القيمة سلسلة فارغة. بالنسبة إلى الصفحة ذات المستوى الأعلى، يكون هذا الرقمnull
. url
- سلسلة تمثّل عنوان URL للصفحة/إطار iframe الذي تم الانتقال إليه
بالنسبة إلى عناصر PerformanceNavigationTiming
التي لا تمثّل عمليات التنقّل في السجلّ، ستُعرِض السمة notRestoredReasons
القيمة null
.
يُرجى العلم أنّ notRestoredReasons
يعرض أيضًا القيمة null
في حال عدم توفّر أسباب لحظر المحتوى، لذا فإنّ ظهور القيمة null
لا يشير إلى ما إذا تم استخدام bfcache أو لا. ولإجراء ذلك، عليك استخدام السمة event.persisted
.
الإبلاغ عن حظر ميزة "التخزين المؤقت للصفحات" في إطارات المصدر نفسه
عندما تحتوي الصفحة على إطارات من المصدر نفسه، ستحتوي قيمة notRestoredReasons
المعروضة على عنصر داخل السمة children
يمثّل حالة الحظر لكل إطار مضمّن.
على سبيل المثال:
{
children: [
{
children: [],
id: "iframe-id",
name: "iframe-name",
reasons: [],
src: "./index.html",
url: "https://www.example.com/"
},
{
children: [],
id: "iframe-id2",
name: "iframe-name2",
reasons: [
{"reason": "unload-listener"}
],
src: "./unload-examples.html",
url: "https://www.example.com/unload-examples.html"
},
],
id: null,
name: null,
reasons: [],
src: null,
url:"https://www.example.com"
}
الإبلاغ عن حظر ميزة "التخزين المؤقت للصفحات" في إطارات المواقع الإلكترونية المختلفة المصدر
عندما تتضمّن الصفحة إطارات من مصادر مختلفة، نحدّ من كمية المعلومات التي تتم مشاركتها عنها لتجنّب تسرُّب معلومات من مصادر مختلفة. لا نُدرِج سوى المعلومات التي تعرفها الصفحة الخارجية، وما إذا كان الفرع الفرعي المتعدد المصادر قد حظر bfcache أم لا. لا ندرج أي أسباب لحظر المحتوى أو معلومات عن المستويات الدنيا للبنية الفرعية (حتى إذا كانت بعض المستويات الفرعية من مصدر مماثل).
على سبيل المثال:
{
children: [
{
children: [],
id: "iframe-id",
name: "iframe-name",
reasons: [],
src: "./index.html",
url: "https://www.example2.com/"
}
],
id: null,
name: null,
reasons: [
{"reason": "masked"}
],
src: null,
url:"https://www.example.com"
}
بالنسبة إلى جميع إطارات iframe التي تعود لمواقع إلكترونية مختلفة، نُبلغ عن null
لقيمة reasons
للإطار، وسيعرض الإطار من المستوى الأعلى السبب "masked"
. يُرجى العلم أنّه قد يتم استخدام "masked"
أيضًا لأسباب تتعلّق بوكيل المستخدم، لذا قد لا يشير ذلك دائمًا إلى مشكلة في إطار iframe.
اطّلِع على قسم الأمان والخصوصية في الشرح للحصول على مزيد من التفاصيل حول اعتبارات الأمان والخصوصية.
أسباب الحظر
كما ذكرنا سابقًا، هناك العديد من الأسباب المختلفة التي قد تؤدي إلى الحظر:
في ما يلي أمثلة على بعض الأسباب الأكثر شيوعًا لعدم إمكانية استخدام bfcache:
unload-listener
: تسجِّل الصفحة معالِجunload
، ما يمنع استخدام ميزة "التخزين المؤقت للصفحات" في بعض المتصفحات. اطّلِع على إيقاف حدث unload نهائيًا للحصول على مزيد من المعلومات.response-cache-control-no-store
: تستخدم الصفحةno-store
كقيمةcache-control
.related-active-contents
: تم فتح الصفحة من صفحة أخرى (إما باستخدام "علامة تبويب مكرّرة") لا تزال تحتوي على إشارة إلى هذه الصفحة.
ملاحظات
يريد فريق Chromium معرفة تجاربك مع واجهة برمجة التطبيقات bfcache notRestoredReasons
.
أخبِرنا عن تصميم واجهة برمجة التطبيقات.
هل هناك مشكلة في واجهة برمجة التطبيقات لا تعمل على النحو المتوقّع؟ هل هناك طُرق أو سمات مفقودة تحتاجها لتنفيذ فكرتك؟ هل لديك سؤال أو تعليق حول ملف أمان الحساب؟ يمكنك الإبلاغ عن مشكلة في المواصفات في مستودع GitHub المقابل، أو إضافة ملاحظاتك إلى مشكلة حالية.
الإبلاغ عن مشكلة في التنفيذ
هل رصدت خطأ في عملية تنفيذ Chromium؟ أم أنّ التنفيذ يختلف عن المواصفات؟
يمكنك الإبلاغ عن خطأ في أداة تتبُّع المشاكل. احرص على تضمين أكبر قدر ممكن من التفاصيل،
وتعليمات بسيطة لإعادة إنتاج المشكلة، وحدِّد المكوّن على أنّه UI > Browser > Navigation > BFCache
.
يُعدّ تطبيق Glitch مثاليًا لمشاركة عمليات إعادة الإنتاج بسرعة وسهولة.
إظهار الدعم لواجهة برمجة التطبيقات
هل تخطّط لاستخدام واجهة برمجة التطبيقات bfcache notRestoredReasons
؟ يساعد دعمك العلني فريق Chromium في تحديد الميزات ذات الأولوية وإظهار مدى أهمية توفيرها لمطوّري المتصفّحات الآخرين.
أرسِل تغريدة إلى @ChromiumDev باستخدام الهاشتاغ
#NotRestoredReasons
و
أخبِرنا بالمكان الذي تستخدم فيه هذه الميزة وطريقة استخدامك لها.