عند استخدام كائنات متعددة أو هياكل بيانات كبيرة ، تتمثل طريقة لتحسين أدائها في استخدام تأخير التحميل أو المهمة (للتنفيذ). تم تقصير عمليات الوقت إلى وقت ممكن قدر الإمكان ، ولم تتحقق أبدًا. أستخدم بعض الأمثلة لشرح كيفية استخدام تقنية التحميل المتأخرة في Java ، ويعطي بعض الإرشادات التي يمكن أن تكون أسهل (استخدام) وكجزء من اللغة الأساسية بلغات أخرى.
سيناريو الاستخدام هو إظهار مئات البيانات الوصفية والقياس التي تستحق كائنات المجال من خلال JTable. تهيئة كائنات المجال التي يمكنها حفظ نوعين من الكائنات في الذاكرة ، حتى لو تم عرض بعض البيانات الوصفية فقط في النموذج. يستغرق بناء هذا النموذج بضع ثوانٍ ، و (لكن) يمكننا قبول مئات (البيانات) مرة أخرى. بعد إجراء بعض التحليلات ، قمنا بتحسين إدراكنا ، ويبدو أن هذا:
Public Class DomainObject {Private Final DataParser Map ؛ = aparser ؛} السلسلة العامة getheaderfield (اسم السلسلة) {// هنا نحن نتحلى بتكاسل ونقدم خريطة الرأس (header.isempl ()) {header.addall (parser.header ()) ؛} إرجاع header.get (اسم) ؛} public iberable <data> getMeasUrementValues () {// مرة أخرى lazy-load وحصة البيانات if (data.isempty ()) {data.addall (parser.measurements ()) ؛} إرجاع البيانات ؛}}
يعمل هذا التحسن على تحسين إدخال وقت العرض ويحسن بشكل كبير (قدراتنا) من عناصر البيانات الكبيرة المعالجة. يحدث جميع تحميل البيانات فقط عندما يريد شخص ما عرض قياس القياس وربط عنصر معين.
سيتم تأخير نوع من جافا بعد تفكيك الصندوق.
// كسول وسريع لأن عملية النفقات لن يتم تنفيذها إلا عند الحاجة (acondition () && باهظة الثمن ()) {...} // بطيئة الترتيب (لا تزال كسولًا!) إذا (باهظة الثمن () && acondition ()) {. ..}
غالبًا ما يكون إطار الطبقة الطويلة مثل السبات الافتراضية للتأخير لأن الوصول إلى قاعدة البيانات وسعر نقل البيانات مرتفع للغاية في ظل الظروف العادية.
تعتمد معظم وظائف اللغة على مهمة التأخير المحيطة. يمزج Scala وظائف اللغة الموجهة ويقدم الكلمات الرئيسية المتأخرة لتبسيط نمط Java.
الفئة العامة DOM ARINOBJECT (محلل: dataparser) {// تم تقييمها على أول وصول إلى header private lazy val = {parser.header ()} def getheadereld (الاسم: سلسلة): s tring = {header.get (name) .getorelse (" ")} // تم تقييمها على أول مواطن للوصول إلى Lazy Val MesurementValues: Itervable [data] = {parser.measurements ()}}}
ختاماً
إن تأخير التحميل ليس تقنية ثورية جديدة ، ولكنها أداة مفيدة للغاية عند التعامل مع البيانات الضخمة أو إبطاء الموارد. في كثير من الحالات ، يمكنك استخدامه لتحسين الأداء أو استخدامه بنفسك.
يمكن أن يقلل من تكلفة تنفيذ التعليمات البرمجية.