Frontend Development

تسلط بر اولویت‌بندی منابع: راهنمای بهینه‌سازی LCP و INP

عملکرد وب دیگر یک ویژگی اختیاری نیست؛ بلکه عاملی حیاتی در حفظ کاربران، رتبه‌بندی موتورهای جستجو و نرخ تبدیل است. در حالی که بسیاری از توسعه‌دهندگان تمرکز زیادی بر پهن‌نمایی بزرگ محتوایی (LCP) دارند، معیار جدید تعامل تا پهن‌نمایی بعدی (INP) نیز برای سنجش تعامل‌پذیری به همان اندازه حیاتی است. دستیابی به نمرات بهینه برای هر دو معیار، نیازمند درک دقیقی از نحوه بارگیری و اجرای منابع توسط مرورگر است. در این مطلب، استراتژی‌های فنی برای پیاده‌سازی اولویت‌بندی منابع را بررسی می‌کنیم تا اطمینان حاصل کنیم برنامه شما هم سریع و هم واکنش‌گرا به نظر می‌رسد.

درک تعارض بنیادین

چالش اساسی در بهینه‌سازی عملکرد این است که LCP و INP اغلب برای منابع مرورگر با یکدیگر رقابت می‌کنند. LCP معمولاً توسط دارایی‌های سنگین مانند تصاویر، فونت‌ها و پردازش اولیه HTML هدایت می‌شود. از سوی دیگر، INP به سرعتی بستگی دارد که رشته اصلی (main thread) بتواند تعاملات کاربر را پردازش کند. اگر تمام منابع حیاتی را به صورت تهاجمی پیش‌بارگذاری کنید، ممکن است LCP را بهبود بخشید اما رشته اصلی را گرسنه بگذارید که منجر به لگد زدن (jank) و نمرات ضعیف INP می‌شود. هدف نه تنها بارگذاری سریع‌تر موارد است، بلکه بارگذاری آن‌ها در زمان مناسب و با اولویت درست است.

اشاره‌گذاری استراتژیک منابع

اشاره‌های منابع (Resource hints) ابزارهای قدرتمندی برای هدایت اولویت‌بندی بارگیری توسط مرورگر هستند. با این حال، استفاده بی‌رویه از آن‌ها می‌تواند منجر به آلودگی حافظه پنهان (cache pollution) و افزایش تقاضای شبکه شود. ما باید در مورد اینکه از کدام اشاره‌ها استفاده می‌کنیم، استراتژیک عمل کنیم.

پیش‌اتصال در برابر پیش‌بارگذاری

preconnect برای برقراری ارتباطات زودهنگام با مبدأهای شخص ثالث (فونت‌ها، تحلیل‌ها، CDNها) ضروری است. این کار تأخیر را برای درخواست‌های بعدی کاهش می‌دهد بدون اینکه در واقع منبع را دانلود کند. در مقابل، preload تهاجمی است و باید صرفاً برای منابع LCP بالای صفحه، مانند تصویر اصلی قهرمان یا فونت‌های حیاتی رزرو شود.

<!-- Use preconnect for third-party origins early in the document -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://cdn.example.com" crossorigin />

<!-- Use preload only for critical LCP resources -->
<link rel="preload" href="/images/hero.jpg" as="image" />
<link rel="preload" href="/fonts/main-font.woff2" as="font" type="font/woff2" crossorigin />

اهمیت ویژگی crossorigin را در نظر بگیرید. مرورگرها برای منابع برون‌دامنه‌ای به این ویژگی نیاز دارند تا از مشکلات محتوای ترکیبی جلوگیری کرده و مدیریت صحیح نوع MIME را تضمین کنند. حذف آن می‌تواند باعث شود منبع پیش‌بارگذاری نشود یا دو بار بارگذاری شود.

اولویت‌بندی بارگذاری اسکریپت

جاوااسکریپت اصلی‌ترین مقصر برای افت عملکرد INP است. مسدود کردن رشته اصلی با اسکریپت‌های همگام یا غیرحیاتی، آمادگی برای تعامل را به تأخیر می‌اندازد. ما می‌توانیم این مشکل را با استفاده از defer و async کاهش دهیم، اما برای برنامه‌های مدرن، بارگذاری پویا اغلب برتر است.

برای اسکریپت‌های اصلی برنامه خود از type="module" استفاده کنید. ماژول‌ها به طور پیش‌فرض به تعویق می‌افتند، به این معنی که پردازش HTML را مسدود نمی‌کنند. برای اسکریپت‌های شخص ثالث که بلافاصله ضروری نیستند، بارگذاری پویا یا بارگذاری آن‌ها پس از وقوع تعامل اصلی را در نظر بگیرید.

<!-- Main app script: deferred automatically -->
<script type="module" src="/js/app.js"></script>

<!-- Non-critical third-party script: load asynchronously -->
<script async src="https://analytics.example.com/track.js"></script>

<!-- Critical first-click handler: inline or sync -->
<script>
  document.addEventListener('click', handleAnalytics, { once: true });
</script>

اولویت‌بندی و رمزگشایی تصاویر

تصاویر اغلب وزن بایت صفحه را به خود اختصاص می‌دهند. برای بهینه‌سازی LCP، اطمینان حاصل کنید که تصویر حیاتی ویژگی fetchpriority="high" را دارد. این کار به مرورگر می‌گوید تا این تصویر خاص را نسبت به سایر موارد در صف، در اولویت قرار دهد.

<img 
  src="hero.jpg" 
  alt="Hero Banner" 
  fetchpriority="high" 
  width="1200" 
  height="630"
/>

علاوه بر این، تصاویر بزرگ می‌توانند رندرینگ را مسدود کنند. استفاده از ویژگی decoding="async" به مرورگر اجازه می‌دهد تا تصویر را در یک رشته جداگانه رمزگشایی کند در حالی که به رندرینگ بقیه صفحه ادامه می‌دهد. این کار از مسدود شدن رشته اصلی در طول پردازش تصویر جلوگیری کرده و مستقیماً به INP کمک می‌کند.

نتیجه‌گیری

بهینه‌سازی برای هر دو معیار LCP و INP نیازمند رویکردی کل‌نگر به مدیریت منابع است. با اعمال انتخابی اشاره‌های منابع، مدیریت استراتژی‌های بارگذاری اسکریپت و بهینه‌سازی تحویل تصاویر، می‌توانید تجربه‌هایی ایجاد کنید که نه تنها سریع بارگذاری می‌شوند، بلکه بلافاصله تعامل‌پذیر هستند. به خاطر داشته باشید که عملکرد یک تعمیر یک‌باره نیست، بلکه فرآیندی مداوم از نظارت و اصلاح است. از ابزارهایی مانند Chrome DevTools و PageSpeed Insights برای شناسایی گلوگاه‌ها و اعمال تکراری این استراتژی‌های اولویت‌بندی استفاده کنید.

Share: