كيفية التفكير في Baseline وpolyfills

تاريخ النشر: 18 آذار (مارس) 2025

لطالما كانت تطبيقات Polyfill جزءًا من تجربة مطوّري الويب، لأنّها تحاول توفير دعم لميزات الويب غير المتوافقة مع جميع المتصفّحات. يبدو أنّ أدوات الملء اللاحق هي أداة لا غنى عنها في مجموعة أدوات مطوّري الويب، ولكن يكاد يكون من المستحيل تبسيط هذا المجال المعقّد من الاهتمامات في بيان واحد قاطع.

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

ما هي الإضافات المتوافقة مع الإصدارات القديمة؟

رمز polyfill هو رمز يقيّم مدى توفّر ميزة في متصفّح، وإذا لم تكن الميزة متاحة، سيستخدم JavaScript لمحاولة توفير هذه الوظيفة غير المتوفّرة.

من الأمثلة المبكرة على polyfill هو Matchmedia.js، الذي استخدم JavaScript لرصد طريقة matchMedia وتوفير الدعم لها. يتيح matchMedia للمطوّرين تقييم ما إذا كان طلب البحث عن الوسائط يتطابق مع حالة مساحة العرض الحالية في JavaScript. من خلال تحميل polyfill لتوفير الميزة غير المتوفّرة، أصبح من الممكن استخدام طريقة matchMedia في أي متصفّح، ولكن لم تعُد هذه الميزة ضرورية الآن، لأنّ matchMedia متاحة في كل متصفّح تقريبًا قيد الاستخدام.

على الرغم من أنّ إضافة ميزات غير متوافقة قد يكون لها مزايا في بعض النواحي، غالبًا ما يتم تجاهل عيوب الإضافات التعويضية. ومع زيادة عدد تطبيقات polyfill في تطبيق الويب، يمكن أن تبدأ في التأثير سلبًا.

ما هي عيوب polyfills؟

تتطلّب الميزة التي تمّت إضافة polyfill لها دائمًا تكلفة مقارنةً بالميزة نفسها المتوافقة مع المتصفّح، وتتزايد هذه التكاليف عند إضافة المزيد من polyfills:

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

ومن الأمثلة الجيدة على أدوات الpolyfill التي تتضمّن بعض هذه العيوب أداة polyfill لطلبات البحث عن الحاويات. تتيح لك طلبات البحث عن الحاويات تطبيق قواعد CSS استنادًا إلى حالة عنصر HTML نفسه، على عكس طلبات البحث عن الوسائط التي تتيح لك تطبيق CSS على العناصر استنادًا إلى حالة إطار العرض. يستخدم هذا الرمز البرمجي polyfill واجهات برمجة تطبيقات JavaScript ResizeObserver وMutationObserver لمحاكاة إمكانات طلبات بحث الحاوية. على وجه الخصوص، تحدث ResizeObserver عمليات الاستدعاء قبل أن يرسم المتصفّح إطارًا جديدًا، ما يؤدي إلى زيادة تأخُّر العرض، وهو عامل مهم عند تحسين التفاعل إلى اللوحة التالية (INP) للصفحة.

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

ما هو دور "المستوى الأساسي"؟

كان من الصعب في السابق تقييم ما إذا كانت ميزة ويب معيّنة آمنة للاستخدام، على الرغم من أنّ أدوات مختلفة استخدمت مصادر بيانات مثل browser-compat-data لمساعدة المطوّرين في اتخاذ هذه القرارات الصعبة. Can I Use هي مصفوفة مشهورة لدعم ميزات الويب تستخدِم هذه البيانات.

يقدّم Baseline خطوة إضافية من خلال تقديم رسائل واضحة ومتسقة حول ميزات الويب المتوافقة مع جميع المتصفّحات من خلال ثلاثة مؤشرات حالة:

  • مدى التوفّر المحدود: لا تتوفّر الميزة في جميع المتصفّحات الرئيسية.
  • متوفّرة حديثًا: ظهرت الميزة في جميع المتصفحات الرئيسية خلال آخر 30 شهرًا.
  • الميزة متوفّرة على نطاق واسع: تتوفّر الميزة في جميع المتصفّحات الرئيسية منذ أكثر من 30 شهرًا.

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

