45

التطوير غير العقلاني في CSS/JS

هذا المقال القصير سيتحدث عن الاستخدام غير المحسوب في مكتبات الويب والأطر العمل وما إلى ذلك

خصوصا في أمر JQuery و أطر العمل مثل Bootstrap وخطوط الأيقونات مثل FontAwesome

لابد أنك لاحظت ثقل بعض مواقع الويب الغريب واختلافها عن بعضها. في زمن حيث السرعة هي كل شيء، أكره أن أنتظر أكثر من 7 ثواني لتظهر صفحة ما

السبب وراء هذا قد يكون أحيانا التطوير غير العقلاني، أو ما أقصده. غير المحسوب.

لنضرب مثالا بBootstrap :

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

فبما أنه يقدم العديد من المزايا، فحجمه نظريا كبير (256 كيلو بايت في عالم تطوير الانترنت كبيرة) والأغلب أن المطورين لن يحتاجوا كل المزايا

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

المشكلة في الأمر هو أن الحجم الإضافي الكامل للإطار أصبح بلا فائدة، ولكن سيتم تحميله على كل حال. لا تنسى أن معظم العرب يستعملون نسخة bootstrap-rtl والتي هي بحد ذاتها 80 كيلوبايت إضافية.

نأتي هنا إلى نقطة كسل المطورين في اختزال وتنظيف ملفات CSS الخاص بهم، بحيث أن المطور قد يحتاج إلى 15Kb من إطار العمل، فهو ينتهي بتحميل 300kb أيّ أكثر ب20 مرة من الذي يحتاجه

موقع bootstrap يوفر خاصية "تقليم" الملف[1]، أي خذ ما تحتاج وأترك مالا تحتاجه. شيء عادة لا يستخدمه العديد من مطوري الويب

فأنا أدعو كل مطور في مشروعه القادم، أن يحاول على الأقل، التقليل إلى الحد الأقصى من حجم الإطار. وترك كل مالا تحتاجه. وحذف الأمور المتكررة بين bootstrap و bootstrap-rtl

نأتي لنقطة ثانية في نفس السياق وهي في استعمال JQuery

حجم نسخة Jquery هو 80 كيلوبايت (دعنا لا نتكلم عن أولائك المجرمين الذين يستعملون النسخة العادية ذات 250 كيلوبايت)

لن أنكر، Jquery مكتبة رائعة جدا وتسهل علينا الكثير من العمل. ولكن هل يجب فعلا استخدامها دوما؟

تحجج بعض الناس أن ما يمكنك عمله في 20 سطرا من جافاسكربت تستطيع عمله في 3 أسطر من JQuery

لن أنكر هذا، ولكن هل حقا تريد إدراج مكتبة Jquery من أجل القيام بتأثير بسيط (عادة يمكنك القيام به بواسطة CSS فحسب) أو القيام بعمل بسيط (عادة تستطيع القيام به فالجافاسكربت وبنفس عدد الأسطر)

مشكلة المطورين اليوم أنهم يستعملون Jquery لأتفه الأسباب، البعض مازال يستعملها في تأثيرات hover والبعض الآخر يريد تنفيذ دالة جافاسكربت على عنصر ما ولكن لايعرف كيف يحدده بواسطة جافاسكربت فيستخدم Jquery لتحديد عنصر (حيث يمكنك استعمال نفس خاصية التحديد مع sizzle [2] بحجم ب15 كيلوبايت فحسب)

هناك بعض المواقع قدمت حلولا مغايرة لبعض الأمور في Jquery

فJquery هي نفسها جافاسكربت ولكن أبسط. لذا المرة القادمة، إذا كان هناك شيء بسيط تريد القيام، فكر في إلقاء نظرة على هذا الموقع[3]

نأتي لثالث شيء نلاحظه كل يوم وهو استعمال خط الأيقونات،

حجم FontAwesome اكثر من 80 كيلوبايت و250 كيلوبايت لنسخة SVG (التي تستعملها الهواتف!)

يحتوي الخط على 439 أيقونة، أشك كثيرا أن أي أحد قد يستعملها كلها

معظم المواقع تستعمل ما بين 5 أيقونات إلى 25 أيقونة. هذا أقل ب410 أيقونة

تخيل الحجم الذي تستطيع كسبه من حذف الأيقونات، هذا شيء لا يقوم به معظم مطوري الويب. حيث يستعملون الخط كما هو (439 أيقونة/80 كيلوبايت)

هناك بعض المواقع[4] تقوم بعمل رائع جدا، وهو اختزال الأيقونات التي لا تريد، أيّ بالتحديد. اختر الأيقونات التي تريدها فحسب

سبق واستعمل الموقع، وبدل أن تكون محصورا بمجموعة أيقونات واحدة، لديك عدد كبير لتختار منه. تقلص حجم الخط من 80 كيلوبايت إلى 3 كيلوبايت،

لا داعي لأشير على الفائدة الكبيرة المكتسبة

كما نرى، فإن الاستخدام العقلاني لهذه الأمور قد يخفض 500 كيلوبايت إلى 15 كيلوبايت

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

FontAwesome / Bootstrap / Jquery

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

كيف هذا؟

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

وإذا زار موقعك فلن يحمل شيئا. مما يعني 0

كل هذه كانت مجموعة نصائح تعلمتها أنا مع الوقت، وأجدها مفيدة جدا لمواقعك أو مواقع عملائكم

[1]

http://getbootstrap.com/cus...

[2]

http://sizzlejs.com

[3]

http://youmightnotneedjquer...

[4]

http://icomoon.io/app/#/select
يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

18

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

في مشروعي الأخير، وهو مدونة ثابتة static تعمل على صفحات GitHub، (اطلع على https://forabi.github.io)، قررت التخلي عن أطر العمل وكتابة كل ما أحتاجه من الصفر، هذه بعض الإرشادات التي التزمت بها:

  • لا jQuery، المشروع مبني على Angular JS والتي توفر بعض الخصائص القليلة الشائعة الاستخدام من jQuery عبر نسخة اسمها jqLite، وباقي التعديلات على الصفحة يمكن استخدام جافاسكربت الأصلية (native JavaScript)

  • لا أطر عمل: لا Bootstrap ولا Foundation. استخدمت LESS كمعالج مسبق لـCSS وقمت بتضمين media queries لجعل التصميم يستجيب لحجم الجهاز/النافذة.

  • تقليص الكود: تقليص حجم ملفات CSS، وملفات JS وحتى HTML.

  • أيقونات مخصصة: قمت بإنشاء خط خاص يحتوي فقط الأيقونات التي أحتاجها عن طريق الموقع الرائع http://fontastic.me

  • تطبيق صفحة واحدة: يتم تحميل التدوينات مفردة ثم عرضها دون الانتقال إلى صفحة جديدة، وهو الفكرة التي تقوم عليها Angular، استخدام AJAX في كل مكان تستطيع.

النتيجة كانت مدونة سريعة جدًا، كود نظيف، تصميم فريد من نوعه. يمكنك قراءة لماذا أنشأت هذه المدونة هنا: https://github.com/forabi/f...

عمل رااااائع :)

سؤال: هل يعني ذلك أن كافة المقاﻻت يتم تحميلها دفعة واحدة عند طلب الصفحة الرئيسية؟ ما لاحظته أن تحميل مقالة بعينها يستغرق بعض الوقت.

لا، يتم تقسيم التدوينات إلى صفحات كل صفحة فيها 10 صفحات، يتم تحميل 10 التدوينات التالية كل مرة يتم فيها التمرير لنهاية الصفحة (infinite scrolling).

طبعًا في الصفحة الرئيسية يتم تحميل العنوان والملخص فقط وليس كامل التدوينة.

ونسيت شي مهم وهو ضغط جميع الملفات css js بل وحتى ال html. فكل السطور لفصل الكود عند تصميم الموقع والتعليقات و (الخرابيش) من شانها تبطيئ الموقع بشكل كبيير ... وبالطبع مع اخذ نسخة من الموقع قبل الضغط ورفعه للاستضافة .. في حال احتجت تعديل اي شي

موضوع جوهري, أحييك عليه...

الكثير من الطلبات تأتيني حول تحليل سبب بطء الموقع, والذي يبدأ بالتواصل مع الدعم الفني وانتهاءاً بـ Code Optimization والذي غالباً ما يصيب مطوري ووردبريس واستخدام إضافات "بالهبل" لا حاجة لها بالغالب.

البعض يعتقد بإضافته لهذه المكملات لا الأساسيات يصبح موقعه أجمل, لكن بالواقع أثقل... أصحاب الاستضافات يعانون من الـ Traffic العالي وهو ما يوازي لهم "مالاً" لذلك سحقاً لجمالية الموقع ما لم تستخدم ما يلزم فقط.

بالنسبة لي:

  • مكاتب CSS و Javascript أقوم دائماً بضغطها Compressing .

  • بعض من مكاتب jQuery او CSS يمكنك من عمل Customize لما تحتاجه فقط.

  • في أولى إضافاتي على كروم "للتفاصيل:

    " قمت باستعمال مكتبة jQuery عندما تأكدت تماماً انني استخدم نسبة معقولة "بنظري" من الوظائف التي توفرها لي JQuery وبالطبع قللت وقتي في تطوير هذه الإضافة بشكل كبير ومعقول.

  • بالنسبة لـ CDN فلا أنصح به, وهنا أقوى 7 أسباب لذلك:

  • ضغط الصور, تحديداً صور PNG يمكنك ضغطها عبر موقع:

    وهو جداً رائع يوفر لك الكثير.

