- تحميل أكواد CSS وJS بطريقة محسنة
- استخدام Lazy Load للصور
1. مقدمة عن أهمية تحسين الأداء
سرعة تحميل الموقع من أهم عوامل نجاحه سواء في تجربة المستخدم أو في ترتيب محركات البحث (SEO). لو الموقع ثقيل، الزائر هيمشي وممكن جوجل تقلل ترتيبه.
القالب جزء كبير من سرعة الموقع، لأنه بيحمل أكواد CSS وJS وصور. عشان كده تحسين تحميل هذه الموارد لازم يكون أولوية لأي مطور قوالب.
2. تحميل أكواد CSS و JS بطريقة محسنة
تحميل الملفات بشكل منفصل (Enqueueing)
في ووردبريس لازم تستخدم دالة wp_enqueue_style()
و wp_enqueue_script()
عشان تضيف ملفات CSS وJS، وده بيساعد على تحميل الملفات بطريقة منظمة وسليمة.
مثال في functions.php:
function abozaid_enqueue_scripts() {
// تحميل ملف CSS الرئيسي
wp_enqueue_style('abozaid-style', get_stylesheet_uri());
// تحميل ملف JS
wp_enqueue_script('abozaid-main-js', get_template_directory_uri() . '/js/main.js', array('jquery'), null, true);
}
add_action('wp_enqueue_scripts', 'abozaid_enqueue_scripts');
- الباراميتر الأخير
true
فيwp_enqueue_script
بيخلي تحميل السكريبت في الفوتر بدل الهيدر وده بيحسن الأداء لأنه بيخلي المحتوى يظهر أسرع.
التحميل الشرطي (Conditional Loading)
مش لازم تحمل كل ملفات CSS وJS في كل صفحة. مثلا لو عندك صفحة خاصة بسبلايدر، تحميل ملف السبايدر مش لازم يكون في كل الصفحات.
مثال:
function abozaid_enqueue_conditional_scripts() {
if (is_page('gallery')) {
wp_enqueue_script('slider-js', get_template_directory_uri() . '/js/slider.js', array('jquery'), null, true);
wp_enqueue_style('slider-css', get_template_directory_uri() . '/css/slider.css');
}
}
add_action('wp_enqueue_scripts', 'abozaid_enqueue_conditional_scripts');
ده بيخلي السبايدر يشتغل بس في صفحة المعرض، وميحملش في باقي الصفحات.
تقليل عدد طلبات HTTP
كل ملف CSS أو JS بيعمل طلب HTTP للتحميل. لو عندك 10 ملفات، هتعمل 10 طلبات وده بيأخر تحميل الصفحة.
الحل: دمج ملفات CSS مع بعض وملفات JS مع بعض.
في بيئة التطوير ممكن تستخدم أدوات زي Gulp أو Webpack عشان تعمل Bundle للملفات.
لو عايز حل بسيط في ووردبريس، تقدر تستخدم إضافات تحسين الأداء زي Autoptimize أو WP Rocket بتعمل دمج وتصغير أوتوماتيكي.
تصغير الملفات (Minify)
تصغير CSS وJS يعني إزالة المسافات والتعليقات لتصغير حجم الملف. ده بيخلي التحميل أسرع.
مثال:
/* before minify */
body {
background-color: #fff;
margin: 0;
padding: 0;
}
/* after minify */
body{background-color:#fff;margin:0;padding:0;}
3. استخدام Lazy Load للصور
إيه هو Lazy Load؟
Lazy Load يعني تحميل الصور فقط لما تدخل منطقة الرؤية (viewport) بتاعة الزائر، مش كل الصور تتحمل مرة واحدة.
ده بيقلل تحميل الصفحة الأولي ويخليها أسرع.
ليه Lazy Load مهم؟
- الصور بتاخد حجم كبير في الصفحة، وبتأثر على سرعة التحميل
- لو عندك صفحة فيها صور كتير، تحميلها كلها مرة واحدة بيبطئ الموقع
- Lazy Load بيقلل استهلاك الباندويث وبيخلي تجربة المستخدم أحسن
طرق تطبيق Lazy Load في القالب
1. استخدام خاصية loading="lazy"
في HTML5 (أسهل وأسرع)
في ووردبريس من الإصدار 5.5 ورايح، بيضيف الخاصية دي تلقائي للصور في المحتوى. لو بتعرض صور في القالب، تقدر تضيف الخاصية دي بنفسك.
مثال في قالبك:
<img src="<?php echo esc_url($image_url); ?>" loading="lazy" alt="Description">
2. استخدام JavaScript Lazy Load
لو عايز دعم أوسع وتخصيص أكبر، ممكن تستخدم مكتبة JS زي lazysizes.
4. أكواد عملية لتحسين تحميل CSS و JS
تحميل CSS في الفوتر (مش دايمًا مطلوب)
عادة الـ CSS بيتحمل في الهيدر، بس في حالات ممكن تحاول تحمله في الفوتر لتحسين الأداء لو القالب بسيط.
لكن ده مش دائمًا حل كويس، عشان ممكن يخلي الصفحة تظهر من غير تنسيق لفترة.
مثال لتحميل JS في الفوتر (كود كامل)
function abozaid_enqueue_scripts() {
wp_enqueue_style('abozaid-style', get_stylesheet_uri());
wp_enqueue_script('abozaid-main-js', get_template_directory_uri() . '/js/main.js', array('jquery'), null, true);
}
add_action('wp_enqueue_scripts', 'abozaid_enqueue_scripts');
استخدام التحميل الشرطي (تكرار مثال سابق لكن بالتفصيل)
function abozaid_enqueue_scripts() {
// تحميل ملف CSS الأساسي
wp_enqueue_style('abozaid-style', get_stylesheet_uri());
// تحميل ملف JS الأساسي في كل الصفحات
wp_enqueue_script('abozaid-main-js', get_template_directory_uri() . '/js/main.js', array('jquery'), null, true);
// تحميل ملفات خاصة بصفحة المقال فقط
if (is_single()) {
wp_enqueue_script('single-js', get_template_directory_uri() . '/js/single.js', array('jquery'), null, true);
}
}
add_action('wp_enqueue_scripts', 'abozaid_enqueue_scripts');
5. أكواد وأمثلة عملية لتفعيل Lazy Load
مثال 1: إضافة خاصية loading=”lazy” تلقائيًا للصور في محتوى المقال
في ملف functions.php
نضيف هذا الكود:
function abozaid_lazyload_images($content) {
if (is_singular()) {
$content = preg_replace('/<img(.*?)src=/i', '<img loading="lazy"$1src=', $content);
}
return $content;
}
add_filter('the_content', 'abozaid_lazyload_images');
مثال 2: استخدام مكتبة lazysizes
- حمل مكتبة lazysizes.min.js
- أضفها في القالب
function abozaid_enqueue_lazyload() {
wp_enqueue_script('lazysizes', get_template_directory_uri() . '/js/lazysizes.min.js', array(), null, true);
}
add_action('wp_enqueue_scripts', 'abozaid_enqueue_lazyload');
- غير صورك بالشكل ده:
<img data-src="path/to/image.jpg" class="lazyload" alt="Description" />
- هتلاحظ الصور بتتحمل لما المستخدم يقرب منها في الصفحة.
6. نصائح إضافية لتحسين أداء القالب
- استخدم صور مضغوطة وذات أبعاد مناسبة
- استعمل تنسيق صور حديث زي WebP لو ممكن
- استخدم CDN لتوزيع ملفاتك بسرعة حول العالم
- قلل استخدام الإضافات الثقيلة على الموقع
- استخدم الكاش (Caching) بفعالية
- اختبر الموقع على أدوات زي Google PageSpeed Insights و GTmetrix بانتظام
7. مراجعة سريعة
- استخدم
wp_enqueue_style
وwp_enqueue_script
عشان تضيف ملفات CSS و JS - خلي تحميل السكريبتات في الفوتر قدر الإمكان
- حمل الملفات اللي مش مطلوبة دايمًا بشكل شرطي
- دمج وتصغير ملفات CSS و JS يقلل من وقت التحميل
- Lazy Load مهم جدًا للصور الثقيلة
- تقدر تستخدم خاصية
loading="lazy"
أو مكتبة JS متقدمة زي lazysizes - ضغط الصور واستخدام CDN بيكملوا تحسين الأداء
8. أسئلة شائعة
س: هل ممكن أضيف Lazy Load على كل الصور بسهولة؟
ج: أيوه، تقدر تستخدم الكود البسيط اللي بيضيف خاصية loading="lazy"
تلقائي في محتوى المقال.
س: هل تحميل JS في الفوتر يؤثر على عمل الموقع؟
ج: غالبًا لا، بس لو السكريبت بيستخدم في الهيدر لازم تشيل true
عشان يشتغل صح.
س: إيه أفضل طريقة لتقليل ملفات CSS و JS؟
ج: استخدام أدوات أتمتة مثل Gulp أو إضافات مثل Autoptimize.
س: هل Lazy Load بيشتغل مع كل المتصفحات؟
ج: خاصية HTML5 loading="lazy"
مدعومة في أغلب المتصفحات الحديثة، لكن ممكن تحتاج مكتبات JS للمتصفحات القديمة.