السلام عليكم
خطر على بالى هذا السؤال , لماذا لا تأتى المكتبات الأكثر شهرة فى العالم مدمجه مع المتصفحات بشكل افتراضى و يمكننا تضمينها عبر رابط
browser://jquery.v.10.js مثلا ؟؟
لو أن ذلك ممكن ستتضاعف سرعة معظم مواقع الإنترنت التى نتصفحها .
كنت أفكر في شيء مثل هذا، لكن هذا الأمر له عيوبه:
هذا سيجعل لهذه المكتبات أفضلية عند التطوير، ويجبر المطورين على استخدامها حتى وإن كان غيرها أفضل منها، أو أن هذه المكتبات لم تعد تُطوّر بالشكل المناسب... إلخ
المتصفحات تعطيك JavaScript، وCSS وHTML، هذه أشبه باللبنات التي يمكنك أن تركبها كما تشاء لتحصل على النتيجة المرغوبة، أما jQuery فهي طبقة مضاعفة فوق JavaScript تُسهل أداء المهام الشائعة، لكنك لا تحتاجها دومًا، أو لا تحتاج كل ما فيها. وBootstrap كذلك مجموعة من المكونات التي قد لا تناسبك أو لا تحتاجها. المتصفحات تعطيك القاعدة الأساسية ذات المستوى المنخفض (low-level) والمطورون أحرار بإضافة طبقات فوقها.
إضافة هذه المكتبات بنفس النسخة لكل المواقع قد يؤدي إلى خلق مشاكل في توافق هذه المواقع لأن بعضها يستخدم نسخة أقدم أو أحدث من الأخرى.
هذه الإضافة ستجعل الأمر مخالفًا لفكرة الويب المفتوح: أن تكون قادرًا على استخدام ما تشاء لبناء مواقعك بحرية كاملة دون التقيد بقيود أو محدودية مكتبة أو مكون ما.
هناك بديل أفضل لهذا: فكرة Web Components التي تتيح لك استيراد حزم متكاملة من HTML وCSS وJavaScript من إنتاج مطورين آخرين مثلاً واستخدامها في مشروعك: فكر بإمكانية عمل عارض صور بمجرد إضافة <photo-viewer></photo-viewer>
أو جداول أو أزرار... هذه الفكرة قيد التخطيط تحت إشراف منظمة W3C المسؤولة عن معايير الويب. انظر مشروع Google Polymer الذي يبدو الأكثر توافقًا مع المعيار المُقترح.
لدي فكرة أخرى: لم لا تقدم المتصفحات فكرة مدير حزم؟ تمامًا كما تُدير الحزم في Node.js، لم لا يمكن للموقع أن يحدد المكتبات التي يحتاجها وأرقام الإصدارات المطلوبة في ملف مثل package.json ويقوم المتصفح بتنزيلها وتخزينها للاستفادة منها في وقت لاحق إذا طلبها موقع آخر؟ هذا سيحل مشكلة التوافق لأن أرقام الإصدارات محددة. ويخلق واجهة سهلة تتيح للمستخدم الاطلاع على ما يتطلبه الموقع وتنزيل أو تحديث المتطلبات.
لن يحدث أى تعارض فى الإصدارات طالما أن المطور يقوم بتحديد إصدار المكتبة كما هو موضح
browser://jquery.v.10.js
و بالتالى سيقوم المتصفح أول مره فقط بتنزيل المكتبة وفقاً للإصدار الموضح و فى باقى المرات سيستخدمها من المتصفح نفسه
هذا أقرب إلى نظام مدير الحزم الذى ذكرته و هو نظام ممتاز جداً .
لا ترى فرقاً حقاً ؟؟؟
كل موقع الآن يسمى ملف الجيكويرى كما يحب :
site1.com/js/jquery.min.js
site2.com/jq.js
www.site2.com/jq.js
site3.com/jquery.js
site3.com/jquery.library.js
سيتم تحميل الملف كل مره لكل موقع على حده وعمل كاش له مما يؤدى :
زيادة حجم الكاش
زيادة استهلاك الذاكره لكثرة الملفات المفتوحه عند زيارة عدد كبير من المواقع .
أما ما أقصده أن يتم تنزيل الملف مره واحده فقط فلن يتم إعادة تحميلها لأن كل المواقع ستطلب من هذا الرابط
browser://jquery.v.10.js
كما أنه إذا لم يقم المتصفح بالتحميل فستظل المكتبات قديمه وغير متوفر الإصدارات الجديده منها .
"لم لا تقدم المتصفحات فكرة مدير حزم؟"
يوجد مدير حزم مثل npm و اسمه bower
Web Components هي مجموعة APIs يتم تطويرها للمتصفحات لتزيد من إمكانياتها.
Custom Elements هو أحد هذه الإمكانيات و أعتقد أنها مستقبل تطوير واجهات الويب.
أما بالنسبة لـCustom Elements و Polymer فهي جاهزة للاستخدام:
أما بالنسبة لـ JQuery فلا تصلح لتطوير أغلب تطبيقات الويب, بالطبع هناك استثنائات.
غالبا ستحتاج إطار عمل متكامل مثل: AngularJS, Backbone, Ember.
و باﻹضافة ستحتاج إلى إطار عمل ينظم عملك و يسرعه مثل: Yeoman.
bower ليس مخصصا للمتصفحات، ففكرته مختلفة
أولا يجب هو مخصص للتطوير المحلي، فيجب أن تثبته في حاسوبك، وتحدد المكتبات وهو يحملها لحاسوبك وليس لمتصفح العميل
Bower مدير حزم لمكتبات مشروعك من طرف الواجهة (frontend)، لا علاقة له بالمتصفحات... هو أقرب إلى أداة بسيطة تحمل المكتبات إلى مجلد خاص في مشروعك وتحل التعارض بين الإصدارات. ما أقصده هو وجود شيء مثل هذا على مستوى المتصفح، أي أن يقوم المتصفح بتخزين المكتبات وإدارة إصداراتها وتزويد الموقع بها من جهاز المستخدم.
أعتقد أن الحل حالياً أن تجمع المكتبات التي تستخدمها, مثلاً JQuery, AngularJS, X-Tags و تجعل برنامج يصغرها و يجمعها في ملف واحد و يسميها على حسب محتواها مثلا: 0d75ae33.vendor.js
و بهذه الطريقة سيحمله المتصفح أول مرة المستخدم يزور الصفحة و يخزن الملف و ﻻ يحمل الملف مرة أخرى إلا إذا تغير اسمه, مثلاً: 0d75a231.vendor.js
و بهذه الطريقة تضرب 3 عصافير بحجر واحد:
بدل من 3 ملفات ملف واحد
الملف حجمه أصغر
الملف يحمل مرة واحدة فقط و لا يحمل مرة أخر إلا إذا تغير محتواه
و طبعاً تضع script tags آخر الصفحة حتى يعمل المتصفح compile للملفات بعد أن يعرض محتوى الصفحة.
الفكرة التي كانت ولا تزال تراودني حتى الآن: لم لا يتم تبني مكتبة jQuery تحديداً من قبل جمعية W3C؟!
بالمناسبة أخ فواز هل لديك حساب على تويتر؟ بصراحة ردودك وتعليقاتك هنا تثير اهتمامي دائماً :)
هذه ترجمة بتصرف لأحد الردود في الروابط التي أوردها الأخ نذير:
"تطبيق المتصفحات للمعايير يختلف أحيانًا وهذا يسبب مشاكل عدم التوافق، إذا أدمجت jQuery ضمن المتصفح فسيختلف تطبيقها بين المتصفحات كذلك، وسنحتاج إلى مكتبة جديدة تحل مشاكل عدم التوافق وهكذا..."
أيضًا jQuery وجدت لتأمين وسيلة متوافقة بين المتصفحات لتنفيذ مهمات شائعة. كونها شائعة لا يعني أن كل المطورين يحتاجونها، يجب على المتصفح أن يكون حياديًا في هذه الناحية.
أشكرك على اهتمامك... لدي حساب على تويتر بنفس معرفي هنا، لكنني لا أستخدم تويتر إلا نادرًا.
التعليقات