Trong bài trước, mình đã chia sẻ về công nghệ “hiện đại” đằng sau tốc độ tải trang chóng mặt của web Thế Giới Di Động.
Mình cũng có chia sẻ về cách optimize front-end nhằm đạt được tốc độ trên. Việc đó hoàn toàn không quá khó, dù bạn có là junior front-end dev. Điển hình là các trang phía dưới do mình đã otpimize:
- Sách Code Dạo Kí Sự (nhiều hình)
- Sách Bảo Mật Nhập Môn
- Sách Nhập Môn Lập Trình Không Code
- CV Tôi Đi Code Dạo
Thế nhưng, nhiều bạn hỏi mình là “Nếu dễ vậy, tại sao các trang khác không bắt chước Thế Giới Di Động? Tại sao chỉ có TGDD là load nhanh?”
Thế là, mình lại đi tìm hiểu một số đối thủ khác của TGDD như Tiki, Sên Đô. Quả thật, các trang hơi load khá “rùa bò”, không nhanh bằng Thế Giới Di Động.
Tại sao vậy nhỉ? Chúng ta cùng tìm hiểu, thử đưa ra lời khuyên để cải thiện tốc độ tải trang xem sao nhé!
Full disclosure: Mình không được đồng quảng cáo nào khi khen thegioididong và chê các trang dưới đâu nhe nhe 😉
Tại sao lại chọn Sên Đô và Tiki?
Sẽ rất khập khiễng nếu so sánh thế giới di động với Foody, Lozi hay Mp3Zing, vì mỗi trang có một chức năng khác nhau, lượng người dùng khác nhau!
Vì vậy, mình chọn Sendo và Tiki, vì chúng đều là các trang thương mại điện tử như Thế Giới Di Động. Về độ nổi tiếng và số lượng người dùng, chúng cũng không hề kém cạnh.
Do vậy, chúng là lựa chọn thích hợp để so sánh với Thế Giới Di Động.

Bắt đầu thôi nào! À quên, chúng ta chỉ so về front-end thôi nhé. Phần back-end mình có biết chúng dùng gì đâu mà so
Sên Đô (sendo.vn) – Front-end do junior code??
Ấn tượng đầu tiên khi vào là web load… “hơi lâu”, hiện trắng bóc, quay một hồi mới load xong dù mình dùng mạng Singapore khá xịn. Quả là tốc độ rùa bỏ, lộn, sên bò.
Thế rồi, sau một hồi tra cứu HTML source của sendo, mình chỉ muốn chửi thề một câu!
Qua website của Thế Giới Di Động, ta học được những điều nên làm để web load nhanh hơn.
Thế nhưng, qua website của Sên Đô, ta lại học được những điều méo bao giờ nên làm nếu muốn website load nhanh:
1. Size nặng như Hà Mã
Bạn có nhớ, ở kì trước, mình nói toàn bộ website của Thế Giới Di Động nặng bao nhiêu không? 581KB.
Bạn thử đoán xem website của Sendo nặng bao nhiêu nào? Ừm, bạn đoán sai bét đấy! Nó nặng 5.8MB, tức là gấp 10 lần.

Hình ảnh tấm nào tấm nấy size bự chà bá, script tracking, logging nhét vô tội vạ. Nhiều script còn load trùng đến 2,3 lần.
Thậm chí còn không có lazy load nên browser phải load sạch hình ảnh của cả trang. Chẳng trách load nặng như vậy.
2. Xử lý CSS và JS sai sách
Mở source code HTML của Sên Đô ra, các bạn sẽ vừa trợn mắt há mồm vừa WTF thêm lần nữa:
- Sendo cũng cho CSS vào thẻ head, nhưng CSS này có quá nhiều ảnh base64 nên rất nặng.
- JavaScript được bỏ phía trên thẻ head. Bỏ JS vào head nghĩa là browser phải tải toàn bộ JS về rồi mới tải CSS, HTML và render được. Chẳng trách khi mới vào, các bạn sẽ thấy trang trắng bóc, quay quay 1 hồi mới hiện.
- JavaScript cũng được chia ra quá nhiều file, thậm chí còn không thèm minify nên file nào file nấy nặng tổ chảng.

3. Làm sao để cải thiện
Việc cải thiện thật ra cũng không quá phức tạp, mình đã chia sẻ ở bài trước:
- Optimize toàn bộ hình ảnh để tiết kiệm dung lượng.
- Thêm lazy load để chỉ load ảnh khi người dùng scroll xuống
- Đổi các ảnh base64 trong CSS thành link ảnh để load sau, giảm tải CSS
- Hiện tại layout sẽ bị bể nếu không có JavaScript. Code lại layout, sau đó bundle, minify và bỏ JavaScript xuống dưới cùng để không block render.
- Kiểm tra và loại bỏ các script thừa không dùng đến
Tiki.vn – Khá ổn
Trước giờ, mình rất “ngưỡng mộ” team Tiki vì họ có một engineering blog riêng. Ví dụ trong bài về Giựt cô Hồn, họ có nói rằng có sử dụng những công nghệ hiện đại như machine learning để tìm người cheat.
Ấn tượng đầu tiên là Tiki.vn có khá hơn Sendo đôi chút, trang web thoạt nhìn tải khá nhanh, chỉ nặng cỡ 3MB!

Team Tiki đã làm khá tốt những điều dưới đây:
- Có minify lại CSS và JavaScript. Tuy nhiên chắc do dùng nhiều thư viện nên 2 file vendor.js (319KB) và home.js (105KB) hơi nặng.
- CSS đặt ở đầu. JS đặt ở cuối để không block rendering.
- Có lazy load để giảm dung lượng tải ảnh
- Có set cache-control để browser cache ảnh lại
Tuy nhiên, vẫn còn vài điều có thể cải thiện:
- Optimize các ảnh được sử dụng. Ảnh nhỏ mà size nặng chà bá, mấy tấm lớn nhất cộng lại hơn 1MB.
- Xem source code thì đoạn đầu vẫn có 1 số JavaScript tracking “lạc loài”, chưa minify, nên minify và bỏ xuống dưới.
- CSS của Tiki khá nặng, tận 71KB trong khi HTML chỉ có 41KB nên mình không khuyên bỏ CSS và thẻ head.

Lý do nào web lại load nặng và chậm?
Ban đầu mình chửi bên Sendo vậy thôi, chứ không có ý chê trách gì đâu! Tính mình vốn hiền lành mà!
Các bạn nên hiểu là đôi khi website load nặng, load chậm không phải do trình độ technical của team, mà do các lý do khách quan lẫn chủ quan dưới đây:
- Do cấu trúc dự án quá bự, quá rối, hoặc sử dụng công nghệ/framework khó optimize.
Ví dụ như blog hiện tại của mình, do dùng theme dựa trên nền wordpress có sẵn nên không thể cache, không thể optimize CSS và JS, phải load tận 3-4 MB.
- Product Manager hoặc team leader không quan tâm tới chuyện optimize, vì họ nghĩ rằng làm vậy không mang lại nhiều value cho sản phẩm.
Mình có nghe nói bên team Thế Giới Di Động có KPI là tốc độ tải trang phải dưới 300ms. Do đó họ phải optimize từng li từng tí. Ở các công ty khác đôi khi web … load chậm cũng được, nhiều chức năng là được.
- Bị task dí sút quần hoặc phải OT ngập mặt nên không có thời gian optimize
- Thiếu khả năng technical hoặc … làm biếng (Cái này thì chắc là hiếm vì trình độ developer của các công ty lớn ở VN cũng khá là “trâu bò”).

Kết
Đấy, chém gió một hồi cũng dài rồi. Các bạn thấy đấy, làm front-end không chỉ có viết HTML/CSS/JS là xong!
Chỉ mỗi chuyện tổ chức cho đường hoàng, optimize tốc độ tải để trang web để mang lại UX tốt cho người dùng là cả một nghệ thuật
Nếu muốn tìm hiểu sâu về web performance, các bạn có thể xem hướng dẫn của chính Google tại đây nhé: https://developers.google.com/web/fundamentals/performance/why-performance-matters/
Ngoài ra, trong quá trình lướt web, nếu các bạn có thấy trang nào load nhanh như gió hoặc load chậm như Sên… Đô, hãy comment phía dưới này để chúng ta cùng mổ xẻ nhé!
Anh ơi, trong CV của anh chỗ Techinal Skills, Programing Languages có ghi HTML5 vs CSS3, hai cái đó cũng tính là ngôn ngữ lập trình hả anh?
LikeLiked by 2 people
Bỏ vô cho đẹp đó e, thật ra nó tính là technical skill thì đúng hơn
LikeLiked by 1 person
Cảm ơn anh, bài viết lôi cuốn quá
LikeLiked by 1 person
bài viết rất hay, cám ơn anh rất nhiều. Hy vọng anh ra nhiều tut nói về optimize front end vì đi học không có ai dạy cái này cả ❤ =))
LikeLiked by 2 people
Bài viết hay quá Hoàng ơi.
Áp dụng thực tế cho mấy website bên anh đang làm luôn, chậm chà bá :).
Cho anh hỏi chi tiết xíu:
1. Optimize ảnh sử dụng công cụ nào? bên anh có vài ảnh chạy kiểu dạng slide size khá to, mỗi ảnh kích cỡ tầm trên 1600×1200 nặng chà bá. Optimize hết cỡ cũng chỉ còn ~5,600K! (ko sử dụng PTS do ko có license 🙂 )
2. Hoàng có dạy hoặc biết chỗ nào dạy Front End tốt không ? A tính cử 1 cậu đi học.
LikeLiked by 1 person
1. À anh xem thử thằng này nhé, dưới 500 tấm thì được free. Em thì kết hợp cả Photoshop lẫn thằng này
https://tinyjpg.com
Cách tốt nhất vẫn là ráng giảm kích cỡ của hình xuống nếu được anh, nhiều khi không cần 1600×1200 đâu :))
2. Bên Cybersoft có anh CEO em quen, dạy cũng ok anh nhe. Anh có thể tìm hiểu chương trình học thử.
Nếu apply thì anh dùng mã FRONT_TDCD để được giảm 500k nhe 😀
LikeLiked by 1 person
còn lazada và adayroi nữa, bạn review nốt đi cho đủ bộ 🙂
LikeLiked by 1 person
Review thêm nó sẽ làm bài viết dài ra bạn ơi :))
LikeLiked by 2 people
uhm vậy có thêm part 3 không nhỉ? đang rất hóng 2 đồng chí đấy
LikeLiked by 1 person
Tên web là Sen Đỏ anh ơi :))
LikeLiked by 1 person
Chậm như Sên nên cứ gọi là Sên Đô nhé :3
LikeLiked by 2 people
Product bên tiki.vn khá nặng nề so với thegioididong.com nên so sánh vậy ko khách quan lắm. Thegioididong chỉ load ảnh điện thoại, laptop với size rất nhỏ, còn mấy cái web tmdt thì load khá nhiều ảnh các product khác nhau, hàng ngày ko biết bao nhiêu ảnh được user up lên.
Còn hơn nữa là web tmdt thì cần load nhiều module và phức tạp hơn 1 cái web bán hàng.
Nếu nói toàn bộ trang web 5.8 MB là khổng lồ thì thử phân thích và đánh giá amazon xem.
Nếu muốn đánh giá thì nên hiểu rõ ngữ cảnh là load cái gì? nặng bao nhiêu ? mất bao lâu?
LikeLiked by 3 people
Muốn load nhanh không đặt scripts ,ảnh, videos,iframe ở Home.Mấy trang trên kể thích kiểu loè loẹt nên load chậm.Mọi sự so sánh đều khập khiễng.
LikeLiked by 1 person
Bài của bạn rất hay và hữu ích quá, Mình đã apply các mẹo mà bạn đề cập trong bài để tối ưu tốc độ load web của bạn mình và kết quả thì tốc độ được cải thiện đáng kể. Mình sử dụng Google PageSpeed Insights để phân tích thì từ 28/100 đã lên đến 89/100.
Mình chỉ có thêm vài câu hỏi cần bạn giúp?
Sau khi dùng GG PageSpeed Insights thì GG có recommend cho mình về Leverage browser caching : “Setting an expiry date or a maximum age in the HTTP headers for static resources instructs the browser to load previously downloaded resources from local disk rather than over the network.”
https://www.googletagmanager.com/gtag/js?(15 minutes)
https://apis.google.com/…/platform.js?onload=onLoadGoogleCallback (30 minutes)
https://www.google-analytics.com/analytics.js (2 hours)
Mình đã research trên mạng và cũng đã thử nhưng chưa khắc phục được cái này. Hiện tại mình đang dùng MVC, bạn có link blog nào về vấn đề này không? share cho mình với nhé!
Cảm ơn bạn.
LikeLiked by 1 person
Link script của bạn do Google host nên ko can thiệp được, chịu rồi bạn :))
LikeLike
haha!Vậy thôi chắc chịu thật rồi. tks bạn
LikeLiked by 1 person
Cái này bạn dùng mod_expires set trong htaccess nhé, còn phần compression thì dùng mod_deflate nữa. 2 cái này tăng điểm speed rất nhiều
LikeLiked by 1 person
Cho em xin link của engineering blog của Tiki được không
LikeLiked by 1 person
Bài viết hay quá bạn!
Bạn cho ý kiến về web này đi: teambaphai.com.Nó load rất tốt đó.
LikeLiked by 1 person
Bài viết quá hay và bổ ích. Mình cảm ơn Hoàng nhìu
LikeLiked by 1 person
Bài viết hay, cơ mà chỗ comment đặt dưới cùng, kéo xuống hơi phiền, đưa lên đầu được không 😐
LikeLike
Comment đặt dưới cùng để đọc xong hết bài mới comment bạn nhé 😉
LikeLike
chắc ý là dưới cùng của phần comment đó anh. bạn ấy muốn đặt ngay sau bài viết để khỏi cần đọc comment người khác
LikeLike
À ra vậy hihi
LikeLike
oh có một cái nữa là tiki sử dụng http/2 với dns-prefetch. 2 thằng này cũng cải thiện tốc độ load trang lắm.
LikeLike
Một bài viết rất hay và bổ ích. Hi vọng bạn sẽ viết về đề tài cân bằng tải và mở rộng realtime. Cám ơn
LikeLike
mình cũng đang tìm hiểu thế giới di động để tối ưu speed cho webste của mình, họ code hay thật , đang gặp vấn đề cnd ko cho load font 😦
LikeLike
Nhờ bài viết này mà mình vào sendo làm. 😀
LikeLike
Bài viết hay nhưng chưa khả quan lắm
-TGDĐ chưa phải là một ECommerce lớn, vì chỉ mỗi TGDĐ. Còn Sendo thì là một trang thương mại điện tử với nhiều Store
-Dù sao cũng cảm ơn bạn review cái nhìn tổng thể.
-Rất hay và rất bổ ích.
LikeLike
Mình nghĩ hình ở sendo và tiki quá lớn cũng vì hình ảnh đều do các shop up, mà các shop thì làm gì biết mấy WTF này, cứ hình to hình đẹp là được.
LikeLike