0Pricing
JavaScript Academy · درس

حالات الاستخدام والقيود

اعرفوا متى تكون العوامل مفيدة وما لا يمكنها فعله.

حالات الاستخدام والقيود درس مجاني في JavaScript Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في JavaScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة JavaScript Academy 4 دروس في المجموع.

ما يجيده العمال

تتألق Web Workers عند وجود عمل كثيف على وحدة المعالجة المركزية كان سيؤدي لولاها إلى تجميد واجهة المستخدم:

  • معالجة الصور والفيديو
  • تحليل الملفات الكبيرة (CSV وJSON)
  • التشفير وإنشاء التجزئات
  • الفيزياء وتحليل البيانات وعمليات المحاكاة

عدم الوصول إلى DOM

أكبر القيود هو أن العمال لا يستطيعون التعامل مع DOM. فلا يوجد document أو window. يحسب العمال البيانات ويرسلونها مرة أخرى، ثم يحدّث الخيط الرئيسي واجهة المستخدم.

// Inside a worker:
// document.querySelector(...) -> ReferenceError
// Workers have no DOM at all.

ما هو متاح

لا يزال بإمكان العمال استخدام العديد من واجهات برمجة التطبيقات المفيدة: fetch وsetTimeout وWebSocket وIndexedDB وcrypto والمصفوفات المعرّفة النوع. لذلك يعمل جلب البيانات وتخزينها بشكل جيد خارج الخيط الرئيسي.

// Inside a worker this is valid:
// const res = await fetch('/data.json');
// const json = await res.json();
// self.postMessage(json);

قيود الاستنساخ المنظم

تذكّروا أن الرسائل تُنسخ عبر الاستنساخ المنظم. لا يمكنكم إرسال الدوال أو عقد DOM أو مثيلات الأصناف التي تحتوي على أساليب؛ يمكنكم إرسال بياناتها القابلة للتسلسل فقط.

// Cannot be sent:
// worker.postMessage(() => {});      // function - fails
// worker.postMessage(document.body); // DOM node - fails

تكلفة بدء التشغيل وتبادل الرسائل

ينطوي إنشاء عامل وتسلسل الرسائل على تكلفة إضافية. وبالنسبة إلى المهام الصغيرة جدًا، قد تفوق تكلفة تبادل الرسائل الفائدة المرجوة. تحقق العمال فائدة حقيقية عند تنفيذ عمل كبير ومستمر.

إبقاء العمال قيد التشغيل

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

// Reuse one worker for many tasks:
const worker = new Worker('worker.js');
function run(task) {
  worker.postMessage(task);
}
// Avoid: new Worker(...) on every single call.

مجموعات العمال

لاستخدام عدة أنوية لوحدة المعالجة المركزية، أنشئوا عدة عمال ووزّعوا المهام عليهم. تتبّعوا العمال غير المشغولين وأسندوا العمل الوارد إلى العمال المتاحين.

const pool = [];
for (let i = 0; i < 4; i++) {
  pool.push(new Worker('worker.js'));
}
// Round-robin or queue tasks across the pool.

مشاركة الذاكرة

في الحالات المتقدمة، تتيح SharedArrayBuffer للخيوط مشاركة الذاكرة مباشرة (مع استخدام Atomics للوصول الآمن). ويتطلب ذلك ترويسات عزل خاصة للمصادر المشتركة، كما يسهل إساءة استخدامه.

// Requires COOP/COEP headers to be enabled.
// const shared = new SharedArrayBuffer(1024);
// Atomics.add(view, 0, 1); // safe concurrent update

عزل الأخطاء

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

worker.onerror = (e) => {
  console.log('worker failed:', e.message);
  // optionally recreate the worker here
};

متى لا تستخدمون العمال

تجنبوا العمال عندما تكون المهمة بسيطة، أو تتطلب تحديثات مستمرة لـ DOM، أو تكون في معظمها انتظارًا للشبكة؛ إذ إن fetch غير المتزامن لا يحظر التنفيذ أصلًا. استخدموهم للعمل الحقيقي المقيّد بوحدة المعالجة المركزية.

جمع العناصر معًا

تستبدل Web Workers الوصول المباشر إلى DOM وسهولة مشاركة البيانات بالتوازي الحقيقي. استخدموها للحسابات الثقيلة، وتواصلوا عبر الرسائل، وأعيدوا استخدام العمال، وانقلوا المخازن المؤقتة الكبيرة للحفاظ على سرعة تطبيقكم وسلاسة عمله.

تحقق سريع

اختبروا مدى فهمكم لحالات استخدام العمال وقيودهم.

مراجعة

لقد تعلمتم حالات استخدام العمال وقيودهم:

  • إنهم مناسبون للعمل الكثيف على وحدة المعالجة المركزية، لكنهم لا يستطيعون الوصول إلى DOM.
  • تتوفر العديد من واجهات برمجة التطبيقات، مثل fetch وIndexedDB وcrypto.
  • تُستنسخ الرسائل استنساخًا منظمًا، لذلك لا يمكن نقل الدوال أو عقد DOM.
  • أعيدوا استخدام العمال أو استخدموا مجموعات منهم لتوزيع تكلفة بدء التشغيل.
  • تبقى الأخطاء معزولة داخل العامل.

لقد أكملتم درس Web Workers. بعد ذلك، ستتعلمون عن IndexedDB.

الأسئلة الشائعة

هل درس «حالات الاستخدام والقيود» مجاني؟

نعم — نص درس «حالات الاستخدام والقيود» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة JavaScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة JavaScript Academy 4 دروس في المجموع.

ماذا ستتعلم في «حالات الاستخدام والقيود»؟

اعرفوا متى تكون العوامل مفيدة وما لا يمكنها فعله. تتمرن على JavaScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ JavaScript Academy؟

لا تُشترط خبرة سابقة. JavaScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «حالات الاستخدام والقيود»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس JavaScript Academy هذا؟

نعم. كل درس في JavaScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إنشاء Web Worker
  2. التراسل باستخدام postMessage
  3. الكائنات القابلة للنقل
  4. حالات الاستخدام والقيود
← العودة إلى JavaScript Academy