Deferring and Async: Difference between revisions

From binaryoption
Jump to navigation Jump to search
Баннер1
(@pipegas_WP)
 
(@CategoryBot: Обновлена категория)
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
[[ملف:Example.jpg|thumb|200px|مثال توضيحي لتحميل JavaScript]]
==Deferring and Async: دليل شامل للمطورين ==


== تأجيل وتنفيذ غير متزامن: دليل شامل للمطورين ==
يُعد فهم كيفية تحميل وتنفيذ [[جافاسكربت]] في صفحات الويب أمرًا بالغ الأهمية لتحسين [[أداء الموقع]] وتجربة المستخدم. في هذا المقال، سنستكشف مفهومي `defer` و `async`، وهما طريقتان للتحكم في كيفية تعامل المتصفح مع ملفات جافاسكربت الخارجية. سنشرح الاختلافات الرئيسية بينهما، وكيفية استخدامهما بشكل فعال، وأفضل الممارسات لتجنب المشكلات الشائعة.


يعد فهم كيفية تحميل وتنفيذ ملفات [[JavaScript]] في صفحات الويب أمرًا بالغ الأهمية لتحسين [[أداء الموقع]] وتجربة المستخدم. غالبًا ما يواجه المطورون تحديات تتعلق بحظر العرض (Render-blocking) أثناء تحميل وتنفيذ ملفات JavaScript، مما يؤدي إلى بطء تحميل الصفحات. لحل هذه المشكلة، تقدم HTML سمات [[Deferring]] و [[Async]]، وهما أدوات قوية للتحكم في كيفية تعامل المتصفح مع ملفات JavaScript.
== لماذا نهتم بتحميل جافاسكربت؟ ==


=== ما هو حظر العرض؟ ===
تقليديًا، عند تضمين ملف جافاسكربت خارجي في صفحة HTML باستخدام العلامة <script>، يقوم المتصفح بإيقاف تحليل HTML مؤقتًا لتنزيل وتنفيذ السكربت. هذا يمكن أن يؤدي إلى تأخير كبير في عرض الصفحة، خاصة إذا كان السكربت كبيرًا أو إذا كان هناك العديد من السكربتات. هذه المشكلة معروفة باسم "حظر العرض" (Render-Blocking).


عندما يواجه المتصفح عنصر `<script>`، فإنه يتوقف عن تحليل [[HTML]] لتنزيل وتنفيذ البرنامج النصي. هذه العملية تسمى "حظر العرض". إذا كان البرنامج النصي كبيرًا أو كان هناك العديد من البرامج النصية، فقد يؤدي ذلك إلى تأخير كبير في تحميل الصفحة.
لتخفيف هذه المشكلة، تم تقديم سمات `defer` و `async`.


=== سمة Async ===
== سمة defer ==


تسمح سمة `async` للمتصفح بتنزيل ملف JavaScript في الخلفية دون حظر تحليل HTML. بمجرد اكتمال التنزيل، سيقوم المتصفح بتنفيذ البرنامج النصي. ومع ذلك، لا يوجد ضمان لترتيب التنفيذ إذا كان هناك عدة برامج نصية ذات سمة `async`.
عند استخدام سمة `defer` في علامة <script>، يوجه المتصفح لتنزيل السكربت في الخلفية بينما يستمر في تحليل HTML. ومع ذلك، *لا* يتم تنفيذ السكربت حتى يكمل المتصفح تحليل HTML بالكامل.


*  <b>الاستخدام:</b> `<script src="script.js" async></script>`
مثال:
*  <b>السلوك:</b> تنزيل غير حظر، تنفيذ غير متزامن.
*  <b>الميزات:</b>
    *  تحسين أداء الصفحة عن طريق السماح بتحليل HTML بالتوازي مع تنزيل JavaScript.
    *  مثالي للبرامج النصية المستقلة التي لا تعتمد على ترتيب التنفيذ.
*  <b>العيوب:</b>
    *  لا يوجد ضمان لترتيب التنفيذ.
    *  قد يؤدي إلى أخطاء إذا كان البرنامج النصي يعتمد على عناصر DOM غير موجودة بعد.


=== سمة Defer ===
```html
<script src="script.js" defer></script>
```


