استخدام صور WebP

Katie Hempenius
Katie Hempenius

أهمية ذلك بالنسبة إليك

تكون صور WebP أصغر حجمًا من نظيراتها بتنسيقَي JPEG وPNG، ويقل حجمها عادةً بنسبة تتراوح بين 25% و35%. ويؤدي ذلك إلى تقليل أحجام الصفحات و تحسين الأداء.

  • تبيّن لفريق YouTube أنّ التبديل إلى استخدام الصور المصغّرة بتنسيق WebP أدى إلى تحميل الصفحات بشكلٍ أسرع بنسبة 10%.
  • حقّق Facebook تخفيضات في حجم ملفات JPEG تتراوح بين ‎25 و‎35% وتخفيضات في حجم ملفات PNG تبلغ ‎80% عند التبديل إلى استخدام WebP.

يُعدّ WebP بديلاً ممتازًا للصور بتنسيقات JPEG وPNG وGIF. بالإضافة إلى ذلك، يقدّم WebP ضغطًا مع وبدون فقدان. في تقنية الضغط بدون فقدان البيانات، لا يتم فقدان أي بيانات. يعمل الضغط غير القابل للاسترداد على تقليل حجم الملف، ولكن على حساب احتمال تقليل جودة الصورة.

تحويل الصور إلى WebP

يستخدم المستخدمون بشكل عام إحدى الطريقتَين التاليتَين لتحويل صورهم إلى WebP: أداة سطر الأوامر cwebp أو مكوّن Imagemin WebP الإضافي (حزمة npm ). إنّ المكوّن الإضافي Imagemin WebP هو الخيار الأفضل بشكل عام إذا كان مشروعك يستخدم ملفّات برمجية لإنشاء ملفّات أو أدوات إنشاء (مثل Webpack أو Gulp)، في حين أنّ واجهة برمجة التطبيقات هي خيار جيد لمشاريع بسيطة أو إذا كنت بحاجة إلى تحويل الصور مرة واحدة فقط.

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

استخدام cwebp

تحويل ملف واحد باستخدام إعدادات الضغط التلقائية في cwebp:

cwebp images/flower.jpg -o images/flower.webp

تحويل ملف واحد باستخدام مستوى جودة 50:

cwebp -q 50 images/flower.jpg -o images/flower.webp

تحويل جميع الملفات في دليل:

for file in images/*; do cwebp "$file" -o "${file%.*}.webp"; done

استخدام Imagemin

يمكن استخدام المكوّن الإضافي Imagemin WebP بمفرده أو مع أداة الإنشاء المفضّلة لديك (Webpack/Gulp/Grunt/etc.). يتطلّب ذلك عادةً إضافة 10 أسطر من التعليمات البرمجية تقريبًا إلى نص برمجي للإنشاء أو ملف الإعدادات الخاص بأداة الإنشاء. في ما يلي أمثلة على كيفية إجراء ذلك باستخدام Webpack و Gulp و Grunt.

إذا لم تكن تستخدم إحدى أدوات الإنشاء هذه، يمكنك استخدام Imagemin بمفرده كأحد النصوص البرمجية لنظام التشغيل Node. سيحوِّل هذا النص البرمجي الملفات في الدليل images ويحفظها في الدليل compressed_images.

const imagemin = require('imagemin');
const imageminWebp = require('imagemin-webp');

imagemin(['images/*'], {
  destination: 'compressed_images',
  plugins: [imageminWebp({quality: 50})]
}).then(() => {
  console.log('Done!');
});

عرض صور WebP

إذا كان موقعك الإلكتروني متوافقًا فقط مع المتصفّحات المتوافقة مع WebP، يمكنك التوقف عن القراءة. بخلاف ذلك، قدِّم WebP للمتصفحات الأحدث وصورة احتياطية للمتصفحات الأقدم:

قبل: html <img src="flower.jpg" alt="">

بعد: html <picture> <source type="image/webp" srcset="flower.webp"> <source type="image/jpeg" srcset="flower.jpg"> <img src="flower.jpg" alt=""> </picture>

تتفاعل علامات <picture> و <source> و <img> مع بعضها لتحقيق هذه النتيجة النهائية، بما في ذلك ترتيبها بالنسبة إلى بعضها.

<picture>

توفّر علامة <picture> عنصرًا ملفّفًا لصفر أو أكثر من علامات <source> وعلامة <img> واحدة.

<source>

تحدّد العلامة <source> مورد وسائط.

يستخدم المتصفّح المصدر الأول المدرَج بتنسيق متوافق. إذا كان المتصفّح لا يتيح أيًا من التنسيقات المدرَجة في علامات <source>، سيستخدم علامة <img> لتحميل الصورة المحدّدة.

<img>

تسمح علامة <img> بتشغيل هذا الرمز في المتصفّحات التي لا تتيح استخدام علامة <picture>. إذا كان المتصفّح لا يتيح استخدام علامة <picture>، سيتم تجاهل العلامات التي لا يتوافق معها. وبالتالي، لا "يرى" سوى علامة <img src="flower.jpg" alt=""> ويحمّل هذه الصورة.

قراءة عنوان HTTP Accept

إذا كان لديك خلفية تطبيق أو خادم ويب يتيح لك إعادة كتابة الطلبات، يمكنك قراءة قيمة رأس HTTP Accept، الذي سيعلن عن تنسيقات الصور البديلة المتوافقة:

Accept: image/webp,image/svg+xml,image/*,*/*;q=0.8

إنّ قراءة عنوان الطلب هذا وإعادة كتابة الردّ استنادًا إلى محتوياته تؤدي إلى تبسيط ترميز الصورة. يمكن أن تصبح علامة <picture> طويلة جدًا مع العديد من المصادر. في ما يلي قاعدة mod_rewrite في Apache يمكنها عرض بدائل WebP:

RewriteEngine On
RewriteCond %{HTTP:Accept} image/webp [NC]
RewriteCond %{HTTP:Content-Disposition} !attachment [NC]
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f [NC]
RewriteRule (.+)\.(png|jpe?g)$ $1.webp [T=image/webp,L]

إذا اتّبعت هذا المسار، عليك ضبط عنوان استجابة HTTP‏ Vary لضمان أن تدرك ذاكرات التخزين المؤقت أنّه قد يتم عرض الصورة بأنواع محتوى مختلفة:

<FilesMatch ".(jpe?g|png)$">
  <IfModule mod_headers.c>
    Header set Vary "Content-Type"
  </IfModule>
</FilesMatch>

ستبحث قاعدة إعادة الكتابة أعلاه عن إصدار WebP لأي صورة JPEG أو PNG مطلوبة. في حال العثور على بديل بتنسيق WebP، سيتم عرضه باستخدام العنوان Content-Type المناسب. سيتيح لك ذلك استخدام ترميز الصور المشابه لما يلي مع إتاحة WebP تلقائيًا:

<img src="flower-320w.jpg" srcset="flower-320w.jpg 320w, flower-640w.jpg 640w, flower-960w.jpg 960w">

التحقّق من استخدام WebP

يمكن استخدام Lighthouse للتحقّق من أنّه يتم عرض كل الصور على موقعك الإلكتروني باستخدام WebP. يمكنك إجراء تدقيق الأداء في Lighthouse (Lighthouse > الخيارات > الأداء) والبحث عن نتائج تدقيق عرض الصور بتنسيقات الجيل التالي . سيُدرج Lighthouse أي صور لا يتم عرضها بتنسيق WebP.