التحميل البطئ
التحميل البطئ أو الكسول (بالإنجليزية: Lazy loading) (المعروف أيضا باسم التحميل غير المتزامن) هو عبارة عن نمط التصميم أو لغة برمجية يشيع استخدامها في برمجة الكمبيوتر ومواقع الويب، لكن معظمها تختص في تصميم وتطوير الويب حتى يتم تأجيل تهيئة أو استحضار كائن ما من الصفحة متأخر عن باقي العناصر. يمكن أن تسهم في الكفاءة في تشغيل البرنامج إذا تم استخدامها بشكل صحيح ومناسب. هذا يجعلها مثالية في حالات الاستخدام حيث يتم الوصول إلى محتوى الشبكة ويجب الاحتفاظ بأوقات التهيئة كحد أدنى، كما هو الحال في حالة صفحات الويب. على سبيل المثال، تأجيل تحميل الصور على صفحة ويب حتى تكون هناك حاجة إليها يمكن أن يجعل العرض الأولي لصفحة الويب أسرع. عكس التحميل الكسول هو سرعة التحميل.[1]
الأطر التي تستخدم التحميل الغير متزامن
عدليعد هناك إطار مشهور جدا يستخدم التحميل البطئ هو الزاويا. كانت هناك بعض المناقشات حول ما إذا كان التحميل البطئ يساعد حقا لأنه يزيد من اتصال الخادم. في الأصل، فالتحميل المتأخر لبعض العناصر في الموقع يساعد مطورين المواقع لتحديد أي وحدات أفضل للتحميل في التهيئة، أو عندما يتم استدعاء مهمة. يمكن أنه يدعم الأجهزة الصغيرة والإنترنت ذات السعة المنخفضة.
وفيما يلي مثال على تحميل بطئ المستخدمة في الزاويا، مبرمجة باستخدام نص سكريبت من فاراتا سيستمز[2]
@NgModule({
imports: [ BrowserModule,
RouterModule.forRoot([
{path: '', component: HomeComponent},
{path: 'product', component: ProductDetailComponent},
{path: 'luxury', loadChildren: () => import('./luxury.module').then(m => m.LuxuryModule), data: {preloadme:true} } ]
// , {preloadingStrategy: CustomPreloadingStrategy}
)
],
declarations: [ AppComponent, HomeComponent, ProductDetailComponent],
providers:[{provide: LocationStrategy, useClass: HashLocationStrategy}, CustomPreloadingStrategy],
bootstrap: [ AppComponent ]
})
تطبيقات
عدلعند التطبيق العملي هناك أربع طرق شائعة لتنفيذ نمط تصميم التحميل البطئ: التهيئة البطيئة؛ الوكيل الافتراضي؛ الشبح، و حامل القيمة.[3] ولكل منها مزاياه وعيوبه.
التهيئة البطيئة
عدلمع التهيئة البطيئة لمحركات البحث والظهور، يتم تعيين الكائن المراد تحميله بتكاسل في الأصل إلى نول مصدري، وكل طلب للكائن يتحقق من نول وينشئه «بشكل طائر» قبل إعادته أولا للعرض، كما في هذا المثال C#:
private int myWidgetID;
private Widget myWidget = null;
public Widget MyWidget
{
get
{
if (myWidget == null)
{
myWidget = Widget.Load(myWidgetID);
}
return myWidget;
}
}
أو باستخدام عامل الاندماج الصفري "؟؟"
private int myWidgetID;
private Widget myWidget = null;
public Widget MyWidget
{
get { return myWidget = myWidget ?? Widget.Load(myWidgetID); }
}
طريقة اندماج العامل الصفري تلك الطريقة هي أبسط طريقة للتنفيذ، حتى لو كانت القيمة الفارغة هي نفسها قيمة إرجاع مشروعة، لكن هنا قد يكون من الضروري استخدام كائن عنصر نائب للإشارة إلى أنه لم يتم تهيئته. إذا تم استخدام هذه الطريقة في تطبيق مؤشرات الترابط، يجب استخدام المزامنة لتجنب شروط السباق.
بروكسي افتراضي
عدلالبروكسي هو الوكيل الظاهري للبحث هو كائن له نفس واجهة الكائن الحقيقي عند التحميل في المرة الأولى، واحدة من أساليبها يطلق عليه تحميل الكائن الحقيقي ومن ثم تطلق على السلسلة التالية المندوبين.
شبح
عدل«الشبح» هو الكائن الذي سيتم تحميله في حالة جزئية. قد يحتوي عنصر فقط على معرف الكائن، ولكنه يقوم بتحميل بياناته الخاصة في المرة الأولى التي يتم فيها الوصول إلى إحدى خصائص العنصر. على سبيل المثال، ضع في اعتبارك أنه قد يكون المستخدم على وشك طلب محتوى عبر نموذج على الإنترنت. في وقت الإنشاء؛ كل ما نعرفه أنه سيتم فقط الوصول إلى المحتوى، ولكن الإجراء المستخدم أو المحتوى المدخل غير معروف من المستخدم إلا بعد الوصول لمصدر البيانات.
مثال PHP:
فيعد البداية مع حامل القيمة= (صيغة المعادلة النصية _ كود البرمجة_)
$userData = array (
"UID" = > uniqid(),
"requestTime" => microtime(true),
"dataType" => "",
"request" => ""
);
if (isset($_POST['data']) && $userData) {
// ...
}
حامل القيمة
عدلحامل القيمة هو كائن عام يتعامل مع سلوك التحميل البطيء، ويظهر بدلاً من حقول بيانات الكائن:
تنفيذ الويب
عدلإن تمكين متصفح الويب مهما كان نوعه من عرض الصفحات بسرعة وعرضها في أقل وقت هو حاجة ماسة لعالم اليوم الحديث. حيث إن أبسط طريقة لتنفيذ أوامر التحميل الكسول هي كما يلي
<img src="image.jpg" alt="..." loading="lazy"> <iframe src="video-player.html" title="..." loading="lazy"></iframe>
تدعم سمة التحميل قيمتين، كسول وحريص. سيتم تحميل الصورة بالحرص على الأولوية بينما يقوم كود lazy بجلبها فقط عندما تكون مطلوبة أو عندما تكون الصورة في منفذ العرض.
انظر أيضًا
عدلالمراجع
عدل- ^ "What is Lazy Loading | Lazy vs. Eager Loading | Imperva". Learning Center (بالإنجليزية الأمريكية). Archived from the original on 2022-02-02. Retrieved 2022-02-02.
- ^ Fain, Y., Moiseev, A. (2018). Angular Development with TypeScript, Second Edition. December (ردمك 9781617295348).
- ^ Martin Fowler (2003). Patterns of Enterprise Application Architecture. Addison-Wesley. ص. 200–214. ISBN:0-321-12742-0.