تسمح سمة `defer` للمتصفح بتنزيل ملف JavaScript في الخلفية، تمامًا مثل `async`. ومع ذلك، فإن الفرق الرئيسي هو أن البرامج النصية ذات سمة `defer` يتم تنفيذها بعد اكتمال تحليل HTML، وبالترتيب الذي تظهر به في المستند.
* **الفوائد:**
    * يمنع حظر العرض.
    * يضمن تنفيذ السكربتات بترتيب ظهورها في HTML. وهذا مهم بشكل خاص إذا كانت السكربتات تعتمد على بعضها البعض.
    * مناسب للسكربتات التي تتلاعب بـ [[DOM]] بعد تحميل الصفحة بالكامل.


*   <b>الاستخدام:</b> `<script src="script.js" defer></script>`
* **العيوب:**
*   <b>السلوك:</b> تنزيل غير حظر، تنفيذ متزامن بعد تحليل HTML.
     * إذا كان السكربت يحتاج إلى تنفيذ فوري، فقد لا يكون `defer` هو الخيار الأفضل.
*   <b>الميزات:</b>
    *   يضمن ترتيب التنفيذ.
     *   يضمن أن جميع عناصر DOM موجودة قبل تنفيذ البرنامج النصي.
*  <b>العيوب:</b>
    *  قد لا يكون مناسبًا للبرامج النصية التي تحتاج إلى التنفيذ في أقرب وقت ممكن.


=== مقارنة بين Async و Defer ===
== سمة async ==


| الخاصية | Async | Defer |
عند استخدام سمة `async` في علامة <script>، يوجه المتصفح لتنزيل السكربت في الخلفية بينما يستمر في تحليل HTML. بمجرد تنزيل السكربت، يقوم المتصفح بإيقاف تحليل HTML مؤقتًا لتنفيذ السكربت على الفور.
 
مثال:
 
```html
<script src="script.js" async></script>
```
 
* **الفوائد:**
    * يمنع حظر العرض.
    * يسمح بتنفيذ السكربت بمجرد تنزيله، مما قد يؤدي إلى أداء أسرع في بعض الحالات.
 
* **العيوب:**
    * لا يضمن ترتيب تنفيذ السكربتات. إذا كانت السكربتات تعتمد على بعضها البعض، فقد تحدث مشكلات.
    * قد يؤدي إلى أخطاء إذا حاول السكربت الوصول إلى عناصر DOM لم يتم تحليلها بعد.
 
== جدول مقارنة بين defer و async ==
 
| الميزة | defer | async |
|---|---|---|
|---|---|---|
| حظر العرض | لا | لا |
| **حظر العرض** | لا | لا |
| ترتيب التنفيذ | غير مضمون | مضمون |
| **ترتيب التنفيذ** | مضمون بترتيب الظهور | غير مضمون |
| وقت التنفيذ | بمجرد اكتمال التنزيل | بعد اكتمال تحليل HTML |
| **وقت التنفيذ** | بعد تحليل HTML الكامل | بمجرد التنزيل |
| مناسب لـ | البرامج النصية المستقلة | البرامج النصية التي تعتمد على DOM |
| **مناسب لـ** | السكربتات التي تتلاعب بـ DOM بعد التحميل | السكربتات المستقلة |
 
== متى تستخدم defer ومتى تستخدم async؟ ==


=== متى تستخدم Async ومتى تستخدم Defer؟ ===
* **استخدم `defer`:**
    * عندما تعتمد السكربتات على بعضها البعض.
    * عندما تحتاج إلى التلاعب بـ [[DOM]] بعد تحميل الصفحة بالكامل.
    * عندما يكون ترتيب تنفيذ السكربتات مهمًا.
    * عند استخدام [[jQuery]]، يفضل استخدام `defer` لضمان توافقه.


*   <b>استخدم `async`</b> عندما يكون لديك برامج نصية مستقلة لا تعتمد على ترتيب التنفيذ أو عناصر DOM. على سبيل المثال، قد تستخدم `async` لتحميل برامج التتبع أو الإعلانات.
* **استخدم `async`:**
*   <b>استخدم `defer`</b> عندما يكون لديك برامج نصية تعتمد على ترتيب التنفيذ أو تحتاج إلى الوصول إلى عناصر DOM. على سبيل المثال، قد تستخدم `defer` لتحميل برامج JavaScript التي تتلاعب بـ [[DOM]] أو تتفاعل مع [[واجهات برمجة التطبيقات]] (APIs) الخاصة بالمتصفح.
    * عندما تكون السكربتات مستقلة ولا تعتمد على بعضها البعض.
    * عندما تريد تحميل السكربت في أسرع وقت ممكن دون القلق بشأن ترتيب التنفيذ.
    * لسكربتات التحليلات (Analytics) مثل [[Google Analytics]].


