دليل شامل لتحسين أداء JavaScript في متصفحات الويب، يركز على الاستراتيجيات والتقنيات وأطر العمل لبناء تطبيقات عالمية سريعة ومتجاوبة.
إطار عمل أداء المتصفح: استراتيجية تحسين JavaScript للتطبيقات العالمية
في المشهد الرقمي اليوم، لم يعد تطبيق الويب السريع والمتجاوب ترفًا، بل ضرورة. يتوقع المستخدمون في جميع أنحاء العالم تجارب سلسة، ويمكن أن يؤدي بطء أوقات التحميل أو الأداء البطيء إلى الإحباط، والتخلي عن الجلسات، وفي النهاية، خسارة الإيرادات. تلعب JavaScript، كونها حجر الزاوية في تطوير الويب الحديث، دورًا مهمًا في تحديد الأداء العام للموقع. يستكشف هذا الدليل الشامل إطار عمل قويًا لأداء المتصفح يركز على تحسين JavaScript، ويقدم استراتيجيات وتقنيات وأفضل الممارسات لبناء تطبيقات عالمية عالية الأداء.
فهم أهمية أداء المتصفح
قبل الخوض في تقنيات التحسين المحددة، من الضروري فهم سبب أهمية أداء المتصفح، خاصة للتطبيقات التي تستهدف جمهورًا عالميًا.
- تجربة المستخدم (UX): تساهم أوقات التحميل السريعة والتفاعلات السلسة بشكل مباشر في تجربة مستخدم إيجابية. يبدو التطبيق المتجاوب أكثر سهولة ومتعة في الاستخدام، مما يؤدي إلى زيادة المشاركة ورضا العملاء.
- تحسين محركات البحث (SEO): تعتبر محركات البحث مثل Google سرعة الصفحة كعامل ترتيب. من المرجح أن يحتل موقع الويب الأسرع مرتبة أعلى في نتائج البحث، مما يؤدي إلى زيادة حركة المرور العضوية.
- معدلات التحويل: أظهرت الدراسات وجود علاقة مباشرة بين سرعة موقع الويب ومعدلات التحويل. يمكن لموقع الويب الأسرع أن يحسن بشكل كبير من احتمالية إكمال المستخدمين للإجراءات المطلوبة، مثل إجراء عملية شراء أو ملء نموذج.
- تحسين الجوال: مع تزايد انتشار الأجهزة المحمولة، أصبح تحسين أداء الجوال أمرًا بالغ الأهمية. غالبًا ما يكون لدى مستخدمي الجوال اتصالات إنترنت أبطأ وخطط بيانات محدودة، مما يجعل تحسين الأداء أكثر أهمية. وهذا وثيق الصلة بشكل خاص في الأسواق الناشئة حيث يكون الوصول عبر الجوال هو الأول أو الوحيد. على سبيل المثال، في العديد من البلدان الأفريقية، تعد بيانات الجوال هي الطريقة الأساسية التي يصل بها الناس إلى الإنترنت. لذلك، يمكن لـ JavaScript الثقيل وغير المحسن أن يجعل التطبيق غير قابل للاستخدام.
- إمكانية الوصول العالمية: يصل المستخدمون إلى تطبيقك من مواقع مختلفة بظروف شبكة وقدرات أجهزة متفاوتة. يضمن التحسين تجربة متسقة وعالية الأداء بغض النظر عن الموقع أو الجهاز. فكر في المستخدمين في المناطق ذات النطاق الترددي المحدود، مثل المناطق الريفية في أمريكا الجنوبية أو أجزاء من جنوب شرق آسيا. يجعل التحسين تطبيقك متاحًا لجمهور أوسع.
إنشاء إطار عمل لأداء المتصفح
يوفر إطار عمل الأداء نهجًا منظمًا لتحديد ومعالجة ومراقبة اختناقات الأداء بشكل مستمر. تشمل المكونات الرئيسية لإطار عمل شامل ما يلي:
1. قياس الأداء والمراقبة
الخطوة الأولى هي إنشاء خط أساس ومراقبة مقاييس الأداء بشكل مستمر. يتضمن ذلك تتبع المؤشرات الرئيسية مثل:
- وقت التحميل: الوقت الذي تستغرقه الصفحة للتحميل بالكامل، بما في ذلك جميع الموارد.
- أول عرض للمحتوى (FCP): الوقت الذي يستغرقه ظهور أول جزء من المحتوى (مثل نص أو صورة) على الشاشة.
- أكبر عرض للمحتوى (LCP): الوقت الذي يستغرقه أكبر عنصر محتوى ليصبح مرئيًا.
- الوقت حتى التفاعل (TTI): الوقت الذي تستغرقه الصفحة لتصبح تفاعلية بالكامل وتستجيب لإدخال المستخدم.
- إجمالي وقت الحظر (TBT): إجمالي مقدار الوقت الذي يتم فيه حظر الصفحة من الاستجابة لإدخال المستخدم.
- تأخير الإدخال الأول (FID): الوقت الذي يستغرقه المتصفح للاستجابة لأول تفاعل للمستخدم (مثل النقر على زر).
أدوات قياس الأداء:
- Google PageSpeed Insights: يوفر تقارير أداء مفصلة وتوصيات للتحسين.
- WebPageTest: يقدم إمكانيات اختبار متقدمة، بما في ذلك محاكاة ظروف الشبكة وأنواع الأجهزة المختلفة.
- Lighthouse: أداة مفتوحة المصدر وآلية لتحسين جودة صفحات الويب. تحتوي على عمليات تدقيق للأداء، وإمكانية الوصول، وتطبيقات الويب التقدمية، وتحسين محركات البحث، والمزيد.
- Chrome DevTools: توفر أدوات شاملة لتوصيف الأداء، بما في ذلك القدرة على تحديد الاختناقات في تنفيذ JavaScript، والعرض، وطلبات الشبكة.
- New Relic, Datadog, Sentry: هذه حلول تجارية لمراقبة أداء التطبيقات (APM) تقدم مراقبة أداء متعمقة وتتبع الأخطاء. تتيح لك تتبع مقاييس تجربة المستخدم في الوقت الفعلي وتحديد تراجعات الأداء.
نصيحة قابلة للتنفيذ: نفذ نظامًا للمراقبة المستمرة لهذه المقاييس في بيئات التطوير والإنتاج الخاصة بك. حدد ميزانيات الأداء وتتبع الاتجاهات بمرور الوقت لتحديد التراجعات ومجالات التحسين.
2. تحديد اختناقات الأداء
بمجرد حصولك على بيانات الأداء، فإن الخطوة التالية هي تحديد الأسباب الجذرية لمشكلات الأداء. تشمل الاختناقات الشائعة المتعلقة بـ JavaScript ما يلي:
- حزم JavaScript الكبيرة: يمكن أن يؤدي كود JavaScript المفرط إلى زيادة أوقات التحميل بشكل كبير.
- كود غير فعال: يمكن أن يؤدي كود JavaScript المكتوب بشكل سيئ أو غير المحسن إلى بطء التنفيذ والاستخدام المفرط للذاكرة.
- اختناقات العرض: يمكن أن تؤثر التلاعبات المتكررة في DOM ومنطق العرض المعقد على معدلات الإطارات وتسبب التقطع (jank).
- طلبات الشبكة: يمكن أن تؤدي طلبات الشبكة المفرطة أو غير الفعالة إلى إبطاء أوقات تحميل الصفحة.
- البرامج النصية لجهات خارجية: غالبًا ما يمكن أن تضيف البرامج النصية لجهات خارجية (مثل التحليلات والإعلانات) عبئًا على الأداء.
أدوات تحديد الاختناقات:
- علامة تبويب الأداء في Chrome DevTools: استخدم علامة تبويب الأداء في Chrome DevTools لتسجيل وتحليل أداء تطبيقك. حدد المهام طويلة الأمد، واختناقات العرض، وتسريبات الذاكرة.
- علامة تبويب الذاكرة في Chrome DevTools: استخدم علامة تبويب الذاكرة لتوصيف استخدام الذاكرة وتحديد تسريبات الذاكرة.
- خرائط المصدر (Source Maps): تأكد من تمكين خرائط المصدر في بيئة التطوير الخاصة بك لربط الكود المصغر بسهولة بالكود المصدري الأصلي لتصحيح الأخطاء.
مثال: تخيل منصة تجارة إلكترونية عالمية. إذا واجه المستخدمون في اليابان أوقات تحميل أبطأ بكثير من المستخدمين في أمريكا الشمالية، فقد يكون الاختناق مرتبطًا بتكوين شبكة توصيل المحتوى (CDN)، أو حجم حزم JavaScript التي يتم تقديمها من خوادم أقرب إلى أمريكا الشمالية، أو استعلامات قاعدة بيانات غير فعالة أبطأ في مراكز البيانات التي تخدم اليابان.
3. تقنيات تحسين JavaScript
مع تحديد الاختناقات، فإن الخطوة التالية هي تنفيذ تقنيات التحسين لتحسين أداء JavaScript.
أ. تقسيم الكود (Code Splitting)
تقسيم الكود هو عملية تقسيم كود JavaScript الخاص بك إلى حزم أصغر يمكن تحميلها عند الطلب. هذا يقلل من وقت التحميل الأولي ويحسن الأداء الملموس.
- التقسيم المستند إلى المسار: قسم الكود الخاص بك بناءً على المسارات أو الصفحات المختلفة في تطبيقك. قم فقط بتحميل كود JavaScript المطلوب للمسار الحالي.
- التقسيم المستند إلى المكونات: قسم الكود الخاص بك بناءً على المكونات أو الوحدات الفردية. قم بتحميل المكونات فقط عند الحاجة إليها.
- تقسيم مكتبات الطرف الثالث (Vendor): افصل مكتبات الطرف الثالث (مثل React، Angular، Vue.js) في حزمة منفصلة. يتيح ذلك للمتصفحات تخزين هذه المكتبات مؤقتًا، مما يحسن الأداء للزيارات اللاحقة.
أدوات تقسيم الكود:
- Webpack: مُجمِّع وحدات شائع يدعم تقسيم الكود بشكل افتراضي.
- Parcel: مُجمِّع لا يتطلب أي تكوين ويقوم تلقائيًا بتقسيم الكود.
- Rollup: مُجمِّع وحدات مناسب جدًا لتطوير المكتبات ويدعم التخلص من الكود غير المستخدم (tree shaking).
مثال: في موقع إخباري عالمي، يمكنك تقسيم الكود إلى أقسام مثل 'أخبار العالم'، و'الرياضة'، و'الأعمال'، و'التكنولوجيا'. المستخدم الذي يزور قسم 'الرياضة' فقط سيقوم بتنزيل JavaScript المطلوب لهذا القسم المحدد فقط، مما يقلل من وقت التحميل الأولي للأقسام الأخرى التي لا يحتاجها.
ب. التخلص من الكود غير المستخدم (Tree Shaking)
التخلص من الكود غير المستخدم هو عملية إزالة الكود غير المستخدم من حزم JavaScript الخاصة بك. هذا يقلل من حجم الحزم ويحسن أوقات التحميل.
- وحدات ES: استخدم وحدات ES (
import
وexport
) لتمكين التخلص من الكود غير المستخدم. يمكن لمُجمِّعات الوحدات تحليل الكود الخاص بك وتحديد الصادرات غير المستخدمة. - إزالة الكود الميت: قم بإزالة أي كود لا يتم تنفيذه أبدًا.
أدوات التخلص من الكود غير المستخدم:
- Webpack: يقوم Webpack تلقائيًا بالتخلص من الكود غير المستخدم عند استخدام وحدات ES.
- Rollup: يعتبر Rollup فعالًا بشكل خاص في التخلص من الكود غير المستخدم بسبب تصميمه.
نصيحة قابلة للتنفيذ: قم بتكوين مُجمِّع الوحدات الخاص بك لتمكين التخلص من الكود غير المستخدم وراجع الكود بانتظام لتحديد وإزالة الكود غير المستخدم.
ج. التصغير والضغط
يقلل التصغير والضغط من حجم ملفات JavaScript الخاصة بك، مما يحسن أوقات التحميل.
- التصغير: قم بإزالة المسافات البيضاء والتعليقات والأحرف الأخرى غير الضرورية من الكود الخاص بك.
- الضغط: استخدم خوارزميات الضغط مثل Gzip أو Brotli لتقليل حجم ملفاتك أثناء الإرسال.
أدوات التصغير والضغط:
- UglifyJS: أداة تصغير JavaScript شائعة.
- Terser: أداة تصغير وضغط JavaScript أحدث.
- Gzip: خوارزمية ضغط مدعومة على نطاق واسع.
- Brotli: خوارزمية ضغط أكثر كفاءة من Gzip.
مثال: تقدم معظم شبكات توصيل المحتوى (CDNs) مثل Cloudflare أو Akamai أو AWS CloudFront ميزات تصغير وضغط تلقائية. قم بتمكين هذه الميزات لتقليل حجم ملفات JavaScript الخاصة بك دون الحاجة إلى تدخل يدوي.
د. التحميل الكسول (Lazy Loading)
يؤجل التحميل الكسول تحميل الموارد غير الحرجة حتى تكون هناك حاجة إليها. هذا يحسن وقت التحميل الأولي والأداء الملموس.
- التحميل الكسول للصور: قم بتحميل الصور فقط عندما تكون مرئية في منفذ العرض.
- التحميل الكسول للمكونات: قم بتحميل المكونات فقط عند الحاجة إليها.
- التحميل الكسول للبرامج النصية: قم بتحميل البرامج النصية فقط عند الحاجة إليها.
تقنيات التحميل الكسول:
- Intersection Observer API: استخدم Intersection Observer API لاكتشاف متى يكون العنصر مرئيًا في منفذ العرض.
- الاستيراد الديناميكي: استخدم الاستيراد الديناميكي (
import()
) لتحميل الوحدات عند الطلب.
نصيحة قابلة للتنفيذ: نفذ التحميل الكسول للصور والمكونات والبرامج النصية غير الحرجة للعرض الأولي لصفحتك.
هـ. تحسين أداء العرض
العرض الفعال أمر بالغ الأهمية لتجربة مستخدم سلسة ومتجاوبة.
- تقليل التلاعب بـ DOM: قلل من عدد عمليات التلاعب بـ DOM، حيث يمكن أن تكون مكلفة. استخدم تقنيات مثل التحديثات المجمعة و DOM الافتراضي لتحسين تحديثات DOM.
- تجنب إعادة التدفق وإعادة الرسم: تحدث عمليات إعادة التدفق وإعادة الرسم عندما يحتاج المتصفح إلى إعادة حساب التخطيط أو إعادة رسم الشاشة. تجنب إثارة عمليات إعادة التدفق وإعادة الرسم عن طريق تقليل تغييرات النمط واستخدام تقنيات مثل احتواء CSS.
- تحسين محددات CSS: استخدم محددات CSS فعالة لتقليل الوقت الذي يستغرقه المتصفح لمطابقة الأنماط مع العناصر.
- استخدام تسريع الأجهزة: استفد من تسريع الأجهزة (مثل استخدام تحويلات CSS) لتفريغ مهام العرض إلى وحدة معالجة الرسومات (GPU).
مثال: عند بناء تطبيق لوحة معلومات كثيف البيانات لشركة لوجستية عالمية، تجنب التحديثات المتكررة لـ DOM. بدلاً من ذلك، استخدم تقنيات مثل DOM الافتراضي (المستخدم في React، Vue.js) لتحديث الأجزاء الضرورية فقط من الواجهة، مما يقلل من عمليات إعادة التدفق وإعادة الرسم ويضمن تجربة مستخدم أكثر سلاسة حتى مع مجموعات البيانات الكبيرة.
و. إدارة الذاكرة
إدارة الذاكرة الفعالة ضرورية لمنع تسريبات الذاكرة وضمان الأداء على المدى الطويل.
- تجنب المتغيرات العامة: قلل من استخدام المتغيرات العامة، حيث يمكن أن تؤدي إلى تسريبات الذاكرة.
- تحرير الكائنات غير المستخدمة: قم بتحرير الكائنات غير المستخدمة بشكل صريح عن طريق تعيينها إلى
null
. - تجنب الإغلاقات (Closures): كن حذرًا من الإغلاقات، حيث يمكن أن تحتفظ عن غير قصد بمراجع للكائنات في الذاكرة.
- استخدام المراجع الضعيفة: استخدم المراجع الضعيفة لتجنب منع الكائنات من جمع القمامة.
أدوات توصيف الذاكرة:
- علامة تبويب الذاكرة في Chrome DevTools: استخدم علامة تبويب الذاكرة لتوصيف استخدام الذاكرة وتحديد تسريبات الذاكرة.
نصيحة قابلة للتنفيذ: قم بتوصيف استخدام ذاكرة تطبيقك بانتظام ومعالجة أي تسريبات ذاكرة يتم تحديدها.
ز. اختيار إطار العمل المناسب (أو عدم استخدام إطار عمل)
يعد اختيار إطار العمل أو المكتبة المناسبة أمرًا بالغ الأهمية. يمكن أن يؤدي الاعتماد المفرط على أطر العمل الثقيلة إلى إدخال عبء غير ضروري. ضع في اعتبارك ما يلي:
- عبء إطار العمل: قم بتقييم حجم الحزمة وخصائص الأداء لأطر العمل المختلفة. أطر العمل مثل React و Angular و Vue.js قوية، لكنها تأتي أيضًا مع قدر معين من العبء.
- احتياجات الأداء: اختر إطار عمل يتوافق مع احتياجات الأداء الخاصة بك. إذا كان الأداء حرجًا، ففكر في استخدام إطار عمل خفيف الوزن أو حتى كتابة تطبيقك بدون إطار عمل.
- العرض من جانب الخادم (SSR): فكر في استخدام العرض من جانب الخادم (SSR) لتحسين وقت التحميل الأولي وتحسين محركات البحث. يتضمن SSR عرض تطبيقك على الخادم وإرسال HTML المعروض مسبقًا إلى العميل.
- إنشاء المواقع الثابتة (SSG): بالنسبة للمواقع كثيفة المحتوى، فكر في استخدام إنشاء المواقع الثابتة (SSG). يتضمن SSG إنشاء صفحات HTML في وقت البناء، مما يمكن أن يحسن أوقات التحميل بشكل كبير.
مثال: قد يستفيد موقع ويب كثيف الصور من إطار عمل خفيف الوزن (أو عدم وجود إطار عمل على الإطلاق) والتركيز على تسليم الصور المحسنة عبر شبكة توصيل المحتوى (CDN). من ناحية أخرى، قد يستفيد تطبيق الصفحة الواحدة المعقد (SPA) من الهيكل والأدوات التي توفرها React أو Vue.js، ولكن يجب إيلاء اعتبار دقيق لتحسين أحجام الحزم وأداء العرض.
ح. استخدام شبكة توصيل المحتوى (CDN)
تقوم شبكات توصيل المحتوى (CDNs) بتوزيع أصول موقع الويب الخاص بك عبر خوادم متعددة حول العالم. يتيح ذلك للمستخدمين تنزيل الأصول من الخادم الأقرب إليهم، مما يقلل من زمن الوصول ويحسن أوقات التحميل. وهذا أمر بالغ الأهمية بشكل خاص للجماهير العالمية.
- خوادم موزعة عالميًا: اختر شبكة توصيل محتوى (CDN) بخوادم تقع في المناطق التي يتواجد فيها المستخدمون.
- التخزين المؤقت (Caching): قم بتكوين شبكة توصيل المحتوى الخاصة بك لتخزين الأصول الثابتة مؤقتًا (مثل الصور وملفات JavaScript وملفات CSS).
- الضغط: قم بتمكين الضغط على شبكة توصيل المحتوى الخاصة بك لتقليل حجم ملفاتك.
- HTTP/2 أو HTTP/3: تأكد من أن شبكة توصيل المحتوى الخاصة بك تدعم HTTP/2 أو HTTP/3، والتي توفر تحسينات في الأداء على HTTP/1.1.
مزودو شبكات توصيل المحتوى الشائعون:
- Cloudflare
- Akamai
- AWS CloudFront
- Google Cloud CDN
- Fastly
نصيحة قابلة للتنفيذ: نفذ شبكة توصيل محتوى (CDN) لتوزيع أصول موقع الويب الخاص بك عالميًا وقم بتكوينها لتخزين الأصول الثابتة مؤقتًا وتمكين الضغط.
4. اختبار الأداء والمراقبة
التحسين عملية تكرارية. اختبر أداء تطبيقك وراقبه باستمرار لتحديد الاختناقات الجديدة والتأكد من فعالية التحسينات.
- اختبار الأداء الآلي: قم بإعداد اختبارات أداء آلية تعمل بانتظام لاكتشاف تراجعات الأداء.
- مراقبة المستخدم الحقيقي (RUM): استخدم RUM لجمع بيانات الأداء من المستخدمين الحقيقيين في بيئة الإنتاج. يوفر هذا رؤى قيمة حول كيفية أداء تطبيقك في بيئات وظروف شبكة مختلفة.
- المراقبة الاصطناعية: استخدم المراقبة الاصطناعية لمحاكاة تفاعلات المستخدم وقياس الأداء من مواقع مختلفة.
نصيحة قابلة للتنفيذ: نفذ استراتيجية شاملة لاختبار الأداء والمراقبة لضمان بقاء تطبيقك عالي الأداء بمرور الوقت.
دراسات حالة: تحسين التطبيقات العالمية
دعنا ننظر في بعض دراسات الحالة لتوضيح كيفية تطبيق تقنيات التحسين هذه في سيناريوهات العالم الحقيقي.
دراسة حالة 1: منصة تجارة إلكترونية تستهدف جنوب شرق آسيا
تواجه منصة تجارة إلكترونية تستهدف جنوب شرق آسيا أوقات تحميل بطيئة ومعدلات ارتداد عالية، خاصة على الأجهزة المحمولة. بعد تحليل بيانات الأداء، تم تحديد المشكلات التالية:
- تتسبب حزم JavaScript الكبيرة في بطء أوقات التحميل الأولية.
- تستهلك الصور غير المحسنة نطاقًا تردديًا مفرطًا.
- تضيف برامج التحليلات النصية لجهات خارجية عبئًا كبيرًا.
تنفذ المنصة التحسينات التالية:
- تقسيم الكود لتقليل حجم حزمة JavaScript الأولية.
- تحسين الصور (الضغط والصور المتجاوبة) لتقليل أحجام الصور.
- التحميل الكسول للصور والمكونات.
- التحميل غير المتزامن للبرامج النصية لجهات خارجية.
- شبكة توصيل محتوى (CDN) بخوادم في جنوب شرق آسيا.
نتيجة لذلك، تشهد المنصة تحسنًا كبيرًا في أوقات التحميل، وانخفاضًا في معدلات الارتداد، وزيادة في معدلات التحويل.
دراسة حالة 2: موقع إخباري يخدم جمهورًا عالميًا
يرغب موقع إخباري يخدم جمهورًا عالميًا في تحسين محركات البحث وتجربة المستخدم. يعوق أداء الموقع ما يلي:
- بطء أوقات التحميل الأولية بسبب حزمة JavaScript كبيرة.
- أداء عرض ضعيف على الأجهزة القديمة.
- عدم وجود تخزين مؤقت للأصول الثابتة.
ينفذ الموقع التحسينات التالية:
- العرض من جانب الخادم (SSR) لتحسين وقت التحميل الأولي وتحسين محركات البحث.
- تقسيم الكود لتقليل حجم حزمة JavaScript من جانب العميل.
- محددات CSS محسنة لتحسين أداء العرض.
- شبكة توصيل محتوى (CDN) مع تمكين التخزين المؤقت.
يشهد الموقع تحسنًا كبيرًا في تصنيفات محركات البحث، وانخفاضًا في معدلات الارتداد، وزيادة في تفاعل المستخدمين.
الخلاصة
يعد تحسين أداء JavaScript أمرًا بالغ الأهمية لبناء تطبيقات ويب سريعة ومتجاوبة تقدم تجربة مستخدم سلسة، خاصة للجماهير العالمية. من خلال تنفيذ إطار عمل قوي لأداء المتصفح وتطبيق تقنيات التحسين التي تمت مناقشتها في هذا الدليل، يمكنك تحسين أداء تطبيقك بشكل كبير، وتعزيز رضا المستخدم، وتحقيق أهداف عملك. تذكر أن تراقب أداء تطبيقك باستمرار، وتحدد الاختناقات الجديدة، وتكيف استراتيجيات التحسين الخاصة بك حسب الحاجة. الخلاصة الرئيسية هي النظر إلى تحسين الأداء ليس كمهمة لمرة واحدة، بل كعملية مستمرة متكاملة في سير عمل التطوير الخاص بك.
من خلال دراسة التحديات والفرص الفريدة التي يقدمها قاعدة المستخدمين العالمية بعناية، يمكنك بناء تطبيقات ويب ليست سريعة ومتجاوبة فحسب، بل يمكن الوصول إليها وجذابة للمستخدمين في جميع أنحاء العالم.