يتفاعل التحميل البطيء وترطيب التطبيق بطريقة معقدة وغالبًا ما تكون متضاربة ، لأن الترطيب يتطلب تنفيذ رمز التطبيق بفارغ الصبر ، مما يقوض فوائد التحميل الكسول.
كيف يعمل الترطيب وتأثيره على التحميل الكسول
الترطيب هو العملية التي يتم من خلالها "تنشيط" صفحة HTML التي تم إصدارها الخادم على جانب العميل عن طريق تشغيل JavaScript لإرفاق مستمعي الأحداث ، واستعادة حالة المكون ، وجعل الصفحة تفاعلية. تتضمن هذه العملية تنفيذ مكونات التطبيق تبدأ من الجذر وتجاوز شجرة المكون لفهم الحالة والروابط ومعالجات الأحداث.
نظرًا لأن الترطيب يجب أن يزور كل مكون في شجرة التجسيد الحالية لتحديد ما إذا كان يحتاج إلى تفاعل ، فإنه يجبر جميع هذه المكونات على أن يتم تحميلها وتنفيذها بشغف. هذا يعني أنه حتى إذا قمت بتحديد بعض مكونات التحميل الكسول ، فسيظل الترطيب يتم تحميلها على الفور إذا كانت جزءًا من شجرة العرض الأولية. الترطيب متسلسل ولا يمكن تخطي المكونات الوسيطة لترطيب مكونات الطفل مباشرة ، لذلك يجب أن تكون جميع مكونات الأصل رطبًا أولاً [1] [6].
لماذا تخريب ترطيب التحميل كسول
- التنفيذ المتحمس: يتطلب الترطيب تنفيذ جميع المكونات في شجرة التجسيد ، مما يمنع التحميل الكسول من تأجيل تحميل التعليمات البرمجية لهذه المكونات.
- تبعيات المكونات: تعتمد مكونات الطفل على الدعائم من مكونات الأصل ، لذلك يجب أن يكون الوالدان رطبًا أولاً ، مما يجبر سلسلة من التحميل المتحمس.
- معالجات الأحداث والحالة: يجب على الترطيب أيضًا إعداد مستمعي الأحداث واستعادة الحالة ، والتي تتطلب تشغيل رمز المكون مقدمًا.
- عبء المطور: لتحقيق التحميل البطيء أثناء الترطيب ، يجب على المطورين إدارة الجذاب المسبق وتقسيم التعليمات البرمجية يدويًا ، والتي يمكن أن تكون معقدة ومعرضة للخطأ [6] [7].
عندما يعمل التحميل كسول على الرغم من الترطيب
يمكن أن يكون التحميل البطيء فعالًا للمكونات التي ليست جزءًا من شجرة التجسيد الأولية وبالتالي لم تتم زيارتها أثناء الترطيب. تشمل الأمثلة:
- مربعات الحوار أو المعدلات التي تفتح على تفاعل المستخدم
- مكونات على طرق مختلفة لا يتم تقديمها في البداية
في هذه الحالات ، يمكن أن تكون المكونات محملة حقًا لأن الترطيب لا يجبر تنفيذها الفوري [6].
تقنيات لتحسين الترطيب والتحميل الكسول
تحاول بعض الأطر والمكتبات الحديثة تحسين هذا التفاعل من خلال تنفيذ ترطيب كسول أو ترطيب انتقائي ، حيث يتم ترطيب المكونات فقط عند الحاجة ، مثل عندما تصبح مرئية في منفذ العرض:
-مكتبات مثل "Hydration-On-Scroll" في Next.js تسمح بتأجيل الترطيب حتى يتم تمرير مكون في العرض.
- باستخدام API intersectionObserver ، يمكن تحميل المكونات وترطيبها فقط عند دخول منفذ العرض.
-في VUE/NUXT ، تمكن تقنيات الترطيب البطيئة والإضافات (على سبيل المثال ، "Hydrate-Lazy-Hydrate` nuxt") من تأخير الترطيب حتى يكون الخيط الرئيسي خاملاً أو يكون المكون مرئيًا ، مما يحسن الوقت لمقاييس تأخير الإدخال التفاعلية والأول [4] [5].
ملخص
تتنافس الترطيب والكسل بشكل أساسي لأن الترطيب يتطلب تنفيذ مكونات متلهف في شجرة التجسيد ، مما يمنع التحميل البطيء من تنفيذ التعليمات البرمجية. ومع ذلك ، يظل التحميل البطيء فعالًا للمكونات خارج نطاق الترطيب الأولي. تهدف التقنيات الناشئة مثل الترطيب البطيء إلى التوفيق بين هذا الصراع من خلال تأجيل الترطيب نفسه ، وتحسين الأداء وتجربة المستخدم.
في جوهرها ، تخريب الترطيب التحميل كسول أثناء تحميل الصفحة الأولية ، ولكن مع خيارات معمارية دقيقة وأدوات متخصصة ، يمكن للمطورين تحسين متى وكيف يتم رطب المكونات لاستعادة فوائد التحميل البطيء [1] [6] [7].
الاستشهادات:
[1] https://www.infoq.com/presentations/hydration-lazy-loading/
[2] https://qconsf.com/presentation/oct2023/hydration-and-lazy-loading-are-incible
[3] https://github.com/vercel/next.js/discussions/29751
[4] https://www.wisp.blog/blog/lazy-loading-in-nextjs-the-future-of-resource-optimization
[5] https://vueschool.io/articles/vuejs-tutorials/lazy-hydration-and-server-components-in-nuxt-vue-js-3-performance/
[6] https://www.builder.io/blog/hydration-sabotages-laaty-loading
[7] https://www.linkedin.com/posts/misko-hevery-3883b1_lazy-loading-is-like-exercise- everyon-says-activity-7115086933935984641-5oxk
[8] https://www.techtarget.com/searchsoftwarequality/definition/lazy-loading