السلام عليكم
خطر على بالى هذا السؤال , لماذا لا تأتى المكتبات الأكثر شهرة فى العالم مدمجه مع المتصفحات بشكل افتراضى و يمكننا تضمينها عبر رابط
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 وجدت لتأمين وسيلة متوافقة بين المتصفحات لتنفيذ مهمات شائعة. كونها شائعة لا يعني أن كل المطورين يحتاجونها، يجب على المتصفح أن يكون حياديًا في هذه الناحية.
أشكرك على اهتمامك... لدي حساب على تويتر بنفس معرفي هنا، لكنني لا أستخدم تويتر إلا نادرًا.
نعم، أوافقك الرأي بشأن Jquery ولكن ليس في bootstrap
على العموم، هناك نقاشان هنا حول نفس الأمر مع Jquery
الموضوع رائع , لكن لا اعلم كثيرا في البرمجة ولكن عندي المبدا
الفكرة رائعة ونتمنى ظهور مقل هذه المتصفحات , لكن هل الفكرة ممكنة في التطبيق .؟
جميع هذه المكتبات حجمها صغير جداااا فمثلا bootstrap.min.css حجمها تقريبا 100 ko لاتحتاج الكثير من الوقت ليتم تحميلها
بالإضافة كل مصمم قوالب دائما يعدل على المكتبة بالشكل الذي يريده
100 ko حجمها صغير جداااا
في عالم التطوير، كل كيلوبايت مهم، أنت لا تطور لشخص واحد لديه 8 ميغا في البيت
أنت تطور للجميع، أ،ت تطور لمن يملك 128 كيلو بايت، أنت تطور لمن يتصل بالهاتف. أنت تطور لصاحب النت المحدود. أنت تطور لقليل الصبر
كل شيء مهم
نعم أن أطور للجميع
لكن أنا أريد إستخدام مكتبة foundation و ليس bootstrap لا لا لا في هذا المشروع العميل طلب أن أطور له بمكتبة xxxxxxxx إذا ماذا أفعل هل أفرض عليه مكتبة أخرى ؟
إدا تم دمج المكتبات صحيح أنه سيخفف العبء لكن تعدد المكتبات يجعل الأمر صعب على أن يتم إضافة أغلب المكتبات الى كل متصفح
و قد يعمل بشكل جيد على كرووم و بشكل سيء على فيرفوكس مثلا
و أنت تعلم هناك من لازال يستعمل إنترنيت إكسبلورر :)
و في ما يخص الجيكوري أنا معك تماماََ لأن هناك جيكوري واحد وليس , BQuery, AQuery ....
تعديل الفكرة التى طرحتها , لا يتم دمج أو إضافة أغلب المكتبات إلى كل متصفح , ولكن يكون مثل مدير الحزم و هو يعمل كالآتى :
1- المتصفح يأتى بدون أى مكتبات
2- المطورين الراغبين فى إستخدام الإصدار 10 من مكتبة jquery على سبيل المثال يضعون الكود الآتى فى مواقعهم
<script src="browser://jquery.lib.repo/jquery.v.10.js"></script>
3- عندما يقوم الزائر بزيارة أحد المواقع التى قام مطورها باستخدام نفس الصيغة أعلاه فيقوم المتصفح بتحميل المكتبة و الإحتفاظ بها.
4- وعندما يزور نفس الزائر (المواقع الأخرى) التى استخدمت الصيغة , فيتم استخدام المكتبة التى تم تحميلها من قبل مباشرة و هكذا دون إعادة تحميل و عمل كاش لكل موقع
الحل يكمن في استخدم CDN ، بدلا من ارفاق المكتبة بالمتصفح
هنالك مواقع ، مثل جوجل تعطيك رابط يمكنك وضعه للمكتبة مثلا رابط الجي كويري
لو دخلت مرة واحدة عبر موقع يستخدم هذا الرابط، سيتم حفظه في المتصفح
لو المستخدم فتح أي موقع به هذا الرابط، فسيتم تحميله من النسخة المحفوظة، وبالتالي توفير التحميل
ولكن عندما ينقطع إتصال الإنترنت الخاص بك و تريد التعامل مع موقع على ال localhost مثلاً , تكون مشكلة
هلا اخي خشباوي
ما دخل اللوكالهوست في سرعة تصفح الانترنت ؟
أثناء عملك على اللوكالهوست يمكنك تغيير الرابط لملف محلي
وعند رفعك على الانترنت، يمكنك اخي خشباوي تغيير الرابط
تمام و لكنه يكون أمر مزعج تغيير الملفات لمحلى و من ثم استخدام رابط آخر عند نشر الموقع وخاصة إن كنت تستخدم أكثر من رابط CDN لأكثر من مكتبة
و لكنى أوافقك تماماً أنها الحل الوحيد حالياً :) , شكراً أخى خليل
التعليقات