هذا سيجعل لهذه المكتبات أفضلية عند التطوير، ويجبر المطورين على استخدامها حتى وإن كان غيرها أفضل منها، أو أن هذه المكتبات لم تعد تُطوّر بالشكل المناسب... إلخ
المتصفحات تعطيك JavaScript، وCSS وHTML، هذه أشبه باللبنات التي يمكنك أن تركبها كما تشاء لتحصل على النتيجة المرغوبة، أما jQuery فهي طبقة مضاعفة فوق JavaScript تُسهل أداء المهام الشائعة، لكنك لا تحتاجها دومًا، أو لا تحتاج كل ما فيها. وBootstrap كذلك مجموعة من المكونات التي قد لا تناسبك أو لا تحتاجها. المتصفحات تعطيك القاعدة الأساسية ذات المستوى المنخفض (low-level) والمطورون أحرار بإضافة طبقات فوقها.
إضافة هذه المكتبات بنفس النسخة لكل المواقع قد يؤدي إلى خلق مشاكل في توافق هذه المواقع لأن بعضها يستخدم نسخة أقدم أو أحدث من الأخرى.
هذه الإضافة ستجعل الأمر مخالفًا لفكرة الويب المفتوح: أن تكون قادرًا على استخدام ما تشاء لبناء مواقعك بحرية كاملة دون التقيد بقيود أو محدودية مكتبة أو مكون ما.
هناك بديل أفضل لهذا: فكرة Web Components التي تتيح لك استيراد حزم متكاملة من HTML وCSS وJavaScript من إنتاج مطورين آخرين مثلاً واستخدامها في مشروعك: فكر بإمكانية عمل عارض صور بمجرد إضافة <photo-viewer></photo-viewer> أو جداول أو أزرار... هذه الفكرة قيد التخطيط تحت إشراف منظمة W3C المسؤولة عن معايير الويب. انظر مشروع Google Polymer الذي يبدو الأكثر توافقًا مع المعيار المُقترح.
لدي فكرة أخرى: لم لا تقدم المتصفحات فكرة مدير حزم؟ تمامًا كما تُدير الحزم في Node.js، لم لا يمكن للموقع أن يحدد المكتبات التي يحتاجها وأرقام الإصدارات المطلوبة في ملف مثل package.json ويقوم المتصفح بتنزيلها وتخزينها للاستفادة منها في وقت لاحق إذا طلبها موقع آخر؟ هذا سيحل مشكلة التوافق لأن أرقام الإصدارات محددة. ويخلق واجهة سهلة تتيح للمستخدم الاطلاع على ما يتطلبه الموقع وتنزيل أو تحديث المتطلبات.
Bower مدير حزم لمكتبات مشروعك من طرف الواجهة (frontend)، لا علاقة له بالمتصفحات... هو أقرب إلى أداة بسيطة تحمل المكتبات إلى مجلد خاص في مشروعك وتحل التعارض بين الإصدارات. ما أقصده هو وجود شيء مثل هذا على مستوى المتصفح، أي أن يقوم المتصفح بتخزين المكتبات وإدارة إصداراتها وتزويد الموقع بها من جهاز المستخدم.
أعتقد أن الحل حالياً أن تجمع المكتبات التي تستخدمها, مثلاً JQuery, AngularJS, X-Tags و تجعل برنامج يصغرها و يجمعها في ملف واحد و يسميها على حسب محتواها مثلا: 0d75ae33.vendor.js
و بهذه الطريقة سيحمله المتصفح أول مرة المستخدم يزور الصفحة و يخزن الملف و ﻻ يحمل الملف مرة أخرى إلا إذا تغير اسمه, مثلاً: 0d75a231.vendor.js
و بهذه الطريقة تضرب 3 عصافير بحجر واحد:
بدل من 3 ملفات ملف واحد
الملف حجمه أصغر
الملف يحمل مرة واحدة فقط و لا يحمل مرة أخر إلا إذا تغير محتواه
و طبعاً تضع script tags آخر الصفحة حتى يعمل المتصفح compile للملفات بعد أن يعرض محتوى الصفحة.
هذه ترجمة بتصرف لأحد الردود في الروابط التي أوردها الأخ نذير:
"تطبيق المتصفحات للمعايير يختلف أحيانًا وهذا يسبب مشاكل عدم التوافق، إذا أدمجت jQuery ضمن المتصفح فسيختلف تطبيقها بين المتصفحات كذلك، وسنحتاج إلى مكتبة جديدة تحل مشاكل عدم التوافق وهكذا..."
أيضًا jQuery وجدت لتأمين وسيلة متوافقة بين المتصفحات لتنفيذ مهمات شائعة. كونها شائعة لا يعني أن كل المطورين يحتاجونها، يجب على المتصفح أن يكون حياديًا في هذه الناحية.
أشكرك على اهتمامك... لدي حساب على تويتر بنفس معرفي هنا، لكنني لا أستخدم تويتر إلا نادرًا.
مجتمع لمناقشة وتبادل الخبرات حول تطوير الويب. ناقش أحدث التقنيات، اللغات، والأدوات في عالم تطوير المواقع والتطبيقات. شارك مشاريعك، اسأل عن نصائح، وتعاون مع مطورين محترفين وهواة.
التعليقات