سرعة الموقع

تحسين CSS وجافاسكريبت

تحسين CSS وجافاسكريبت ثلاثة أعمال، وقيمتها بهذا الترتيب: احذف ما لا يلزم، وأخّر ما لا يلزم فورا، وصغّر ما يبقى. على هذا الموقع وفّر تصغير ورقة الأنماط الرئيسية ١٦.٣ كيلوبايت على السلك، ويأخذ ملف تحليلات واحد لم نكتبه ١٧١.١ كيلوبايت.

  • الدرس 7 من 10
  • متوسط
  • مجاني، دون تسجيل
ورقة تسليم الكودبهذا الترتيب

اعمل بهذا الترتيب

  • زِن كل ملف على السلك لا على القرص
  • اسأل عن كل سطر: أي ميزة يقدم وهل يلزم هنا
  • أخرج ما بقي من طريق الرسم بوسم defer أو async
  • صغّر أخيرا، واقرأ الرقم بعد الضغط
  • اختبر مرة بعد كل تغيير لا بعد عشرة

هذه تأكل الوقت وتعطي قليلا

  • تصغير ملف لا ينبغي أن يكون في الصفحة أصلا
  • وضع defer على كل السكربتات دفعة واحدة
  • اتخاذ النسبة التي تعرضها الأداة قبل الضغط مقياسا
  • شحن مخرج أداة CSS الحرج دون النظر إلى الصفحة

آخر مراجعة: تُراجع الحقائق وأسماء الأدوات في هذا الدرس مقابل مصادرها في هذا التاريخ.

قبل أي تحسين، زِن ما هو موجود فعلا

أكثر دروس السرعة تبدأ من الوسط: صغّر، وادمج، وأخّر. وكل ذلك صحيح، وكله يأتي بعد سؤال لا يسأله أحد: ما الذي يفعله هذا الملف هنا أصلا.

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

curl -s https://example.com/ \
  | grep -oE 'src="[^"]+\.js[^"]*"' | cut -d'"' -f2 | sort -u \
  | while read u; do printf '%8s  %s\n' \
      "$(curl -s -o /dev/null -H 'Accept-Encoding: gzip' -w '%{size_download}' "$u")" "$u"; done

وفي هذا الأمر فخ وقعنا فيه بأنفسنا: إن حوى عنوان في HTML علامة & كُتب على هيئة & فيبلّغ ذلك السطر صفر بايت. والصفر يعني أنه لم يُقَس، لا أنه خفيف. أصلح ذلك السطر يدويا أو تجاهله.

وكان ناتج هذا الأمر على إحدى صفحاتنا، من الأثقل إلى الأخف: ١٧١.١ كيلوبايت لملف تحليلات غوغل، و٢٩.٩ كيلوبايت لمكتبة jQuery، و٥.٩ كيلوبايت لسكربتنا الرئيسي، و١.٩ كيلوبايت لحاسبة أسعار، وأقل من كيلوبايت لسكربت كابتشا. أما سكربت كابتشا كلاودفلير فعلى نطاقهم هم وعاد من سطر الأوامر بصفر، فتركناه خارج الحساب ونقول هنا صراحة إننا لا نعرف حجمه.

والآن اجمع. فما كتبناه ٧.٨ كيلوبايت وما لم نكتبه ٢٠١.٥ كيلوبايت. أي إن ٩٦.٣ بالمئة من وزن جافاسكريبت الذي ترسله تلك الصفحة كود لغيرنا. ولا قدر من التصغير يزحزح هذه النسبة.

تحسين CSS وجافاسكريبت: احذف أولا ثم اضغط

كم يوفر التصغير؟ اقرأ الرقم بعد الضغط

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

قسنا ورقة الأنماط الرئيسية لهذا الموقع بطريقتين، مرة خاما ومرة مضغوطة بأداة gzip كما تُرسل فعلا. الأصل ١٢٩.٠ كيلوبايت ويُضغط إلى ٣٢.٣ كيلوبايت. والنسخة المصغّرة ٧٩.١ كيلوبايت وتُضغط إلى ١٦.٣ كيلوبايت.

والآن ضع التوفيرين جنبا إلى جنب. على الورق أزال التصغير ٤٩.٩ كيلوبايت، أي قرابة ٣٩ بالمئة، وهذا هو الرقم الذي يعرضه تقرير أداتك. وعلى السلك أزال العمل نفسه ١٦.٠ كيلوبايت. والرقمان صحيحان ولا يؤثر في السرعة إلا الثاني.

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

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

ملف واحد، أربع طرق لقياسه

ورقة الأنماط الرئيسية لهذا الموقع، قيست في ٨ سبتمبر ٢٠٢٦
  1. الأصل، على القرص ١٢٩.٠ كيلوبايت بكل تعليقاته ومسافاته
  2. النسخة المصغّرة، على القرص ٧٩.١ كيلوبايت الرقم الذي تعرضه تقارير الأدوات
  3. الأصل، مضغوطا على السلك ٣٢.٣ كيلوبايت من هنا يبدأ الحجم الحقيقي
  4. النسخة المصغّرة، مضغوطة على السلك ١٦.٣ كيلوبايت الرقم الوحيد الذي يشعر به الزائر

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

defer أم async؛ أيهما وأين

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

مع defer يبدأ المتصفح تنزيل الملف فورا لكنه يؤجل تنفيذه إلى أن تُبنى الصفحة، وعدة سكربتات بهذه الصفة تُنفَّذ بالترتيب الذي وردت به في الصفحة. ومع async يبدأ التنزيل فورا أيضا لكن التنفيذ يقع لحظة جهوز الملف أيا كان موضع العمل، ولا ضمان للترتيب البتة.

والقاعدة العملية تخرج من هذا الفرق. فكل سكربت يعتمد على بقية كودك أو يمس عناصر الصفحة يريد defer. وكل سكربت مستقل تماما لا يعني أحدا، كالتحليلات، يأخذ async. وإن ترددت فإن defer أسلم، لأن أسوأ حالاته تنفيذ متأخر قليلا، وأسوأ حالات async خطأ لا يُعاد إنتاجه ولا يقع إلا على اتصال بطيء.

والآن ما تقوله الدروس أقل وهو أهم عمليا: موضع السكربت في المستند. فإن كانت كل السكربتات في ذيل الجسد، فحتى السكربت بلا صفة لا يحجب إلا القليل، لأن الصفحة قد بُنيت حينها. وعلى الصفحة الأولى لهذا الموقع يقع أول سكربت عند ٩٦.٦ بالمئة من المستند، ولا سكربت خارجيا في head البتة. وثلاثة سكربتات هناك ما زالت بلا صفة ولم نصلحها، لأن الإضافة التي تدرجها تقرر عنا.

وتحذير يكسر من المواقع أكثر من أي شيء آخر في هذا العمل: وضع defer على كل شيء دفعة واحدة. فثمة إضافات تفعل ذلك بمفتاح واحد، وعلى موقع يعتمد كوده على ترتيب التنفيذ تكون النتيجة صفحة تعمل عشوائيا. واحدا واحدا، واختبر مرة بعد كل تغيير.

defer وasync كلاهما صحيح، لنوعين من السكربتات

defer

  • يبدأ التنزيل فورا والتنفيذ بعد بناء الصفحة
  • يُحفظ الترتيب، فيسلم الكود المعتمد على كود آخر
  • لكل ما يمس عناصر الصفحة

async

  • يبدأ التنزيل فورا والتنفيذ لحظة جهوز الملف
  • لا ضمان للترتيب، فيكسر التبعيات
  • للأشياء المستقلة تماما كالتحليلات

ولا واحد منهما أفضل من الآخر. وإن ترددت فاختر defer: أسوأ حالاته تنفيذ متأخر، وأسوأ حالات async خطأ لا يظهر إلا على اتصال بطيء.

CSS الحرج والتضمين؛ مكسب له ثمن

كل ورقة أنماط خارجية مورد يحجب الرسم: فالمتصفح لا يرسم شيئا حتى يحصل عليها. والجواب الشائع هو CSS الحرج، أي كتابة الجزء اللازم للمنظر الأول داخل الصفحة نفسها وترك الباقي يصل لاحقا. وقد ذهبنا خطوة أبعد فنضمّن ورقة الأنماط كلها؛ فعلى الصفحة الأولى لهذا الموقع لا وجود لوسم link rel=stylesheet البتة، وكل القواعد في أربع كتل أنماط داخل الرأس.

ولهذا القرار مكسب وندفع ثمنه، ولأن أحدا لا يكاد يكتب الثمن فإليك ثمننا. أخذنا HTML نفسه واستبدلنا بكتلة الأنماط الرئيسية رابطا خارجيا وضغطنا النسختين. فالنسخة المرسلة فعلا ٤١.٨ كيلوبايت والنسخة بورقة خارجية ٢٦.٠ كيلوبايت. أي إن التضمين يضيف ١٥.٨ كيلوبايت إلى كل استجابة HTML، لكل زيارة، في كل مرة.

ونقطة التعادل حساب بسيط. فالزائر الذي يرى صفحة واحدة ويمضي لا يدفع زيادة، لأنه كان سيجلب ذلك CSS في الحالين. أما من يرى خمس صفحات فيجلب ١٥.٨ كيلوبايت نفسها أربع مرات أخرى، بينما كانت الورقة الخارجية تُجلب مرة وتأتي من كاش المتصفح بعدها. فهذا الاختيار يتوقف على شكل حركتك لا على قاعدة عامة: فالموقع الذي تأتي زياراته غالبا من البحث وتنتهي عند صفحة واحدة يربح بالتضمين.

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

وتحذير بشأن أدوات CSS الحرج: يجب النظر في مخرجاتها. فهذه الأدوات تقرر أي القواعد يحتاجها المنظر الأول، وتخطئ على الصفحات التي يختلف تخطيطها عن غيرها. والنتيجة صفحة تومض بلا تنسيق لحظة، وهذا أسوأ من ورقة أنماط حاجبة.

أنضع CSS داخل الصفحة أم في ملف منفصل؟

داخل الصفحة نفسها

  • لا يبقى مورد يحجب الرسم
  • يصل CSS مع HTML نفسه بلا رحلة ثانية
  • لكن البايتات نفسها تُرسل ثانية في كل زيارة
  • أفضل لزيارة صفحة واحدة قادمة من البحث

في ملف منفصل

  • يُنزَّل مرة ثم يأتي من كاش المتصفح
  • تخف كل استجابة HTML
  • لكن المتصفح لا يرسم شيئا حتى يصل
  • أفضل لزائر يقرأ عدة صفحات

اخترنا التضمين وثمنه ١٥.٨ كيلوبايت على كل استجابة HTML. والاختيار الصحيح يتوقف على شكل حركتك لا على قاعدة عامة.

الكود الذي لم تكتبه

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

على صفحتنا تلك نفسها، jQuery ٢٩.٩ كيلوبايت. ولا نستعمل منه سطرا ولا كتبنا منه سطرا؛ فالإضافة الأمنية التي تضع الكابتشا تحتاجه ووردبريس يرسله. وملف التحليلات ١٧١.١ كيلوبايت وهو أيضا لغوغل، وإنما يُستضاف على خادمنا. ومجموع هذين مع سكربت الكابتشا ٢٠١.٥ كيلوبايت، مقابل ٧.٨ كيلوبايت من كودنا.

والآن المقصد: لا يُحَل أي منهما بالتحسين. فمكتبة jQuery مصغّرة أصلا وتنضغط. وكذلك ملف التحليلات. وكلاهما يخرج من طريق الرسم بوسم async أو defer، ويظل كلاهما يأخذ العدد نفسه من البايتات من اتصال الزائر والقدر نفسه من معالج هاتفه. والقرار الوحيد الذي يغير هذه الأرقام هو أتريد تلك الميزة أصلا أم لا.

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

فترتيب عملك إذن هكذا. خذ القائمة أولا. ثم اسأل عن كل سطر: أي ميزة يقدم، وهل تلزم تلك الميزة على هذه الصفحة. وأخّر ما بقي، وصغّر ما بقي بعد ذلك. واعكس الترتيب تقضِ ساعات على بضعة كيلوبايتات ولا ترى الرقم ١٧١ أبدا. وإن كان سؤالك التالي كم يلزم موقعك من جافاسكريبت أصلا، فجوابه في درس تعلم جافاسكريبت للمبتدئين.

المسار السريع مع الذكاء الاصطناعي

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

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

وصفة جاهزة للنسخ

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

{الصق القائمة هنا}

نوع الموقع: {مثلا متجر ووردبريس | موقع شركة | مدونة}
الميزات المستعملة فعلا على هذه الصفحة: {نموذج اتصال | شريط عرض | خريطة | لا شيء}

رتّب القائمة في ثلاث فئات، وابدأ كل فئة بالأثقل:
١. قابل للحذف: ميزة لا تُستعمل على هذه الصفحة.
٢. قابل للتأجيل: يجب أن يبقى لكنه لا يلزم للمنظر الأول. واكتب لكل واحد defer أو async وجملة تعليل.
٣. ممنوع المساس: كل ما يعتمد على ترتيب التنفيذ أو على عناصر الصفحة.