تحديد الحدّ الأدنى لقيمة "الأداء الأساسي"

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

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

يتم تجميع ميزات Baseline في مجموعات سنوية، مثل Baseline 2025 وBaseline 2024 وما إلى ذلك، إلى أن يمرّ وقت كافٍ لتصبح هذه الميزات جزءًا من المجموعة المتوفّرة على نطاق واسع. ومن خلال الجمع بين هذه المعلومات ومعلومات عن المستخدمين، يمكنك الآن اتخاذ قرارات مدروسة بشأن ما إذا كنت تريد استخدام ميزة متاحة حديثًا أو استخدامها مع polyfill.

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

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

في ما يتعلّق بـ RUMvision، يمكنك البحث ليس فقط عن مدى توفّر ميزات منفصلة، ولكن يمكنك أيضًا الاطّلاع على النسبة المئوية للمستخدمين الذين يتوفّر لديهم ميزة أساسية معيّنة تم ضبطها حسب السنة.

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

يمكنك تحديد كيفية تحديد مدى توفّر الميزات، ولكن بشكل عام، كلما اقتربت من نسبة% 100 من المستخدمين، زادت ثقتك في إمكانية استخدام ميزات الويب الأساسية بدون الحاجة إلى polyfill. بوجهٍ عام، إذا كان% 98 أو% 99 من المستخدمين يتيحون استخدام ميزة في المتصفّح المفضّل لديهم، من المرجّح أن تتمكّن من استخدام الميزة بأمان، ولكن لا يزال عليك التفكير في ما يعنيه ذلك بالنسبة إلى أقلية من المستخدمين.

حالات استخدام polyfill لميزة غير متوفّرة وحالات عدم استخدامه

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

لنفترض أنّك تريد استخدام "قاعدة بيانات أساسية" متاحة حديثًا، ولكن لديك بيانات تُعلمك بأنّ% 95 من المستخدمين يدعمون حاليًا الميزة. وهذا يعني أنّ %5 من المستخدمين، أي مستخدم واحد من كل عشرين مستخدمًا، سيستخدمون متصفّحًا لا يتيح هذه الميزة. لا يعني ذلك أنّ عليك استخدام polyfill تلقائيًا، لأنّ الحاجة إلى polyfill تعتمد على الميزة، والتأثير في حال عدم توفّره للمستخدم.

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

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

وتصنّف معايير التقييم هذه الميزات إلى ثلاث فئات:

  1. التحسين: تُحسِّن الميزة تجربة المستخدم بطريقة لا تؤدي إلى تغييرات مرئية أو تقليل الوظائف في حال عدم توفّرها. وفي حال عدم توفّر الميزة لأحد المستخدمين، من المرجّح ألا يلاحظ ذلك. من المرجّح جدًا أنّك لن تحتاج إلى استخدام تقنية الملء اللاحق لهذه الميزات في حال عدم توفّرها.
  2. مُكمّلة: توفّر الميزة ميزة إضافية قد تؤثّر في مظهر صفحة الويب أو وظائفها، ولكن ليس بطريقة تؤدي إلى ظهور مشاكل خطيرة. في الواقع، قد لا يلاحظ المستخدم ذلك إلا إذا قارن التجربة نفسها في متصفّح مختلف يتيح هذه الميزة. إذا كان هناك polyfill متاحًا، ننصحك بعدم استخدامه، خاصةً إذا كنت تستخدِم polyfills في العديد من الميزات الأخرى، لأنّ إضافة polyfills إضافية لن يؤدي إلا إلى تفاقم الأداء.
  3. مهمة: توفّر الميزة الوظائف اللازمة التي ستؤدي إلى تعطُّل التجربة في حال عدم توفّرها في متصفّح المستخدم بسبب أخطاء تقييم JavaScript وأخطاء وقت التشغيل وتصاميم الصفحة المعطّلة وغيرها من النتائج غير المقبولة. في هذه الحالة، يمكنك استخدام تقنية الملء اللاحق للميزة أو تجنُّب استخدامها وابتكار حل بديل.

