GH GambleHub

بهینه سازی عملکرد UI

1) چه چیزی به عنوان «سریع» شمارش می شود

TTFB (زمان اولین بایت) - پاسخ سریع سرور/CDN.
LCP (بزرگترین رنگ محتوا) - محتوای «اصلی» به سرعت ظاهر شد.
INP (تعامل با رنگ بعدی) - پاسخ در طول تعامل.
CLS (Cumulative Layout Shift) - عدم وجود رابط کاربری.
TTI (زمان به تعاملی) - زمانی که همه چیز در حال حاضر پاسخ.
مرجع توصیه شده: LCP ≤ 2. 5S، INP ≤ 200ms، CLS ≤ 0. 1 (برای صدک 75 کاربران واقعی).

2) فرآیند: اندازه گیری → پیدا کردن تنگناها → ثابت بودجه

1. اندازه گیری: RUM (کاربران واقعی، صدک های کشور/شبکه/دستگاه) + مصنوعی (فانوس دریایی/مرورگرها).
2. یافتن: پروفایل عملکرد (وظایف طولانی> 50ms، thrashing طرح، ارائه اضافی).
3. ثابت: بودجه (وزن JS/CSS/فونت، LCP/INP) و «خطوط قرمز» در CI.

3) بارگیری شبکه و منابع

3. 1 HTTP و اولویت ها

فعال کردن HTTP/2/3، فشرده سازی Brotli.

به حوزههای بحرانی مربوط میشود dns-prefetch 'to دامنه های ثانویه

'preload' برای منابع بحرانی (تصویر قهرمان، فونت اصلی).
'fetchpriority =' بالا/پایین 'و' priority 'نکات که در آن پشتیبانی.

3. 2 ذخیره سازی

Static with file hash: 'Cache-Control: public, max-age = 31536000, immutable'.
HTML - TTL کوتاه + stale-while-revalidate از طریق CDN.
ETag/Last-Modified و Service Worker برای بازدیدهای آفلاین/تکراری.

4) کد: کمتر، بعد، «تملق»

4. 1 مجمع

تکان دادن درخت، کوچک کردن (в т. ч. مرده کد-elim).
تقسیم کد توسط مسیرها/ویدجت ها، واردات پویا.
اجتناب از «جهانی» بسته های سنگین در بسته نرم افزاری اساسی (لحظه → بین المللی/روز. ج).

4. 2 رندر و تحویل HTML

SSR/ISR/جریان: ابتدا چارچوب و محتوای اصلی را ارائه دهید.
هیدراتاسیون جزئی/جزایر: هیدراته تنها مناطق تعاملی.
تمام موارد غیر بحرانی را به تعویق بیندازید: <script type = "module" defer> ".

4. 3 ویژگی واکنش (اگر React استفاده شود)

واکنش نشان دهید. تنبل "+" تعلیق "برای ویدجت تنبل.
'startTransition' و 'useDeferredValue' برای فیلترهای سنگین/جستجوها.
RSC (Server Components) - محاسبات سرور، کمتر از JS در مشتری.
انتخابگرها در (zustand/redux): جزء را به قطعات، نه کل پشته، امضا کنید.

5) رندر و حالت: جایی که «کند می شود»

5. 1 جداسازی رندرها

خرد کردن اجزای بزرگ، memoize («یادداشت»، «استفاده از یادداشت»، «استفاده از مخاطبین»).
کلیدهای لیست پایدار هستند توابع/اشیاء جدید را در پروکسی های غیر ضروری ایجاد نکنید.
اجتناب از زمینه «جهانی» برای داده های اغلب در حال تغییر - استفاده از انتخابگرها و یا اتوبوس رویداد.

5. 2 مجازی سازی و لیست های بزرگ

