Ðăng Nhập

View Full Version : Performance trong Front-end: Tối ưu CSS để website nhanh và mượt hơn



kemntas
13-12-2025, 06:15 PM
Khi nói về “web nhanh”, nhiều người thường nghĩ ngay đến server, cache hay CDN. Nhưng trên thực tế, CSS và cách chúng ta viết giao diện có thể ảnh hưởng rất lớn đến tốc độ tải trang, độ mượt khi cuộn (scroll), và trải nghiệm trên điện thoại cấu hình yếu.
Bài viết này tổng hợp các điểm quan trọng giúp tối ưu performance phía trình duyệt, tập trung vào CSS và rendering.
1. Hiểu nhanh: Trình duyệt làm gì khi tải trang?Quá trình hiển thị thường gồm:


Tải HTML/CSS/JS

Parse HTML → DOM

Parse CSS → CSSOM

Kết hợp DOM + CSSOM → Render Tree

Layout (tính kích thước/vị trí)

Paint (vẽ pixel)

Composite (ghép layer, hiển thị cuối)

Trong đó:


Layout và Paint là “đắt” (tốn tài nguyên)

Mọi thay đổi CSS có thể kéo theo layout/paint/composite

2. Ưu tiên animate bằng transform và opacityNếu cần animation, hãy ưu tiên:


transform: translate/scale/rotate

opacity

Vì hai thuộc tính này thường chỉ cần composite, ít gây layout/paint hơn.
✅ Tốt:



.card:hover { transform: translateY(-6px); }


❌ Không tốt (dễ gây layout):



.card:hover { top: -6px; }


3. Tránh “layout thrashing” khi thay đổi layout liên tụcCác thuộc tính dễ kéo theo layout:


width, height

top, left, right, bottom

margin, padding

font-size

border-width

Không phải “cấm dùng”, nhưng nên hạn chế animate hoặc cập nhật liên tục (đặc biệt khi scroll).
4. Hạn chế selector quá phức tạpSelector càng phức tạp, trình duyệt càng tốn công matching.
✅ Nên:



.card-title { ... }


❌ Hạn chế:



.page .main .content .list > li .box .title { ... }


Tip:


Dùng class rõ ràng, scope theo component

Đừng lạm dụng selector dạng “đi xuyên nhiều tầng”

5. Giảm CSS dư thừa và tránh “CSS phình”Một file CSS quá lớn gây:


Tải chậm (network)

Parse chậm (CSSOM)

Khó maintain

Gợi ý:


Dọn CSS cũ không dùng

Tách CSS theo trang/feature nếu có thể

Ưu tiên “component hóa” (CSS theo module)

6. Cẩn thận với box-shadow, filter, backdrop-filterCác hiệu ứng đẹp nhưng có thể “đắt” khi render, nhất là mobile.


box-shadow lớn, blur nhiều → paint nặng

filter: blur() / drop-shadow() → nặng

backdrop-filter → rất tốn (tùy trình duyệt)

Nếu cần dùng:


Dùng nhẹ, ít lớp

Tránh áp dụng cho danh sách dài (list nhiều item)

7. Tránh tạo quá nhiều layer không cần thiếtMột số thứ có thể tạo layer compositing:


transform

will-change

position: fixed (trong một số tình huống)

video/canvas

will-change hữu ích nhưng không nên lạm dụng:



/* Chỉ dùng khi chắc chắn cần tối ưu animation */
.box { will-change: transform; }


Dùng quá nhiều sẽ tăng RAM và có thể phản tác dụng.
8. Giảm “repaint” khi scrollScroll mượt là điểm người dùng cảm nhận rõ nhất.
Gợi ý:


Tránh hiệu ứng nặng chạy theo scroll

Hạn chế background-attachment: fixed (mobile hay lag)

Tránh các element quá lớn với đổ bóng/blur

Nếu có sticky header, tối ưu CSS cho nó (ít shadow, ít blur)

9. Font và text cũng ảnh hưởng performance

Quá nhiều font-weight → tải thêm file font

Dùng font-size “nhảy” trong animation → layout liên tục

Dùng quá nhiều hiệu ứng text-shadow → paint nặng

Khuyến nghị:


Chỉ dùng 2–3 weight thật cần

Hạn chế animate liên quan chữ

10. Một checklist ngắn để tối ưu nhanh

✅ Animation: ưu tiên transform, opacity

✅ CSS gọn, bỏ phần không dùng

✅ Selector đơn giản, component rõ ràng

✅ Hạn chế shadow/blur/backdrop-filter trên list dài

✅ Không lạm dụng will-change

✅ Tối ưu scroll: giảm repaint, tránh hiệu ứng nặng

Kết luậnPerformance không phải “tối ưu một lần rồi thôi”, mà là thói quen khi code giao diện. Chỉ cần viết CSS đúng hướng, website sẽ:


tải nhanh hơn

cuộn mượt hơn

đỡ nóng máy, tiết kiệm pin trên mobile

và cải thiện trải nghiệm tổng thể