قد يكون من الصعب تحديد الميزات التي تندرج ضمن فئة معيّنة، ولكن في ما يلي بعض الأمثلة العملية:

  • ومن الأمثلة الجيدة على ميزات التحسين تلك المرتبطة بالأداء. يمكن أن تساهم ميزات مثل fetchpriority وHTTP/3 وغيرها في تحسين أداء الصفحة. وهذا أمر جيد لتحسين تجربة المستخدم، ولكن إذا كان المستخدم يستخدم متصفّحًا لا يتيح استخدام هذه الميزة، لن يواجه أيّ تأثيرات سلبية أو ملحوظة في كثير من الحالات. قد يوافق أصحاب المصلحة في المنتج على أن تحصل الغالبية العظمى من المستخدمين على مزايا، ما دامت الأقلية الكبيرة لا تُحرم من هذه المزايا.
  • تشمل الميزات الإضافية تلك التي تعزّز المظهر المرئي للصفحة. تشكّل مساحات الألوان ووظائفها والشبكة الفرعية مثالَين جيدَين على الميزات الإضافية التي قد لا يلاحظ المستخدمون عدم توفّرها. في هذه الحالة، قد يشعر بعض الجهات المعنية بالمشروع بالقلق بشأن سلامة العلامة التجارية في حال عدم توفّر هذه الوظيفة لبعض المستخدمين، ولكن يمكن إقناعهم بأنّ استخدام هذه الميزات أمر جيد إذا لم تكن التجربة متعطّلة تمامًا.
  • إنّ استخدام الميزات الأساسية أمر غير قابل للتفاوض. ومن الأمثلة على هذه الميزات عنصر HTML <datalist>، والذي قد يؤدي عدم توفّره إلى تقديم تجربة استخدام دون المستوى المطلوب. توقّع أنّ الجهات المعنية بالمشروع لن تقبل استخدام ميزات تؤدي إلى إيقاف تجربة المستخدم في بعض المتصفّحات.

بشكل عام، إليك كيفية تقييم الميزة التي تندرج ضمن فئة معيّنة حسب حالة "خط الأساس":

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

هل يجب استخدام الميزات المتاحة لعدد محدود من المستخدمين؟

الإجابة عن هذا السؤال هي "نعم"، ولكن مع بعض التحذيرات المهمة:

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

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

الخاتمة

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

  1. على الرغم من أنّ وحدات polyfill مفيدة من بعض النواحي، إلا أنّها تُمثّل تكاليف محتملة للأداء وإمكانية الاستخدام، وقد لا تتمكّن من تكرار ميزات الويب غير المُطبَّقة بأمانة.
  2. حدِّد الحدّ الأدنى لقيمة "الأداء الأساسي" باستخدام بيانات من المستخدمين، إن أمكن. إذا لم يكن ذلك ممكنًا، يمكنك البدء بمجموعة الميزات المتاحة على نطاق واسع في "المستوى الأساسي"، ويمكنك أيضًا استخدام بيانات إحصاءات ميزة "مراقبة المستخدمين في الوقت الفعلي" لاتّخاذ قرارات مدروسة.
  3. باستخدام هذه البيانات، يمكنك تقييم عدد المستخدمين الذين قد يتأثّرون إذا لم يكن المتصفّح يتيح الميزات التي تريد استخدامها، وتقييم مدى خطورة هذا التأثير.
  4. تواصل مع الجهات المعنية بالمشروع لتحديد الميزات المقبولة والملائمة لاستخدامها لتحقيق أهداف مشروعك واحتياجات نشاطك التجاري.
  5. إذا كان عليك استخدام ميزات "التوفّر المحدود"، عليك تقييم جمهورك ومخاطر استخدامها. ما لم يتم تقييد المستخدمين باستخدام محرّك متصفّح واحد، لا يمكنك ضمان التوافق، حتى مع استخدام polyfill.

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

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