=== أفضل الممارسات ===
== أفضل الممارسات ==


*   ضع علامات `<script>` في نهاية قسم `<head>` أو قبل علامة الإغلاق `</body>`.
* **ضع علامات <script> في نهاية قسم <head>:** حتى مع استخدام `defer` أو `async`، يمكن أن يكون وضع العلامات في نهاية <head> مفيدًا لتحسين الأداء.
*   استخدم `defer` افتراضيًا للبرامج النصية التي تعتمد على DOM.
* **استخدم أدوات تحليل الأداء:** استخدم أدوات مثل [[Google PageSpeed Insights]] و [[Lighthouse]] لتحديد المشكلات المتعلقة بأداء جافاسكربت.
*   استخدم `async` للبرامج النصية المستقلة.
* **قلل حجم ملفات جافاسكربت:** استخدم أدوات [[Minification]] و [[Compression]] لتقليل حجم ملفات جافاسكربت الخاصة بك.
*   اختبر أداء موقعك باستخدام أدوات مثل [[Google PageSpeed Insights]] لتقييم تأثير استخدام `async` و `defer`.
* **استخدم [[Caching]]**: استفد من آليات التخزين المؤقت للمتصفح لتجنب إعادة تنزيل السكربتات في كل مرة يزور فيها المستخدم موقعك.
* **فكر في استخدام [[Module Bundlers]]**: أدوات مثل [[Webpack]] و [[Parcel]] يمكن أن تساعدك في إدارة تبعيات جافاسكربت وتحسين الأداء.


=== اعتبارات إضافية ===
== أمثلة عملية ==


*   <b>وحدات JavaScript (ES Modules):</b> عند استخدام [[ES Modules]]، يتم التعامل مع التنزيل والتنفيذ بشكل مختلف. غالبًا ما تكون الوحدات النمطية افتراضيًا متزامنة وتنتظر تحليل HTML.
* **السيناريو 1: سكربتات التحليلات:** استخدم `async` لسكربتات التحليلات مثل Google Analytics، حيث لا تعتمد على أي سكربتات أخرى ولا تحتاج إلى التلاعب بـ DOM بعد التحميل.
*   <b>التحميل الديناميكي للبرامج النصية (Dynamic Script Loading):</b> يمكنك أيضًا تحميل البرامج النصية ديناميكيًا باستخدام JavaScript، مما يمنحك مزيدًا من التحكم في عملية التحميل والتنفيذ.
* **السيناريو 2: سكربتات واجهة المستخدم:** استخدم `defer` لسكربتات واجهة المستخدم التي تتلاعب بـ DOM بعد تحميل الصفحة، مثل سكربتات القوائم المنسدلة أو النوافذ المنبثقة.
* **السيناريو 3: مكتبات خارجية:** إذا كانت لديك مكتبة خارجية تعتمد على مكتبة أخرى، فتأكد من تحميل المكتبة التي تعتمد عليها باستخدام `defer` أولاً.


=== استراتيجيات تداول الخيارات الثنائية ذات الصلة (للسياق) ===
== علاقةDefer و Async بـ [[Web Performance]] ==


*  [[استراتيجية المضاعفة]]: قد تتطلب تحميل سريعًا للبيانات.
يُعد استخدام `defer` و `async` جزءًا أساسيًا من استراتيجيات تحسين أداء الويب. من خلال منع حظر العرض، يمكنك تحسين سرعة تحميل الصفحة، مما يؤدي إلى تجربة مستخدم أفضل وزيادة [[SEO]].
*  [[استراتيجية مارتينجال]]: تعتمد على الاستجابة السريعة للتغيرات.
*  [[استراتيجية التداول العكسي]]: تتطلب تحليلًا سريعًا للبيانات.
*  [[استراتيجية الاختراق]]: تتطلب تحميل سريعًا للرسوم البيانية.
[[استراتيجية التداول المتأرجح]]: قد تتطلب تحميل بيانات تاريخية.


=== التحليل الفني وتحليل حجم التداول (للسياق) ===
== استراتيجيات تداول الخيارات الثنائية ذات الصلة ==


*   [[مؤشر المتوسط المتحرك]]: يتطلب تحميل بيانات الأسعار.
* [[استراتيجية اختراق النطاق]]
*   [[مؤشر القوة النسبية (RSI)]]: يتطلب حسابات سريعة.
* [[استراتيجية بولينجر باندز]]
*   [[مؤشر الماكد (MACD)]]: يعتمد على تحليل البيانات.
* [[استراتيجية المتوسطات المتحركة]]
*   [[خطوط فيبوناتشي]]: تتطلب تحميل بيانات الأسعار.
* [[استراتيجية RSI]]
*   [[أنماط الشموع اليابانية]]: تتطلب عرضًا سريعًا للرسوم البيانية.
* [[استراتيجية MACD]]
*   [[حجم التداول]]: يتطلب تحليل البيانات التاريخية.
* [[استراتيجية Fibonacci Retracement]]
*   [[التقارب والتباعد]]: يتطلب تحليل البيانات في الوقت الفعلي.
* [[استراتيجية Ichimoku Cloud]]
*   [[مستويات الدعم والمقاومة]]: تتطلب تحميل بيانات الأسعار.
* [[استراتيجية Price Action]]
*   [[تحليل الموجات إليوت]]: يتطلب تحليل البيانات التاريخية.
* [[استراتيجية الاختراق الكاذب]]
*   [[تحليل الشارت]]: يعتمد على عرض البيانات.
* [[استراتيجية التداول المتأرجح]]
*   [[تحليل الفجوات السعرية]]: يتطلب تحليل البيانات التاريخية.
* [[استراتيجية Scalping]]
*   [[مؤشر بولينجر باند]]: يتطلب حسابات سريعة.
* [[استراتيجية التداول اللحظي]]
*   [[مؤشر ستوكاستيك]]: يعتمد على تحليل البيانات.
* [[استراتيجية التداول اليومي]]
*   [[مؤشر ADX]]: يتطلب تحليل البيانات.
* [[استراتيجية التداول طويل الأجل]]
*   [[تحليل حجم الأوامر]]: يتطلب تحليل البيانات في الوقت الفعلي.
* [[استراتيجية المضاربة]]


=== موارد إضافية ===
== التحليل الفني وتحليل حجم التداول ==


*   [[HTML <script> tag]]: [https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script]
* [[الشموع اليابانية]]
*   [[Async attribute]]: [https://developer.mozilla.org/en-US/docs/Web/HTML/Attribute/async]
* [[خطوط الاتجاه]]
*   [[Defer attribute]]: [https://developer.mozilla.org/en-US/docs/Web/HTML/Attribute/defer]
* [[مستويات الدعم والمقاومة]]
*   [[JavaScript performance]]: [https://developers.google.com/speed/docs/javascript-performance]
* [[أنماط الرسوم البيانية]]
*   [[Web performance optimization]]: [https://web.dev/performance/]
* [[حجم التداول]]
* [[مؤشر التداول على الحجم]]
* [[مؤشر On Balance Volume (OBV)]]


== انظر أيضًا ==
== المراجع ==


[[تحسين أداء الويب]]، [[DOM (Document Object Model)]]، [[JavaScript]]، [[HTML]]، [[CSS]]، [[تحميل الصفحة]]، [[واجهة برمجة التطبيقات (API)]]، [[تحليل HTML]]، [[أدوات مطوري الويب]]، [[أداء الموقع]]، [[التحميل المتزامن]]، [[التحميل غير المتزامن]]، [[التحميل التدريجي]]، [[استراتيجيات التخزين المؤقت]]، [[شبكة توصيل المحتوى (CDN)]]، [[تصغير ملفات JavaScript]]، [[ضغط البيانات]]، [[تحسين الصور]]، [[تحسين الخطوط]].
* [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/)


[[Category:**الفئة:برمجة_الويب**]]


== ابدأ التداول الآن ==
== ابدأ التداول الآن ==
Line 109: Line 129:
✓ تنبيهات باتجاهات السوق
✓ تنبيهات باتجاهات السوق
✓ مواد تعليمية للمبتدئين
✓ مواد تعليمية للمبتدئين
[[Category:جافاسكربت]]

Latest revision as of 11:42, 6 May 2025

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.

استراتيجيات تداول الخيارات الثنائية ذات الصلة

التحليل الفني وتحليل حجم التداول

المراجع


ابدأ التداول الآن

سجل في IQ Option (الحد الأدنى للإيداع $10) افتح حساباً في Pocket Option (الحد الأدنى للإيداع $5)

انضم إلى مجتمعنا

اشترك في قناة Telegram الخاصة بنا @strategybin للحصول على: ✓ إشارات تداول يومية ✓ تحليلات استراتيجية حصرية ✓ تنبيهات باتجاهات السوق ✓ مواد تعليمية للمبتدئين

Баннер