Từ trước đến giờ, khi nghĩ đến việc tối ưu website, mình sẽ nghĩ ngay đến website của hệ thống bán lẻ Thế giới di động: thegioididong.com. Tốc độ tải trang nhanh đến bất ngờ, cứ ngỡ như nó đã được tải sẵn vào trình duyệt và máy tính chỉ tốn thời gian xử lý và hiển thị lên thôi đúng không các bạn 😀
Vậy chúng ta cùng tìm hiểu xem Thế giới di động đã tối ưu frontend (cũng là những thứ mình có thể phân tích được) như thế nào mà đạt được tốc độ khủng như vậy. Những bài viết phân tích này cũng là cách mình note lại cách tối ưu website của các tên tuổi lớn như là một kinh nghiệm để sau này áp dụng cho các dự án của mình.
Nào bắt đầu thôi 😀
Mình có dùng nhiều từ về công nghệ hoặc cách thực hiện mà có thể các bạn thấy lạ. Do là note nên mình sẽ không giải thích chi tiết. Bạn có thể comment bên dưới để mình giải thích rõ hơn hoặc search Google nhé.
Tóm tắt
- Sử dụng công nghệ mới HTTP/2.
- Lazyload / Không lazyload mọi thứ khi có thể.
- Inline tất cả CSS ở header.
- Gom tất cả Javascript về một file đặt ở footer.
- Không sử dụng bất kì CSS framework nào, cấu trúc HTML cũng rất gọn khi có rất ít cấp con.
Sử dụng HTTP/2
Thật ra ở tên miền chính thegioididong.com vẫn sử dụng HTTP/1.1 nhưng ở các CDN của website đều đang chạy công nghệ HTTP/2 mới nhất.
Thế giới di động không sử dụng HTTP/2 push để đẩy hình ảnh hoặc javascript sớm hơn. Đơn giản là thegioididong.com không cần javascript cho phần viewport khi người dùng xem trang, điều này có thể dễ hiểu khi bắt đầu nói đến phần Lazyload.
Lazyload bất cứ khi nào có thể
Tất cả những hình ảnh nằm bên dưới viewport (vùng nhìn) đều được lazyload, có nghĩa là chỉ load khi sắp được người dùng cuộn trang và nhìn tới. Kể cả slider đầu trang, những slide từ thứ 2 trở đi đều được lazyload.
Không lazyload bất cứ khi nào có thể
Ơ tại sao vậy? Sao lại ngược lại với bên trên? Như mình nói, chúng ta cảm nhận được ngay rằng website truy cập rất nhanh do thegioididong.com không lazyload hình ảnh đầu tiên của slider đầu trang, không lazyload logo và các icon ở menu chính và gom luôn vào một file hình ảnh duy nhất.
Thật vậy, tất cả các hình ảnh trong vùng nhìn (viewport) của mình đều được load ngay mà không phải chờ đợi gì cả, cộng với dàn máy chủ khủng thì việc hình ảnh hiện ra gần như tức khắc cũng không quá bất ngờ. Riêng 3 hình ảnh Oppo F3, S8 Plus ở cuối ảnh chụp màn hình được lazyload đấy hehe.
Inline tất cả CSS vào header
Tác dụng lớn nhất là trình duyệt sẽ không cần đợi request từ máy chủ trả về dữ liệu rồi mới xử lý mà có thể xử lý ngay lập tức ngay khi trình duyệt vừa đọc tới header. Ngoài ra, thegioididong.com đã pass tiêu chí tránh bị render-blocking với các tập tin CSS, JS mà các website WordPress hay gặp phải.
Đưa tất cả javascript xuống footer
Rất tuyệt vời khi việc đưa JS xuống footer này không ảnh hưởng đến việc lazyload của website. Như mình đã nói, tất cả hình ảnh ở trong vùng nhìn được sẽ tải bằng thẻ <img>
bình thường thay vì javascript. Vì vậy người dùng sẽ có ngay một trang web hoàn chỉnh ngay cả khi javascript chưa được load. Cuối cùng, việc đưa javascript xuống footer cũng không ảnh hưởng quá nhiều đến việc hiển thị website.
Ngoài ra, code javascript cũng từng phân trang sẽ được đặt tên khác nhau và chỉ load khi cần, ví dụ ở trang chủ sẽ có home.min.js
, ở trang chi tiết sản phẩm sẽ có detail.min.js
chẳng hạn 😀
Việc không sử dụng các code tracking của bên thứ ba cũng là một phần giúp tốc độ website ở mức tốt nhất có thể. Tất nhiên Thế giới di động có hệ thống tracking riêng chứ không phải bỏ ngỏ khách hàng nhé 😛
Code rất gọn
Như mình đã nói, việc thegioididong.com không sử dụng bất kì CSS framework nào dành cho việc dựng trang, kể cả CSS reset, đơn giản chỉ là dòng * {margin:0; padding:0}
thôi 😀
Việc này thứ nhất làm CSS gọn đi rất nhiều và giúp máy chủ xử lý, minify khi cần thiết nhanh hơn. Ngoài ra, CSS càng ngắn càng tốt. Đối với các theme WordPress nặng như Porto, việc inline hàng MB nội dung CSS vào trình duyệt đã thấy rất mệt, chưa kể Facebook cũng không fetch được dữ liệu website để hiển thị hình đại diện, tiêu đề, thông tin nếu CSS quá dài đâu nhé, kinh nghiệm đau thương của mình đó 😀
HTML cũng vậy, nhờ việc không sử dụng CSS framework nào giúp code gọn đi rất nhiều, chỉ cần truy cập vào 1, 2 cấp node con đã có thể chạm tới phần nội dung được hiển thị rồi 😀
Một số tối ưu khác
Ở trang chi tiết sản phẩm, Thế giới di động đã đặt hàm setTimeout có giá trị 7s kể từ khi người dùng tải trang xong chỉ để hiển thị nút Like và Share của Facebook. Cá nhân mình nghĩ giá trị này hơi cao, nếu có thể thì giảm xuống 4 hoặc 5 giây là hợp lý. Tất nhiên mình nghĩ TGDĐ có lí do khi đặt ra giá trị này.
Thế giới di động cũng tối ưu hình ảnh khá tốt, dàn CDN và máy chủ chắc có lẽ khá khủng cũng là một trong những lí do để website đạt được tốc độ như điện xẹt vậy.
Còn bạn thì sao, bạn thấy Thế giới di động đã làm gì khác để nâng cao tốc độ website của mình, hãy chia sẻ cảm nhận tại đây nhé 😀
Nguồn DAT