التحكم في أداء الخطوط من خلال عرض الخط

يمكن أن يكون تحديد سلوك خط الويب أثناء تحميله أحد أساليب ضبط الأداء المهمة. يتيح وصف عرض الخط الجديد لملف @font-face للمطوّرين تحديد كيفية عرض خطوط الويب (أو الخطوط الاحتياطية)، استنادًا إلى المدة التي يستغرقها تحميلها.

الاختلافات في عرض الخطوط اليوم

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

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

المتصفح عملية استبعاد للقناة لمهلة معيّنة Fallback تبديل
الإصدار 35 من Chrome والإصدارات الأحدث 3 ثوانٍ نعم نعم
Opera 3 ثوانٍ نعم نعم
Firefox 3 ثوانٍ نعم نعم
Internet Explorer ‫0 ثانية نعم نعم
Safari لا تتوفر أي مهلة لا ينطبق لا ينطبق
  • يتضمّن Chrome وFirefox مهلة مدتها ثلاث ثوانٍ، وبعدها يتم عرض النص باستخدام الخط الاحتياطي. إذا تم تنزيل الخط، يحدث تبديل في النهاية ويتم إعادة عرض النص بالخط المقصود.
  • يعتمد Internet Explorer مهلة صفرية تؤدي إلى عرض النص فورًا. إذا لم يكن الخط المطلوب متاحًا بعد، يتم استخدام خط احتياطي، ويتم مجددًا عرض النص لاحقًا بعد توفّر الخط المطلوب.
  • لا يتضمّن Safari أيّ سلوك متعلّق بالمهلة (أو على الأقلّ لا يتضمّن أيّ مهلة تتعدى مهلة الشبكة الأساسية).

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

للمساعدة في حلّ هذه المشكلة، اقترحت مجموعة عمل CSS وصفًا جديدًا لملف @font-face، وهو font-display، وسمة مقابلة للتحكم في كيفية عرض الخط القابل للتنزيل قبل تحميله بالكامل.

المخططات الزمنية لتنزيل الخطوط

على غرار سلوكيات وقت الاستراحة الحالية للخطوط التي تنفّذها بعض المتصفّحات اليوم، يقسّم font-display مدة تنزيل الخط إلى ثلاث مراحل رئيسية.

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

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

ما هو وضع عرض الخط المناسب لك؟

للعمل مع وصف font-display، أضِفه إلى قواعد at-rules الخاصة بـ @font-face:

@font-face {
    font-family: 'Arvo';
    font-display: auto;
    src: local('Arvo'), url(https://fonts.gstatic.com/s/arvo/v9/rC7kKhY-eUDY-ucISTIf5PesZW2xOQ-xsNqO47m55DA.woff2) format('woff2');
}

يقبل font-display حاليًا النطاق التالي من القيم auto | block | swap | fallback | optional.

تلقائي

يستخدم الخيار auto أي استراتيجية عرض للخط يستخدمها وكيل المستخدم. تتضمّن معظم المتصفحات حاليًا استراتيجية تلقائية مشابهة لاستراتيجية حظر.

صدّ

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

تبديل اللغة

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

البديل

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

اختياري

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

دعم المتصفح

لا تتوفّر font-display حاليًا إلا بعد تفعيل علامة ميزات النظام الأساسي التجريبي للويب في الإصدار 49 من Chrome على أجهزة الكمبيوتر المكتبي، وهي متوفّرة في Opera وOpera لنظام التشغيل Android.

عرض توضيحي

يمكنك الاطّلاع على عيّنة للتعرّف على font-display. بالنسبة إلى المطوّرين الذين يهتمون بالأداء، يمكن أن تكون هذه الأداة مفيدة جدًا في حزمة الأدوات الخاصة بهم.