ال Memoizing فى جافاسكربت


السلام عليكم و رحمه الله تعالى و بركاته

لابد أنك تعرضت لمشكله الفروق بين المتصفحات عند إستخدامك جافاسكربت فى نطاق المتصفح ، على سبيل المثال المتصفحات القياسيه تقوم بإضافه مستمع الحدث من خلال addEventListener اما انترنت إكسبلورر فيقوم بذلك من خلال attachEvent و المتصفحات القديمه كلها من خلال onEvent، و مثال اخر تطبيقات ال Ajax تقوم بالإعتماد على كائن XMLHttpRequest فى المتصفحات القياسيه اما انترنت اكسبلورر فيعتمد على ال ActiveXObject فى المتصفحات قبل إنترنت إسكبلورر 7 ،و حل هذه المشكلات القيام بكتابه كود يكون بمثابه interface بسيط يعادل الفروق بين المتصفحات و الكود التالى يوضح داله createXHR التى تقوم بإنشاء كائن XMLHttp و يعادل الفروق بين المتصفحات :

function createXHR(){
var xhr = null;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest(); }
else if (window.ActiveXObject) {
xhr = new ActiveXObject(“Microsoft.XMLHTTP”); }
return xhr; }

الكود قد قام بالمهمه كما يجب يقوم بإرجاع كائن XMLHttp على حسب البيئه التى يشتغل بها ، لكن هناك مشكله فى كل مره تستدعى الوظيفه createXHR فإن الوظيفه تقوم بتنفيذ جمل ال if و else…if كل مره – و بالرغم من بساطه المثال فتخيل معى هناك وظيفه تقوم بإجاع كائن بعد 10 if و else…if مثلا – و هذا سيؤثر على الكفاءه performance ، و فى هذه الموقف يأتى دور ال Memoizing و هى طريقه من خلالها الوظيفه تقوم بعمل المنطق Logic بداخلها مره واحده فقط و المرات التاليه تقوم بإستخدام القيمه التى رجعت من المره الاولى و الكود التى يوضح كيفيه إستخدام طريقه ال memozing قم بمقارنته بالكود السابق :

function createXHR(){
if (window.XMLHttpRequest) {
createXHR = function(){
return new XMLHttpRequest(); }
}
else if (window.ActiveXObject) {
createXHR = function(){
return new ActiveXObject(“Microsoft.XMLHTTP”); }
} }

النسخه المعدله من createXHR تقوم بعمل ال logic مره واحده فقط و تقوم بتعديل نفسها حتى تستخدم الكائن المناسب فى المرات القادمه بدون الخوض فى جمل else…if و بذلك سيزداد ال performance لتطبيق الجافاسكربت بدرجه كبيره جدا – إذا حتى تصلك الفكره أكثر فإن هذه الوظيفه بعد تنفيذها مره واحد فى الفايرفوكس إنها ستتحول إلى الوظيفه التاليه🙂

function createXHR() {
return new XMLHttpRequest();
}

الأوسمة: , , ,

2 تعليقان to “ال Memoizing فى جافاسكربت”

  1. عمر الدليمي Says:

    فكرة خطيرة🙂 .. شكراً لك أخي

    هنا تكمن قوة اللغة النصية Scripting language

    جميل أن ألقى شخصاً مثلك يكتب في هذا المجال المتخصص🙂.
    يسرني التعرف عليك

  2. فردوس Says:

    رائع .. رائع

    مدونتك مدونة متخصصة رائعه
    فالكثير منا يبحث عن مدونات مثل ذلك

    بورك فيك

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s


%d مدونون معجبون بهذه: