اختر لونك:
وَقُلِ اعْمَلُوا فَسَيَرَى اللَّهُ عَمَلَكُمْ وَرَسُولُهُ وَالْمُؤْمِنُونَ ۖ وَسَتُرَدُّونَ إِلَىٰ عَالِمِ الْغَيْبِ وَالشَّهَادَةِ فَيُنَبِّئُكُم بِمَا كُنتُمْ تَعْمَلُونَ [ التوبة : ( 105 )] كلمة الإدارة

يرجى إختيار القسم المناسب قبل النشر وسيعاقب المخالف بإنذار أول مرة وسيتم حظره إذا تكرر ذلك كلمة الإدارة

يُمنع كتابة مواضيع السحر والشعوذة والروحانيات والابراج بكافة الأشكال والمخالف سيعاقب بحظر مؤقت وإذا تكرر سيكون حظر دائم تنبيه هام جداً



أضف رد جديد
 
LinkBack أدوات الموضوع انواع عرض الموضوع

قديم 01-04-2019, 07:10 PM   #1
تاريخ التسجيل: Feb 2019
العمر: 38
المشاركات: 1,149
التقييم: 10
تاريخ التسجيل: Feb 2019
العمر: 38
المشاركات: 1,149
التقييم: 10
افتراضي تعرف علي مصطلح Virtual DOM ؟

كثر الحديث في العامين الماضيين، بالتحديد منذ ظهور مكتبة React.js، عن Virtual DOM وعن دوره الكبير والفعال في جعل التحديثات والتغييرات التي تتم على تطبيقات الويب أحادية الصفحة Single Page Applications أكثر سرعة وانسيابية.
الإشكالية

في تطبيقات الويب الحديثة أصبحنا نتكلم كثيرا عن معالجة DOM لتحديث صفحات التطبيق وبعث الروح فيها. الإشكال هنا أن معالجة DOM بطيئة مقارنة مع عمليات الجافاسكريبت الأخرى.
تخيل أنه لدينا لائحة <ul> تضم 10 عناصر، إذا قمنا بتغيير أو حذف عنصر واحد فقط فإن معظم إطارات عمل الجافاسكريبت التي لا تعتمد على ال Virtual DOM تقوم بإعادة بناء اللائحة كاملة وإظهارها للمستخدم بعد تغيير عنصر واحد فقط، أي أن 9 عناصر بقيت كما هي ولم يكن من داع أبدا لمعالجتها مادام التغير يشمل عنصر واحد فقط.
لن تلاحظ انخفاظا في أداء التطبيق إذا كان يحتوى على عدد محدود فقط من العقد Nodes، ولكن في التطبيقات الكبيرة والمعقدة، التي تحتوي على الآف العناصر، قد يكلفها كل هذا الجهد، المبدول في معالجة عقد لم يتم إجراء أي تحديث عليها من طرف المستخدم، ثمنا غاليا يظهر جليا في انخفاض الأداء والسرعة وكذا في سلالستها.

Virtual DOM

في DOM الحقيقي أو الأصلي، يتم تقديم عنصر أو عقدة معينة على هذا النحو :
<ul id='my-list'> <li>Item 1</li> <li>Item 2</li> <ul>
1
2
3
4

<ul id='my-list'>
<li>Item 1</li>
<li>Item 2</li>
<ul>



وفي كل مرة يتم إضافة عنصر <li> مثلا لهذه القائمة، يتم البحث عن العنصر <ul> ويتم إضافة العنصر الجديد <li> إليه :
document.getElementById('my-list').appendChild(myNewNode);
1

document.getElementById('my-list').appendChild(myNewNode);



عملية البحث المتكررة هذه تسبب مشاكل في الأداء للتطبيق كلما زاد حجمه وتضاعف عدد عناصر HTML فيه.
لهذا جاء ال DOM الوهمي على شكل واجهة موازية ل DOM الأصلي Real DOM ولكن على شكل كائنات جافاسكريبت، وهذا مثال لما يمكن أن يكون عليه ال Virtual DOM :