Sheets/tables → مجازی سازی (پنجره رندر).
صفحه بندی/پیمایش بی نهایت با فشار پشتی (خطوط 100k را در یک بار بارگیری نکنید).
مقدار دهی اولیه تاخیر از ویدجت های سنگین در خارج از viewport.

5. 3 طرح و رنگ

محتوای دید: خودکار ؛ برای پارتیشن های پنهان (مرورگر نامرئی را ارائه نمی دهد).
حاوی و «اندازه ذاتی» برای اندازه های قابل پیش بینی است.

اجتناب از طرح مکرر خواندن ورودی (طرح thrashing) ؛ اندازه گیری های گروهی

تغییر خواهد کرد استفاده دوز (در غیر این صورت حافظه اضافی/لایه ها).

6) تصاویر و گرافیک

فرمت ها: AVIF/WebP (برگشت در PNG/JPEG).
رویکرد پاسخگو: «srcset» + «اندازه»، مبتنی بر تراکم برای شبکیه چشم.
' loading =» lazy»' برای تصاویر غیر قهرمان ؛ اولویت/پیش بارگذاری - فقط برای کاندیدای LCP.
متغیرهایی با اندازه ثابت → بدون پرش CLS.
بوم/نمودار: بوم خارج از صفحه و وب کارگر برای محاسبات ؛ با سر و صدا راه میرفت.

7) فونت و متن

یک یا دو فونت متغیر به جای بسیاری از سبک ها.
'font-display: swap '/' اختیاری'، پیش بارگذاری برای سبک پایه.
«size-adjust» برای کاهش «jump» هنگام تغییر فونت.
فونت های جایگزین محلی با معیارهای مشابه.

8) CSS و انیمیشن ها

بحرانی CSS درون خطی (<14-20 کیلوبایت)، بقیه - به تعویق افتاد.
حذف سبک های استفاده نشده (پاکسازی/CSSTree).
انیمیشنها، در صورت امکان، روی تبدیل/کدورت ؛ احترام «ترجیح کاهش حرکت».
اجتناب از آبشارهای عمیق و انفجار انتخابگرها.

9) کارکنان وب، جریان و وظایف سنگین

همه CPU سنگین - در Worker (تجزیه، مرتب سازی، جمع آوری، ML).
جریان API ها («ReadableStream», «واکشی» با جریان) برای پاسخ های طولانی.
تقسیم وظایف به تکه ها از طریق 'requestIdleCallback '/microtasks برای حفظ پاسخگویی.

10) ثبات طرح (CLS)

فضای ذخیره برای عنصر LCP (تصویر/ویجت).
آگهی ها/روبان ها را بدون اندازه های ثابت وارد نکنید.
tultips نامتقارن/toasts - محتوای حرکت نمی کند ؛ استفاده از لایه ها/پورتال ها.

11) نمونه هایی از قطعه

فونت بحرانی و تصویر LCP

html
<link rel="preload" href="/fonts/Inter. var. woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" as="image" href="/hero. avif" imagesrcset="/hero. avif 1x, /hero@2x. avif 2x" fetchpriority="high">

مقدار اولیه ویجت تنبل و امن

js const Widget = React. lazy(() => import('./Widget'));
function Section() {
const inView = useInViewport('#sec');
return <div id="sec">{inView? <React. Suspense fallback={null}><Widget/></React. Suspense>: null}</div>;
}

تثبیت طرح

css
.hero {
content-visibility: auto;
contain: layout paint;
contain-intrinsic-size: 720px 320px ;/LCP reserve/
}

12) کنترل رگرسیون و بودجه

بودجه بسته نرم افزاری: مجموع JS ≤ NkB، CSS ≤ MkB، قطعه اولیه ≤ kB.
حیاتی وب در CI (شبیه سازی شده) + RUM-هشدار (در صدک).
تجزیه و تحلیل بسته نرم افزاری: source-map-explorer/analyzer در روابط عمومی.
معیارهای عملکرد اجزاء (رندر عناصر 10k، زمان واکنش).

13) ضد الگوهای

بارگذاری «همه در یک بار»: نمودارها، ویراستاران، نقشه ها در صفحه اول.
حالت جهانی بزرگ → رندرهای آبشار.
تصاویر 2-4 × از اندازه مورد نظر، بدون «srcset/اندازه».
حلقه های همزمان طولانی در موضوع اصلی.
'outline: none' و ترفندهای سفارشی بدون بهینه سازی - دخالت با شاخص های رندر.
انیمیشن ها توسط «بالا/چپ» (شکستن طرح و تماس با ریفلاکس).

14) چک لیست صفحه نمایش

[LCP ≤ 2] 5 ثانیه در ترافیک 3G/mobile، CLS ≤ 0. 1، INP ≤ 200 میلی ثانیه
  • منابع بحرانی: پیش بارگذاری/اولویت ها ؛ بقیه به تعویق/تنبل است
  • بسته نرم افزاری: تقسیم کد، بدون وابستگی اضافی
  • مجازی سازی لیست/جدول، ویجت سنگین تاخیر در راه اندازی
  • تصاویر: AVIF/WebP،' srcset/اندازه'، 'بارگیری =» تنبل»'
  • فونت ها: متغیر + 'font-display'، پیش بارگذاری فقط مورد نظر است
  • CSS: درون خطی بحرانی، پاکسازی، «محتوا دید» و «شامل» که در آن مناسب
  • کارگران/بیکار برای محاسبات سنگین
  • بودجه ها و وب سایت ها به داشبورد/هشدار متصل می شوند

15) برنامه پیاده سازی (3 تکرار)

تکرار 1 - برنده سریع (1-2 هفته)

فعال کردن Brotli/HTTP-2/3، CDN. CSS بحرانی و پیش بارگذاری منابع LCP.
انتقال ویجت های سنگین به واردات پویا.
تصاویر → AVIF/WebP + 'srcset'. فونت ها: 'font-display: swap'.

تکرار 2 - بهبود ساختاری (3-4 هفته)

کد تقسیم شده توسط مسیر، تجزیه و تحلیل بسته نرم افزاری، حذف «سنگین» libs.
مجازی سازی لیست، دید محتوا، حاوی ذاتی اندازه.
پیاده سازی SSR/جریان/جزایر (در صورت لزوم).
RUM با وب حیاتی، بودجه در CI.

تکرار 3 - مقیاس و استحکام (مداوم)

کارگران/بوم خارج از صفحه، محاسبات butching، startTransition/deferredValue.
حسابرسی perf به طور منظم، رگرسیون هضم خودکار، آموزش تیم.

16) مینی سوالات متداول

چه چیزی بیشترین سرعت را در موبایل خواهد داشت ؟

کاهش JS اصلی، SSR/جریان و بهینه سازی تصویر LCP.

آیا من همیشه به SSR نیاز دارم ؟

نه، اينطور نيست اگر صفحه به صورت پویا تعاملی و ذخیره سازی ضعیف باشد، هیدراتاسیون جزایر/جزئی ممکن است بهتر باشد.

چرا INP با بسته نرم افزاری «نور» بد است ؟

احتمالا وظایف طولانی (مرتب سازی، گرافیک) در موضوع اصلی - آنها را به کارگر و تقسیم وظایف.

مجموع

رابط کاربری سریع مجموعه ای از رشته ها است: اولویت های شبکه و حافظه پنهان، بسته های کوچکتر و دیر، رندر غیر پرش قابل پیش بینی، تصاویر و فونت های اقتصادی و کنترل ثابت در دنیای واقعی. بودجه ها را وارد کنید، چک ها را خودکار کنید و تیم را به فکر کردن در مورد سرعت در هر مرحله آموزش دهید - به این ترتیب رابط کاربری امروز و در یک سال سریع خواهد بود.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

Telegram
@Gamble_GC
شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.