رافعة للاستخدام في Quorus

24 مارس 2011 في 09:49 بواسطة بيتر Abrahamsen | في التنمية ، تطبيقات YUI | 1 تعليق

اليوم ، أود التحدث عن محمل YUI وكيف ونحن في Quorus ، وشركة ، واستخدامها لتقديم طرف ثالث المواقع مع ميزات جديدة على الطلب.

Quorus قطة

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

بدأنا قاعدتنا رمز الحالي قبل عامين ، عندما كان YUI 3 مجرد أخذ الشكل. كان قرار محفوف بالمخاطر في الوقت الذي تلتزم CODEBASE التي لن تصل بيتا لعدة أشهر. في الماضي لا أستطيع أن أتخيل كيف كنا قد أنجزت ما لدينا من دونها. أنا لم أر أي إطار آخر يحتوي على مكونات تقترب من قوة تحميل ، سمة ، و CustomEvent .

السيناريو التمهيد Quorus التي نقدمها لعملائنا لا يفعل شيئا تقريبا. ومهمتها هي فقط لتحميل جوهر برنامجنا دون عرقلة بقية تحميل الصفحة ، وانتظار أي مكالمات API فعلناه حتى الآن. هذا الملف النصي الأساسية ، ودعا stage2 ، inlines yui ، loader ، و oop ، فضلا عن الذكاء ما يكفي لتحميل مكتبات إضافية للرد على المكالمات API ، ينقر المستخدم ، وغيرها من الشروط في بيئة التشغيل. يتم تقديم معظم الموارد الأخرى من خلال جهاز خادم مخصص السرد التي تخدم وحدات مخصصة Quorus YUI الأسهم.

Bootstrap طوابير تصل API المكالمات التي تتم في رمز الموقع بين المضيف عندما الأحمال وعندما نكون على استعداد للذهاب في صفيف على هدفنا العالمية ، QUORUS :

 QUORUS._callbacks = []; QUORUS.use = function () { // turn the arguments object into a regular array, // so that it can be stored safely var args = Array.prototype.slice.call(arguments, 0); QUORUS._callbacks.push(args); }; 

مرة واحدة ونحن على استعداد لمعالجة مكالمات API ، stage2 يدير واحدا تلو الآخر في مهلة. هذا يضمن نستسلم السيطرة مرة أخرى بشكل منتظم إلى المستعرض ، الأمر الذي يجعل من تجربة المستخدم أكثر استجابة. سلوك الكثير مثل Y. AsyncQueue ، ولكن أبسط ولا يتطلب أن يتم تحميل YUI :

 // Put the real 'use' function in place for any subsequent calls: QUORUS.use = function (feature, callback) { YUI.use('module-that-provides-the-feature', function (Y) { // find the API for the requested feature, and pass it to the callback callback(Y.APIs[feature]); // process another pending API call, if any: setTimeout(processAPICall, 0); }); }; // Play catch-up, running each callback in sequence: function processAPICall () { var callback = QUORUS._callbacks.shift(); if (callback) { QUORUS.use.apply(QUORUS, callback); } } // Start processing the queue: processAPICall(); 

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

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

Quorus JS تحميل رسما تخطيطيا

إذا كنا بدءا CODEBASE لدينا اليوم ، مع الاستفادة من معرض YUI ، وهناك عدد من العناصر ونحن قد تستخدم لجعل حياتنا أسهل. واحد منهم هو اريك Ferraiuolo في إدارة مكونات قاعدة ، والتي تساعد في الأسلاك حتى المكونات (القطع عادة) على الطلب. قد يكون آخر التخزين لايت ، لتساعدنا في الاحتفاظ حالة التطبيق عبر صفحة الأحمال.

جزيل الشكر لفريق YUI على عملهم العظيم ، وإلى المجتمع لما قدموه من مساهمات. إذا كنت ترغب في قراءة عن نهجنا لsandboxing أو لتنسيق المكونات تحميلها بشكل غير متزامن ، واسمحوا لي أن نعرف في التعليقات!

بيتر Abrahamsen عن المؤلف : بيتر Abrahamsen يكتب روبي وجافا سكريبت ، ويدير البنية التحتية للخادم ، والدراسات التي تركز على المستخدم تصميم في سياتل ، واشنطن ، الولايات المتحدة الأمريكية. ويمكن العثور عليه في المركز كما Rainhead.

وتوسيع حصة : مع الإشارة المرجعية متواجد حاليا | مراجعته ذلك! | reddit!

1 تعليق »

آر إس إس للتعليقات على هذه الوظيفة. TrackBack العنوان

  1. مرحبا بيتر ،
    انا فعلا غريبة جدا حول دعوة QUORUS.use الخاص. يبدو أنك مقايضة بها مع مكالمة استخدام YUI الذي يحمل ما يصل وحدة واحدة محددة.
    ايم لا نرى كيف أن هذا يرتبط دعوات محددة إلى API. كيف يمر بك من "ميزة" إلى التعادل QUORUS.use إلى وحدة لاستخدام YUI ، ما لم تكن وحدة واحدة في العالم (على الرغم من أنه لا يتناسب مع الرسم لديك ويظهر شريط القوائم القطعة)؟

    أيضا ، هل فعلت أي اختبار باستخدام الأسلوب settimeout قائمة الانتظار التي قمت معروضة مقابل مجرد وضع جميع الوحدات في بيان استخدام واحدة؟
    على ما يبدو ، سيكون من الناحية النظرية مثل setTimeout أن يكون أفضل في الافراج عن السيطرة على المتصفح ، ولكن TTI أعلى عموما مع صفحة (نظرا لأنه يدعو إلى استخدام جديد كل 10 - 15ms والقيام بمجموعة مختلفة من الحسابات شجرة التبعية لكل وحدة) ، ولكن أنا الغريب كما لو كنت قد اختبرت الرجال one مقابل الآخر؟

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

    تعليق كافانو نيت -- 16 أبريل 2011 #

ترك تعليق

ملاحظة : التعليقات خاضعة للإشراف على أجهزة توقيت والعشرين. المزعج حذفها.

XHTML : <ahref="" title=""> <abbrtitle=""> <acronymtitle=""> <B><blockquotecite=""> <cite>برمجيات <code><deldatetime=""> <em><I><qcite=""> <strike>على <strong>

استضافته ياهو

حقوق الطبع © 2006-2011 شركة ياهو جميع الحقوق محفوظة سياسة الخصوصية -- شروط الخدمة

مدعوم من وورد على ياهو! استضافة المواقع .