Let domNode = { tag: 'ul' attributes: { id: 'my-list' } children: [ // هنا عناصر <li> ] };
1
2
3
4
5
6
7

Let domNode = {
tag: 'ul'
attributes: { id: 'my-list' }
children: [
// هنا عناصر <li>
]
};



هذا شكل القائمة السابقة في ال Virtual DOM، ولو أردنا القيام بإضافة عنصر جديد إليها فسيتم ذلك بهذه الطريقة :
domNode.children.push('<li>Item 3</li>');
1

domNode.children.push('<li>Item 3</li>');



هنا القائمة <ul> تم تقديمها على شكل كائن جافاسكريبت سميناه domNode، والوصول إلى هذا الكائن وتحديثه في الجافاسكريبت أسرع بكثير من عملية البحث عن القائمة <ul> بواسطة document.getElementById. هناك فرق كبير في السرعة والأداء!
الجميل مع ال Virtual DOM كذلك أنه لا يتم إجراء أي تغييرات على واجهة المستخدم إلا إذا طلب منه ذلك، عن طريق الدالة render مثلا في React.js، أي أن العمليات كلها تتم في الذاكرة العشوائية وعندما يحين وقت تحديث الصفحة يقوم ال Virtual DOM بمقارنة نفسه مع حالته التي كان عليها قبل إجراء التغييرات فيعرف بذلك التحديثات التي سيقوم بها على مستوى ال DOM الأصلي، أي أنه يقوم فقط بتحديث العناصر التي يجب عليها أن تحدث تسمى هذه العملية Diffing.
تعرف مصطلح Virtual
وهذا ملخص للعملية برمتها :
  1. المستخدم يقوم بإضافة عنصر جديد للقائمة <ul>.
  2. يتم إضافة هذا العنصر <li> للكائن الذي يمثل القائمة في ال Virtual DOM.
  3. ال Virtual DOM يقوم بمقارنة نفسه مع حالته البدئية قبل إضافة العنصر <li>.
  4. ال Virtual DOM يجد بأن التغيير الوحيد حصل على مستوى العنصر <li> الجديد المضاف.
  5. يتم دمج هذا التغيير، وفقط هذا التغيير، في ال DOM الأصلي.
  6. يظهر التغيير على الشاشة للمستخدم.
تظهر فائدة ال Virtual DOM بشكل واضح في المشاريع الكبيرة والمعقدة، إنه إحدى نقاط القوة الرئيسية في إطار العمل React.js الذي طورت به الواجهات الأمامية لموقع فيسبوك والمواقع الأخرى التابعة له، وهذا ما حدى بعدد من المنافسين الآخرين (Vue.js, Ember.js) لتبني هذه الفكرة والإستفادة من قوتها.

raheel غير متواجد حالياً   اقتباس
أضف رد جديد


الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1)
 

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة
Trackbacks are متاحة
Pingbacks are متاحة
Refbacks are متاحة


المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
جناية الفرق الكلاميّة على مصطلح التأويل سالجان قسم القرآن الكريم 1 18-07-2019 12:01 AM
تعريف مصطلح on topic links و مصطلح off topic links raheel قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress 0 14-03-2019 03:10 PM
إنشاء مدونة بلوغر – تعرف على الطريقة الصحيحة لإنشاء مدونتك الخاصة مجانا القيصر قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress 0 11-03-2019 06:43 AM
كتابة المقالات – تعرف على الطريقة الصحيحة لكتابة المقالات ضمن شروط السيو القيصر قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress 0 11-03-2019 06:32 AM
البرمجة للمبتدئين – تعرف على أهم الأمور اللازمة للبدأ في هذا المجال القيصر قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress 0 11-03-2019 06:22 AM


الساعة الآن 02:57 AM

 


Content Relevant URLs by vBSEO ©2010, Crawlability, Inc.