Deferring and Async
Deferring and Async: دليل شامل للمطورين
يُعد فهم كيفية تحميل وتنفيذ جافاسكربت في صفحات الويب أمرًا بالغ الأهمية لتحسين أداء الموقع وتجربة المستخدم. في هذا المقال، سنستكشف مفهومي `defer` و `async`، وهما طريقتان للتحكم في كيفية تعامل المتصفح مع ملفات جافاسكربت الخارجية. سنشرح الاختلافات الرئيسية بينهما، وكيفية استخدامهما بشكل فعال، وأفضل الممارسات لتجنب المشكلات الشائعة.
لماذا نهتم بتحميل جافاسكربت؟
تقليديًا، عند تضمين ملف جافاسكربت خارجي في صفحة HTML باستخدام العلامة <script>، يقوم المتصفح بإيقاف تحليل HTML مؤقتًا لتنزيل وتنفيذ السكربت. هذا يمكن أن يؤدي إلى تأخير كبير في عرض الصفحة، خاصة إذا كان السكربت كبيرًا أو إذا كان هناك العديد من السكربتات. هذه المشكلة معروفة باسم "حظر العرض" (Render-Blocking).
لتخفيف هذه المشكلة، تم تقديم سمات `defer` و `async`.
سمة defer
عند استخدام سمة `defer` في علامة <script>، يوجه المتصفح لتنزيل السكربت في الخلفية بينما يستمر في تحليل HTML. ومع ذلك، *لا* يتم تنفيذ السكربت حتى يكمل المتصفح تحليل HTML بالكامل.
مثال:
```html <script src="script.js" defer></script> ```
- **الفوائد:**
* يمنع حظر العرض. * يضمن تنفيذ السكربتات بترتيب ظهورها في HTML. وهذا مهم بشكل خاص إذا كانت السكربتات تعتمد على بعضها البعض. * مناسب للسكربتات التي تتلاعب بـ DOM بعد تحميل الصفحة بالكامل.
- **العيوب:**
* إذا كان السكربت يحتاج إلى تنفيذ فوري، فقد لا يكون `defer` هو الخيار الأفضل.
سمة async
عند استخدام سمة `async` في علامة <script>، يوجه المتصفح لتنزيل السكربت في الخلفية بينما يستمر في تحليل HTML. بمجرد تنزيل السكربت، يقوم المتصفح بإيقاف تحليل HTML مؤقتًا لتنفيذ السكربت على الفور.
مثال:
```html <script src="script.js" async></script> ```
- **الفوائد:**
* يمنع حظر العرض. * يسمح بتنفيذ السكربت بمجرد تنزيله، مما قد يؤدي إلى أداء أسرع في بعض الحالات.
- **العيوب:**
* لا يضمن ترتيب تنفيذ السكربتات. إذا كانت السكربتات تعتمد على بعضها البعض، فقد تحدث مشكلات. * قد يؤدي إلى أخطاء إذا حاول السكربت الوصول إلى عناصر DOM لم يتم تحليلها بعد.
جدول مقارنة بين defer و async
| الميزة | defer | async | |---|---|---| | **حظر العرض** | لا | لا | | **ترتيب التنفيذ** | مضمون بترتيب الظهور | غير مضمون | | **وقت التنفيذ** | بعد تحليل HTML الكامل | بمجرد التنزيل | | **مناسب لـ** | السكربتات التي تتلاعب بـ DOM بعد التحميل | السكربتات المستقلة |
متى تستخدم defer ومتى تستخدم async؟
- **استخدم `defer`:**
* عندما تعتمد السكربتات على بعضها البعض. * عندما تحتاج إلى التلاعب بـ DOM بعد تحميل الصفحة بالكامل. * عندما يكون ترتيب تنفيذ السكربتات مهمًا. * عند استخدام jQuery، يفضل استخدام `defer` لضمان توافقه.
- **استخدم `async`:**
* عندما تكون السكربتات مستقلة ولا تعتمد على بعضها البعض. * عندما تريد تحميل السكربت في أسرع وقت ممكن دون القلق بشأن ترتيب التنفيذ. * لسكربتات التحليلات (Analytics) مثل Google Analytics.
أفضل الممارسات
- **ضع علامات <script> في نهاية قسم <head>:** حتى مع استخدام `defer` أو `async`، يمكن أن يكون وضع العلامات في نهاية <head> مفيدًا لتحسين الأداء.
- **استخدم أدوات تحليل الأداء:** استخدم أدوات مثل Google PageSpeed Insights و Lighthouse لتحديد المشكلات المتعلقة بأداء جافاسكربت.
- **قلل حجم ملفات جافاسكربت:** استخدم أدوات Minification و Compression لتقليل حجم ملفات جافاسكربت الخاصة بك.
- **استخدم Caching**: استفد من آليات التخزين المؤقت للمتصفح لتجنب إعادة تنزيل السكربتات في كل مرة يزور فيها المستخدم موقعك.
- **فكر في استخدام Module Bundlers**: أدوات مثل Webpack و Parcel يمكن أن تساعدك في إدارة تبعيات جافاسكربت وتحسين الأداء.
أمثلة عملية
- **السيناريو 1: سكربتات التحليلات:** استخدم `async` لسكربتات التحليلات مثل Google Analytics، حيث لا تعتمد على أي سكربتات أخرى ولا تحتاج إلى التلاعب بـ DOM بعد التحميل.
- **السيناريو 2: سكربتات واجهة المستخدم:** استخدم `defer` لسكربتات واجهة المستخدم التي تتلاعب بـ DOM بعد تحميل الصفحة، مثل سكربتات القوائم المنسدلة أو النوافذ المنبثقة.
- **السيناريو 3: مكتبات خارجية:** إذا كانت لديك مكتبة خارجية تعتمد على مكتبة أخرى، فتأكد من تحميل المكتبة التي تعتمد عليها باستخدام `defer` أولاً.
علاقةDefer و Async بـ Web Performance
يُعد استخدام `defer` و `async` جزءًا أساسيًا من استراتيجيات تحسين أداء الويب. من خلال منع حظر العرض، يمكنك تحسين سرعة تحميل الصفحة، مما يؤدي إلى تجربة مستخدم أفضل وزيادة SEO.
استراتيجيات تداول الخيارات الثنائية ذات الصلة
- استراتيجية اختراق النطاق
- استراتيجية بولينجر باندز
- استراتيجية المتوسطات المتحركة
- استراتيجية RSI
- استراتيجية MACD
- استراتيجية Fibonacci Retracement
- استراتيجية Ichimoku Cloud
- استراتيجية Price Action
- استراتيجية الاختراق الكاذب
- استراتيجية التداول المتأرجح
- استراتيجية Scalping
- استراتيجية التداول اللحظي
- استراتيجية التداول اليومي
- استراتيجية التداول طويل الأجل
- استراتيجية المضاربة
التحليل الفني وتحليل حجم التداول
- الشموع اليابانية
- خطوط الاتجاه
- مستويات الدعم والمقاومة
- أنماط الرسوم البيانية
- حجم التداول
- مؤشر التداول على الحجم
- مؤشر On Balance Volume (OBV)
المراجع
- [MDN Web Docs - defer](https://developer.mozilla.org/en-US/docs/Web/HTML/attribute/defer)
- [MDN Web Docs - async](https://developer.mozilla.org/en-US/docs/Web/HTML/attribute/async)
- [Google PageSpeed Insights](https://developers.google.com/speed/pagespeed/insights/)
ابدأ التداول الآن
سجل في IQ Option (الحد الأدنى للإيداع $10) افتح حساباً في Pocket Option (الحد الأدنى للإيداع $5)
انضم إلى مجتمعنا
اشترك في قناة Telegram الخاصة بنا @strategybin للحصول على: ✓ إشارات تداول يومية ✓ تحليلات استراتيجية حصرية ✓ تنبيهات باتجاهات السوق ✓ مواد تعليمية للمبتدئين