سؤال

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

الحل الوحيد الذي تمكنت من التوصل إليه حتى الآن هو جعل نوعا من المجمع حول وظائف عامل الويب الذي سيعود إلى بعض الحلول القائم على المؤقت المجنونة التي من شأنها محاكاة التنفيذ متعدد الخيوط.

ولكن حتى في هذه الحالة، كيف يكتشف المرء ما إذا كان عمال الويب هو ميزة مدعومة للمتصفح تنفيذ JavaScript حاليا؟

شكرا!

هل كانت مفيدة؟

المحلول

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

تحميل وظيفة pseudocode:

if( window.Worker /*check for support*/ )
    someObject.myFunction = function() { /*algorithm that uses Web Workers*/ }
else
    someObject.myFunction = function() { /* sad face */ }

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

نصائح أخرى

بعد مضغ هذا لبضعة أيام، انتهى بي الأمر كتابة مقال عن مدونتي:
http://codecube.net/2009/07/cross-platform-javascript-webworker/

الفكرة هي أنه في الحالات التي لم يتم تعريف webworker فيها، يوجد API التفاف الذي يستخدم تقنيات مدمجة فقط. على الرغم من أن العينة في المقالة بسيطة للغاية، إلا أنها تعمل في جميع المتصفحات :-)

مشروع بيزين لديه (ما يسمونه) مظهر زائف يسمح لهم بتشغيل رمز JavaScript في عمال الويب، والعاملين التروس وإذا غير متوفرون في الخيط الرئيسي.

إليك ما قاله جون ريس الرد على تعليق على مدونته

فكرت في هذا - ولكن سيكون صعبة. عليك أن تجعل رمز المعالجة الخاص بك استخدام Settimeout / setinterval من البداية (سينتهي هذا الرمز بالعمل في كل من عامل وعلى موقع ويب عادي). لذلك في حين أن النتيجة ستكون أبطأ قليلا للمتصفحات التي تدعم العمال على الأقل سيعمل في كلتا الحالتين.

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

لذلك كتبت أداة عمل يستخدم API عامل الويب عند توفرها أو أزرار API مع بعض الإضافات البسيطة للعامل الفعلي JS. باستطاعتك العثور WorkerFacade ك GIST على Github. وبعد عملت بشكل جيد بالنسبة لي، قد تساعد شخصا آخر أيضا.

يمكنك استخدام modernizr (http://modernizr.com/download/#-webworkers.) للكشف عن ما إذا كان المستعرض يدعم العاملين عبر الإنترنت، عند نقطة يجب أن يكون لديك إصدارات إصدأتين ... يمكنك رؤية المتصفحات باستخدام WebWorkers في http://caniuse.com/webworkers.

if(Modernizr.webworkers) 
{} 
else
{}

@ geowa4.

//globals
var useWorer={}
   ,noWorkerClosure=function(){...}
   ,myWorkerClosure=function(){...}
   ;
function init(){
         if(!!window.Worker){
           noWorkerClosure=null;
           useWorer=new myWorkerClosure();
         }
         else{
           useWorer=new noWorkerClosure();
           myWorkerClosure=null;
         }
}

وبهذه الطريقة، يمكنك تحرير بعض Onload anyload ولا تحتاج إلى طلب الدعم في كل مرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top