الاستفادة من التخزين المؤقت والكائنات المؤجّلة
استخدم التخزين المؤقت للمحدّدات لتجنّب عمليات البحث المتكررة في DOM، وافهم كائنات jQuery Deferred لإدارة العمليات غير المتزامنة بفاعلية أكبر وتحسين وضوح الشيفرة وأدائها.
الاستفادة من التخزين المؤقت والكائنات المؤجّلة درس مجاني في jQuery Academy على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في jQuery Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة jQuery Academy 3 دروس في المجموع.
عزّز الأداء باستخدام التخزين المؤقت وDeferreds
مرحبًا! سنستكشف في هذا الدرس تقنيتين فعّالتين لجعل تطبيقات jQuery أسرع وأكثر كفاءة: التخزين المؤقت للمحدّدات وكائنات Deferred.
تساعدكم هذه الأساليب على تقليل العمل المتكرر وإدارة العمليات غير المتزامنة المعقدة بسهولة.
أهمية التخزين المؤقت للمحدّدات
في كل مرة تستخدمون فيها محدّد jQuery مثل $("#myElement") أو $(".item")، يتعين على jQuery اجتياز نموذج كائن المستند (DOM) للعثور على العناصر المطابقة.
- قد يكون هذا الاجتياز بطيئًا، خاصةً مع المحدّدات المعقدة أو أشجار DOM الكبيرة.
- تؤدي عمليات البحث المتكررة عن العناصر نفسها إلى إهدار قدرة المعالجة.
يساعدنا التخزين المؤقت على تجنّب ذلك!
تخزين العناصر المحددة
بدلًا من البحث في DOM عدة مرات، خزّنوا نتيجة تحديد عناصر jQuery في متغير. ويحتفظ هذا المتغير بعد ذلك بمرجع إلى كائن jQuery.
جرّبوا تشغيل هذا المثال لمعرفة كيفية تخزين التحديد مؤقتًا:
// Imagine this is in your HTML
// <div id="myDiv">Hello</div>
// Simulate jQuery selecting an element
// In a real browser, this would return a jQuery object
const $myElement = {
id: "myDiv",
text: "Hello",
// Simulate jQuery methods
css: function(prop, value) {
console.log(`Setting ${prop} to ${value} on #${this.id}`);
},
addClass: function(cls) {
console.log(`Adding class "${cls}" to #${this.id}`);
}
};
console.log("--- Without Caching (simulated) ---");
// This would ideally re-query the DOM
$myElement.css("color", "blue"); // Simulates $("#myDiv").css(...)
$myElement.addClass("highlight"); // Simulates $("#myDiv").addClass(...)
console.log("\n--- With Caching ---");
// We already have $myElement, so no re-query
$myElement.css("font-weight", "bold");
$myElement.addClass("active");التسلسل لتحقيق الكفاءة
يُعد تسلسل الأساليب في jQuery شكلًا من أشكال الكفاءة، إذ يعمل على مجموعة العناصر المحددة نفسها.
ومع ذلك، يصبح التخزين المؤقت ضروريًا عندما تحتاجون إلى تنفيذ عمليات على العناصر نفسها في مواضع مختلفة من التعليمات البرمجية، أو ضمن معالجات أحداث مختلفة.
// Chaining is good for sequential ops
$("#myElement")
.addClass("active")
.css("color", "blue")
.fadeIn();
// Caching is better for repeated, non-sequential ops
const $cachedElement = $("#myElement");
// Later in code...
$cachedElement.trigger("click");
// Even later...
$cachedElement.removeClass("active");إعادة استخدام التحديدات
تخيّلوا سيناريو تتفاعلون فيه كثيرًا مع مجموعة من العناصر. يمنع تخزين التحديد الأولي مؤقتًا تكرار استعلامات DOM.
ويكون ذلك مفيدًا خصوصًا داخل الحلقات أو معالجات الأحداث أو الدوال التي تعمل على مجموعة العناصر نفسها.
// Imagine HTML: <li class="item">1</li> <li class="item">2</li>
// <li class="item">3</li> <button id="toggleBtn">Toggle</button>
// Simulate jQuery context
const $items = [{
text: "Item 1"
}, {
text: "Item 2"
}];
const $toggleButton = {
text: "Toggle Button"
};
console.log("Cached items count:", $items.length);
console.log("Cached button text:", $toggleButton.text);
// Later, you might need them again, without re-querying
// e.g., in an event handler
function handleToggle() {
// Use $items and $toggleButton directly
console.log("Toggle button clicked! Working with cached items.");
}
// Call the function
handleToggle();إدارة العمليات غير المتزامنة
يوفّر كائن Deferred في jQuery طريقة لتسجيل دوال رد اتصال متعددة في قوائم انتظار، واستدعاء قوائم انتظار ردود الاتصال، ونقل حالة النجاح أو الفشل لأي عملية متزامنة أو غير متزامنة.
- فكّروا فيه على أنه "وعد" بنتيجة مستقبلية.
- يساعد على تنظيم التعليمات البرمجية التي تتعامل مع عمليات مثل طلبات AJAX والرسوم المتحركة والمؤقتات.
إنشاء Deferred جديد
يمكنكم إنشاء كائن Deferred جديد باستخدام $.Deferred(). ويحتوي هذا الكائن على أساليب للتحكم في حالته: resolve() عند النجاح وreject() عند الفشل.
لنرَ كيفية إعداد Deferred أساسي يُحلّ بعد فترة تأخير.
function doSomethingAsync() {
const dfd = $.Deferred(); // Create a new Deferred
setTimeout(function() {
const success = Math.random() > 0.5; // Simulate success/failure
if (success) {
dfd.resolve("Operation successful!"); // Resolve on success
} else {
dfd.reject("Operation failed!"); // Reject on failure
}
}, 1000); // Simulate 1-second delay
return dfd.promise(); // Return the Promise part
}
// This code will run when the scene loads
// We'll attach handlers in the next scene
console.log("Deferred created. Waiting for resolution...");استخدام .done() و.fail()
بعد الحصول على كائن Deferred (أو الوعد الخاص به)، يمكنكم إرفاق دوال رد الاتصال باستخدام .done() عند النجاح و.fail() لمعالجة الأخطاء.
يُنفَّذ رد الاتصال .always() بغض النظر عن النجاح أو الفشل.
function doSomethingAsync() {
const dfd = $.Deferred();
setTimeout(function() {
const success = true; // For this example, let's ensure success
if (success) {
dfd.resolve("Data loaded!");
} else {
dfd.reject("Network error!");
}
}, 500);
return dfd.promise();
}
const myPromise = doSomethingAsync();
myPromise.done(function(message) {
console.log("SUCCESS:", message);
});
myPromise.fail(function(errorMessage) {
console.log("FAILED:", errorMessage);
});
myPromise.always(function() {
console.log("Operation complete (done or failed).");
});
console.log("Initiating async operation...");تحويل النتائج باستخدام .then()
في حين أن .done() و.fail() مخصّصان للمعالجة النهائية، فإن .then() أكثر مرونة. إذ يمكنه تحويل القيمة التي تم حلّها أو حتى إرجاع وعد جديد، مما يتيح المعالجة التسلسلية.
يمكنكم استخدام .then() لمعالجة نتيجة قبل تمريرها.
function fetchData() {
const dfd = $.Deferred();
setTimeout(() => {
console.log("Data fetched.");
dfd.resolve({
id: 1,
name: "Widget"
});
}, 500);
return dfd.promise();
}
fetchData()
.then(function(data) {
console.log("Processing fetched data:", data);
return data.name.toUpperCase(); // Transform the data
})
.then(function(processedName) {
console.log("Transformed name:", processedName);
// This second .then() receives the result of the first .then()
})
.fail(function(error) {
console.error("Error:", error);
});
console.log("Starting data fetch and transformation...");اختبار التخزين المؤقت وDeferreds
هل أنتم مستعدون لتحدٍّ سريع؟ اختبروا فهمكم للتخزين المؤقت للمحدّدات وكائنات Deferred.
الملخص: jQuery أسرع وأذكى
أحسنتم! لقد تعلّمتم كيفية تحسين أداء تطبيق jQuery وتنظيم شفرته بدرجة كبيرة:
- التخزين المؤقت للمحدّدات: خزّنوا تحديدات jQuery في متغيرات لتجنّب عمليات البحث المكلفة والمتكررة في DOM.
- كائنات Deferred: استخدموا
$.Deferred()و.resolve()و.reject()و.done()و.fail()و.then()لإدارة العمليات غير المتزامنة المعقدة بطريقة واضحة وفعّالة.
طبّقوا هذه التقنيات لبناء تطبيقات ويب أكثر متانة وأفضل أداءً!
تعلم JavaScript مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 22
- الدروس
- 48
الأسئلة الشائعة
هل درس «الاستفادة من التخزين المؤقت والكائنات المؤجّلة» مجاني؟
نعم — نص درس «الاستفادة من التخزين المؤقت والكائنات المؤجّلة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة jQuery Academy، انتقل إلى CoddyKit PRO. تتضمن دورة jQuery Academy 3 دروس في المجموع.
ماذا ستتعلم في «الاستفادة من التخزين المؤقت والكائنات المؤجّلة»؟
استخدم التخزين المؤقت للمحدّدات لتجنّب عمليات البحث المتكررة في DOM، وافهم كائنات jQuery Deferred لإدارة العمليات غير المتزامنة بفاعلية أكبر وتحسين وضوح الشيفرة وأدائها. تتمرن على jQuery Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ jQuery Academy؟
لا تُشترط خبرة سابقة. jQuery Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.
كم من الوقت يستغرق درس «الاستفادة من التخزين المؤقت والكائنات المؤجّلة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس jQuery Academy هذا؟
نعم. كل درس في jQuery Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تحسين عمليات معالجة DOM
- معالجة الأحداث بكفاءة وتقليل معدلها
- الاستفادة من التخزين المؤقت والكائنات المؤجّلة