القواعد:
١. اعمل من هذه القائمة وحدها. وإن لم تكفك المعلومات للبت في سطر فضعه في الفئة الثالثة واكتب ما كنت ستحتاجه.
٢. لا تضع في الفئة الأولى ملفا لا تعرفه.
٣. إن كان السطر من إضافة أمنية أو إضافة دفع فالأصل الفئة الثالثة.
٤. لكل اقتراح في الفئة الثانية، اكتب ما الذي سينكسر ظاهرا إن كان خاطئا. فتلك الجملة هي بالضبط ما عليّ اختباره بعد التغيير.
٥. لا تختلق رقم توفير تقديريا ولا تعد بشيء عن السرعة.

اعطِ المخرج ثلاث قوائم بلا مقدمة.

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

الذكاء الاصطناعي في هذا العمل

موقفنا هنا: الذكاء الاصطناعي في هذا العمل جيد في الفرز والشرح ورديء في القرار. والفرق يمكن قوله بدقة. فأي الملفات يمكن تأخيرها سؤال فرز يجيبه النموذج جيدا. وهل يكسر حذف هذا الملف شيئا سؤال عن موقعك، والنموذج لم يرَ موقعك. والجملة الجديرة بالحفظ: النموذج يرتب القائمة وأنت تجري التغيير.

أدوات تساعد فعلا

  • Claude مناسب لعمل الفرز أعلاه، وخاصة للعمل تحت قواعد: قل له ألا يضع ملفا مجهولا في الفئة الأولى فلا يضعه غالبا. وإيران ليست في قائمة الدول المدعومة لدى Anthropic، فلا تسجيل رسمي ولا قبول لبطاقة إيرانية.
  • Gemini مفيد لمعرفة إلامَ ينتمي سكربت غير مألوف، إذ يعرف عادة أسماء المكتبات والإضافات المشهورة. وتقول صفحة غوغل نفسها إن تطبيق Gemini على الويب يعمل في أكثر من ٢٣٠ دولة وإقليما، وإيران ليست في تلك القائمة.
  • ChatGPT يكفي للفرز والشرح نفسيهما. ولا ندّعي شيئا عن الوصول من إيران، لأن صفحة الدول المدعومة لدى OpenAI، كسائر ذلك النطاق، تعيد ٤٠٣ لهذا الخادم.

اين ينقلب ضدك

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

المصادر: MDN: the script element Anthropic: supported countries Google: where Gemini Apps are available

حدود هذه النصيحة

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

من عملنا نحن

أنفع ما تعلمناه عن هذا العمل جاء من قياس على موقعنا لم نكن نتوقعه. فقد فعلنا بكودنا كل ما يوصي به هذا الدرس: ورقة الأنماط مضمّنة بالكامل، ولا وسم ورقة خارجية في الصفحة، وسكربتاتنا كلها تحمل defer، وأول سكربت عند ٩٦.٦ بالمئة من المستند. ثم وزنّا ما هو موجود فعلا فوجدنا ملف تحليلات ١٧١.١ كيلوبايت وjQuery ٢٩.٩ كيلوبايت على الصفحة لم نكتب أيا منهما، مقابل ٧.٨ كيلوبايت من كودنا. أي إن ٩٦.٣ بالمئة من وزن جافاسكريبت كان خارج أيدينا، على الصفحة ذاتها التي أحسنّا فيها كل شيء. ومن ذلك اليوم تغير ترتيب عملنا: قائمة الوزن أولا، ثم سؤال عن كل سطر، والتحسين أخيرا.

اسئلة متابعة حقيقية

أأدمج ملفات CSS وجافاسكريبت؟

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

أثبّت إضافة تحسين أم أفعلها يدويا؟

الإضافة خيار صحيح للتصغير والضغط، لأن هذا عمل آلي وأخطاؤه قابلة للتراجع. أما المفاتيح التي تضع defer على كل شيء أو تولّد CSS الحرج فشغّلها واحدا واحدا وانظر إلى الموقع بعد كل منها. وتذكر أن لا إضافة تقرر أي ميزة لا تلزم على هذه الصفحة؛ فذلك القرار لك دائما.

أأزيل jQuery من موقع ووردبريس عندي؟

اعرف أولا ما الذي يريده، فهو غالبا ليس أنت. فإن اعتمدت عليه إضافة كسر إزالته تلك الإضافة، وحصلت على خلل صامت قد يبقى أسابيع دون أن يُلحظ. والأسلم والكافي غالبا أن تبقيه على الصفحات المحتاجة إليه فعلا فقط؛ وهذا ما فعلناه على موقعنا، وصفحات المدونة لا تتلقاه البتة.