Performance & GPU acceleration
انیمیشنها در وب دو جور اجرا میشن:
-
روی CPU (کندتر، مخصوصاً وقتی تعداد زیادی المان انیمیت میشن)
-
روی GPU (خیلی سریعتر و روانتر)
با استفاده از چند تکنیک میتونیم به مرورگر کمک کنیم انیمیشنها رو بهینهتر اجرا کنه.
🔹 ۱. استفاده از transform بهجای top/left
تغییر دادن top
یا left
باعث reflow و repaint توی صفحه میشه (کل صفحه دوباره محاسبه و رندر میشه).
ولی transform: translate
روی یک لایهی جدا (GPU) اجرا میشه و خیلی سریعتره.
📌 همیشه برای جابجایی از x
و y
استفاده کن.
🔹 ۲. استفاده از opacity بهجای display/visibility
اگر فقط میخوای المان محو بشه، استفاده از opacity
بهینهتره.
📌 چون تغییر display
و visibility
باعث محاسبه دوباره DOM میشه.
🔹 ۳. استفاده از will-change در CSS
با خاصیت CSS will-change
میتونی به مرورگر بگی چه چیزی قراره تغییر کنه، تا زودتر اون رو آماده GPU کنه.
📌 این باعث میشه انیمیشنها نرمتر و بدون لگ اجرا بشن.
🔹 ۴. فعالسازی GPU با translateZ(0) یا force3D
گاهی برای اطمینان از اینکه مرورگر GPU استفاده میکنه، میشه از translateZ(0)
یا force3D:true
استفاده کرد.
📌 این ترفند باعث میشه مرورگر برای اون المان یک لایهی سهبعدی بسازه.
🔹 ۵. کاهش تعداد انیمیشنهای همزمان
هرچه تعداد انیمیشنهای فعال بیشتر باشه، مصرف منابع بالاتر میره.
پس:
-
فقط المانهای ضروری رو انیمیت کن.
-
انیمیشنهای تزیینی زیاد (مثل سایهها یا border-radius) رو کمتر استفاده کن.
🔹 ۶. انتخاب property مناسب
-
سریع و GPU-friendly →
transform
(x, y, scale, rotation, skew) +opacity
-
کند و CPU-heavy →
width
,height
,top
,left
,margin
,padding
مثال مقایسه:
🔹 ۷. مثال ترکیبی – انیمیشن بهینه با GPU
📌 در این مثال:
-
تمام property ها (
x
,y
,scale
,opacity
) GPU-friendly هستن. -
با
will-change
مرورگر از قبل آمادهست. -
force3D
تضمین میکنه انیمیشن رو GPU انجام بده.
✅ جمعبندی
-
از transform و opacity استفاده کن → سریعتر و GPU-friendly.
-
از تغییر top, left, width, height پرهیز کن → کند و CPU-heavy.
-
از will-change و translateZ(0)/force3D برای آمادهسازی GPU استفاده کن.
-
تعداد انیمیشنهای همزمان رو مدیریت کن تا مصرف منابع پایین بمونه.