شكراً.

شكرا لك أخي

بالنسبة للـ CDN فبعض النقاط في ذلك الموضوع تعتبر لاغية بالنسبة للمكتبات المستضافة التي ذكرتها

فكل تلك المكتبات مستضافة على maxcdn وهو أفضل موزع cdn معروف حاليا

طبعا بالنسبة للنقطة الثانية في المقال الذي أدرجته. فنحن تركنا CDN كخيار أخير لمن ترك الملفات كما هي

كما أن النقاط الأخرى لا تعد موجود الآن، فالمقال عمره 3 سنوات، والأمور الآن تغيرت كثيرا جدا. وأصبح من الجيد وضع الملفات الثابتة في CDN

أتفق معك تماماً فيما يتعلق بـ CDN، وأعتقد أن الأسباب الواردة في المقال لا تزال منطقية حتى الآن، وخصوصاً البند الرابع.

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

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

أعني أنه لا بد من الموازنة بين هاتين الفئتين من المتطلبات.

تماما ولكن إذا كانت مصلحة المستخدم تصب في مصلحة المطور فهذا يعني فائدة للمطور

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

عندما أقوم بإضافة مكتبة bootstrap كاملة ذلك لأنى أستخدم 80% منها و ال 20% الآخرين أدعهم للمستقبل , هل تعرف ماذا أقصد بالمستقبل ؟

أقصد أن العميل الذى أقوم بعمل البرمجية أو التصميم له , قد يأتينى بعد عام أو اثنين و يطلب منى تعديلات فى التصميم , ماذا سأفعل إن كان هذا التعديل يتطلب العمل على ال 20% التى لم أستخدمها و فى نفس الوقت مطوروا المكتبة إنتقلوا إلى version آخر مختلف بالكلية عن الإصدار الذى عملت عليه أثناء عمل التصميم ؟

سأكون فى ورطة حقيقية لأنى قد لا أجد ال generator الخاص بالإصدار القديم و قد لا أجد ال 20% التى أحتاجها مما سيضطرنى إلى الإنتقال للإصدار الحالى و الذى قد يتطلب تغييراً كاملاً فى كود التصميم , من أجل تعديل بسيط .

أنت تضحي بحجم كبير من أجل احتمالية ضعيفة

ثم إذا استخدمت 80% منها، فهذا يعني أن هوية الموقع ستختفي لأن الأزرا تكون نفسها لكل المواقع، وكذا كل العناصر.

استخدام هذه الأمور (الأزرار والفورمز) تكون في النسخة الأولية فحسب، في النسخة الفعلية يجب أن يملك الموقع هوية منفرد ومختلفة

أخبرنى كيف اختفت هوية الموقع

في كثير من اﻷحيان المشكلة ليست في الحجم بحد ذاته بل هناك عوامل أخرى مثل:

  • عدد الملفات

  • مكان script و link في الصفحة

Yeoman يحل هذه المشكلة فمثلاً تستطيع أن تستخدم 20 إطار عمل لـCSS و 20 إطار عمل لـJavascript و يضغط جميع أطر عمل CSS و يضعها في ملف واحد و يقوم بنفس الشيء لـJavascript.

و بهذا يكون لديك ملف CSS واحد مضغوط عوضاً عن 20 و نفس الوضع مع Javascript.

أما بالنسبة لملفات CSS كتبتها أنت فيضغطها جميعها و يضعها في ملف واحد و نفس الكلام مع Javascript.

بهذه الطريقة يكون موقعك يحتوي على ملفين CSS و ملفين Javascript بغض النظر عن عدد الملفات التي تستخدمها في تطوير الموقع.

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

و في الوقت نفسه فإنه يقوم بضغط ملفات HTML فمثلا يمسح المسافات البيضاء.

موضوع ممتاز جدا من عدة نواحي، تحياتي

ثمة حل آخر لمسألة خطوط الأيقونات، وهو استخدام خطوط مثبتة مسبقاً في جهاز المستخدم.

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

http://richstyle.org/font.php

بالطبع لا يزال وضع هذه الفكرة موضع التنفيذ في الوقت الحاضر أمراً بعيد المنال.

مبدع في هذا الموضوع من الواضح انك خبير فالتصميم لقد استفد من موقع [3] هذا ما كنت اريده بالضبط ولا احتاج لملف Jquery كامل وحجم كبير بلا استخدام لكافة الدوال .