- HTML
- CSS
- Fonts
- Images
- JavaScript
- Server (in progress)
- JS Frameworks (in progress)
Hiệu suất là một chủ đề lớn, nhưng nó không chỉ là chủ đề của "back-end" hay "admin": nó cũng phụ thuộc vào Front-End.Danh sách kiểm tra hiệu suất Front-End là một danh sách đầy đủ về các yếu tố mà bạn cần kiểm tra hoặc ít nhất là phải biết đến nó, với tư cách là một lập trình viên Front-End và áp dụng vào dự án của bạn (cá nhân hay chuyên nghiệp).
Đối với mỗi quy tắc, bạn sẽ có một đoạn giải thích vì sao quy tắc này quan trọng và làm sao để bạn có thể sửa nó. Để biết thêm thông tin sâu hơn, bạn nên tìm những link dẫn tới công cụ, các bài viết hoặc các tài liệu mà có thể hoàn thiện hơn checklist.
Tất cả những điều trong Danh sách kiểm tra hiệu suất Front-End* là yếu tố cần thiết để đạt được điểm số hiệu suất cao nhất nhưng bạn sẽ tìm thấy một chỉ số để giúp bạn cuối cùng ưu tiên một số quy tắc khác. Có 3 mức độ ưu tiên:
- ![low][low] có nghĩa là mục đó có độ ưu tiên thấp.
- ![Medium][medium] có nghĩa là mục đó có độ ưu tiên trung bình. Bạn không nên bỏ qua vấn đề ở mục đó.
- ![High][high] có nghĩa là mục đó có độ ưu tiên cao. Bạn không thể tránh việc không tuân theo quy tắc đó và thực hiện các điều chỉnh được đề nghị.
Đây là danh sách các công cụ bạn có thể sử dụng để kiểm tra hoặc giám sát trang web hay ứng dụng của bạn:
- 🛠 WebPagetest: Website kiểm tra hiệu suất và độ tối ưu
- 🛠 ☆ Dareboost: Website kiểm tra tốc độ và phân tích website (sử dụng mã WPCDD20 để -20%)
- 🛠 Treo: Giám sát tốc độ website
- 🛠 GTmetrix | Kiểm tra tốc độ website và tối ưu hóa hiệu suất
- 🛠 PageSpeed Insights
- 🛠 Pingdom: Kiểm tra tốc độ của website
- 📖 Giúp cho website nhanh hơn | Google Developers
- 🛠 Sitespeed.io - chào mừng bạn đến với thế giới web tuyệt đẹp
- 🛠 Calibre
- 🛠 Website Speed Test | Kiểm tra hiệu suất của web » Dotcom-Tools
- 🛠 Giám sát thời gian hoạt động của website và máy chủ - Pingdom (Free Signup Link)
- 🛠 Uptime Robot
- 🛠 SpeedCurve: Giám sát hiệu suất của Front-end
- 🛠 PWMetrics - công cụ CLI và thư viện thu thập các số liệu về hiệu suất
- 🛠 Varvy - Tối ưu tốc độ trang
- 🛠 Lighthouse - Google
- 🛠 Checkbot browser extension - Các phương pháp hay nhất về kiểm thử hiệu suất trang web
- 🛠 Yellow Lab Tools | Kiểm tra để giúp tăng tốc các trang web nặng
- 📹 Giá trị của Javascript - YouTube (text version)
- AddyOsmani.com - Ngân sách để bắt đầu cải thiện hiệu suất
- 📖 Bắt đầu với phân tích hiệu suất theo thời gian | Google Developers
- 📖 Trạng thái của 1 website | 2018_01_01
- 📖 Dung lượng của một trang web không quan trọng
- 📖 Front-End Performance Checklist 2018 [PDF, Apple Pages]
- 📖 Thiết kế đáp ứng hiệu xuất cân bằng giữa Thẩm mỹ và Tốc độ - By Lara Callender Hogan [eBook, Print]
- 📖 Varvy - Bảng thuật ngữ về hiệu suất cho website
- 📖 fabkrum/web-performance-resources: Cập nhật bộ sưu tập tài nguyên có giá trị về hiệu suất website
- 📖 Checkbot - Các phương pháp hay nhất về tối ưu tốc độ web
- 🛠 Progressive Tooling - Danh sách các công cụ bên thứ ba được xây dựng bởi cộng đồng có thể sử dụng được để cải thiện hiệu suất trang
![html]
-
Tối giản HTML: ![medium] Code HTML là tối giản, các comment, khoảng trắng và các dòng mới phải loại bỏ khỏi các file trên bản production.
Tại sao:
Xóa toàn bộ những khoảng trống, comment, và dòng trống không cần thiết sẽ giảm được kích thước HTML của bạn và tăng tốc thời gian tải trang của bạn và rõ ràng việc tải xuống cho user của bạn được giảm nhẹ hơn.
Làm như nào:
Hầu hết các framework đều có plugin tạo điều kiện cho việc tối giản hóa các trang web. Bạn có thể sử dụng một loạt các module NPM mà có thể làm công việc đó cho bạn một cách tự động.
-
Loại bỏ những comment không cần thiết: ![low] Đảm bảo rằng các comment được loại bỏ khỏi trang của bạn.
Vì sao:
Các comment không thực sự hữu dụng đối với người dùng và nên được loại bỏ khỏi những file trên production. Một trường hợp mà bạn muốn giữ lại các comments nguồn gốc cho một thư viện.
Làm như nào:
⁃ Hầu hết là các comment có thể bị loại bỏ thông qua việc sử dụng plugin minify HTML.
-
Loại bỏ các thuộc tính không cần thiết: ![low] Các thuộc tính type như
type="text/javascript"
hoặctype="text/css"
đã không còn bắt buộc nữa và sẽ bị xóa đi.<!-- Trước khi có HTML5 --> <script type="text/javascript"> // JavaScript code </script> <!-- Hiện nay --> <script> // JavaScript code </script>
Vì sao:
Các thuộc tính type đã không còn cần thiết vì HTML5 đã ngầm hiểu text/css và text/javascript như các giá trị mặc định. Phần code không được sử dụng nên được loại bỏ vì nó làm trang nặng hơn khi không được sử dụng bởi website hoặc ứng dụng của bạn.
Làm như nào:
⁃ Chắc chắn là tất cả các thẻ
<link>
và<script>
của bạn không có bất kì thuộc tính type nào. -
Luôn luôn đặt các thẻ CSS trước các thẻ Javascript: ![high] Chắc chắn là phần CSS của bạn luôn được tải trước phần code Javascript.
<!-- Not recommended --> <script src="jquery.js"></script> <script src="foo.js"></script> <link rel="stylesheet" href="foo.css"/> <!-- Recommended --> <link rel="stylesheet" href="foo.css"/> <script src="jquery.js"></script> <script src="foo.js"></script>
Vì sao:
Việc đặt các thẻ CSS trước bất kì thẻ Javascript nào khiến việc tải xuống song song tốt hơn, giúp tăng tốc render của trình duyệt.
Làm như nào:
Đảm bảo là các thẻ
<link>
và<style>
trong thẻ<head>
của bạn luôn luôn đứng trước thẻ<script>
. -
Giảm thiểu số lượng jframe: ![high] Chỉ sử dụng iframe nếu bạn không có bất cứ một công nghệ khác. Cố gắng tránh việc sử dụng jframe nhiều nhất có thể.
[⬆ quay về đầu trang]
![css]
-
Giảm thiểu: ![high] Tất cả file CSS đều phải Giảm thiểu, các comment, khoảng trắng và các dòng mới phải được loại bỏ khỏi các file trong production.
Vì sao:
Khi các file CSS được Giảm thiểu, nội dung được tải nhanh hơn và tốn ít dữ liệu được gửi về cho client hơn. Điều quan trọng là phải luôn luôn giảm thiểu các file CSS trong bản production. Nó có lợi cho người dùng vì nó áp dụng cho bất kì doanh nghiệp nào muốn giảm thiểu chi phí băng thông và lượng tài nguyên sử dụng.
Làm như nào:
⁃ Sử dụng các công cụ để Giảm thiểu các file của bạn tự động trước hoặc trong khi xây dựng hay phát triển sản phẩm của bạn.
-
sự liên hệ: ![medium] Các file CSS được ghép lại thành file duy nhất (Không phải lúc nào cũng phù hợp với HTTP/2).
<!-- Not recommended --> <link rel="stylesheet" href="foo.css"/> <link rel="stylesheet" href="bar.css"/> <!-- Recommended --> <link rel="stylesheet" href="foobar.css"/>
Vì sao:
Nếu bạn còn đang sử dụng HTTP/1, bạn có thể vẫn cần phải ghép nối các files của mình lại, nó không còn đúng thực sự nếu server của bạn sử dụng HTTP/2 (việc kiểm tra lại nên được thực hiện).
Làm như nào:
⁃ Sử dụng công cụ online hoặc bất kì một plugin nào đó trước hoặc trong khi xây dựng hoặc phát triển của bạn để ghép nối các file lại với nhau.
⁃ Đương nhiên là hãy chắc chắn việc ghép nối không phá vỡ project của bạn. -
non-blocking: ![high] Các file CSS phải không bị khóa để ngăn việc DOM mất nhiều thời gian tải.
<link rel="preload" href="global.min.css" as="style" onload="this.rel='stylesheet'"> <noscript><link rel="stylesheet" href="global.min.css"></noscript>
Vì sao:
Các file CSS có thể khóa việc tải trang và trì hoãn việc render trang của bạn. Sử dụng
preload
có thể tải các file CSS trước khi trình duyệt bắt đầu hiển thị nội dung của trang.Làm như nào:
⁃ Bạn cần thêm thuộc tính
rel
với giá trịpreload
và thêmas="style"
vào thành phần<link>
. -
Dộ dài của các class CSS: ![low]Dộ dài của các class có thể tác động (nhẹ) lên các file HTML và CSS của bạn.
Vì sao:
Ngay cả việc tác động lên hiệu suất cũng có thể bị tranh chấp, việc đưa ra quyết định đối với chiến lược đặt tên liên quan tới project của bạn có thể tác động đáng kể tới khả năng bảo trì của bảng các style. Nếu bạn sử dụng BEM, trong một vài trường hợp, bạn có thể kết thúc với các class có nhiều kí tự hơn cần thiết. Việc chọn name và namespace một cách khôn ngoan của bạn luôn là điều quan trọng.
Làm như nào:
Việc đặt một giới hạn số lượng các kí tự có thể khiến nhiều người thấy hứng thú nhưng chắc chắn là bạn đã phá vỡ website của bạn trong các component có thể giúp giảm thiểu số lượng class (và các khai báo) với độ dài class của bạn.
-
CSS Không sử dụng: ![medium] Xóa các selector CSS không sử dụng
Vì sao:
Loại bỏ các selector CSS không được sử dụng có thể giảm kích thước các file của bạn và tăng tốc độ load nội dung lên.
Làm như nào:
⁃
⚠️ Hãy luôn luôn kiểm tra nếu framework CSS bạn muốn sử dụng không chứa code chuẩn hóa/reset. Thỉnh thoảng bạn không cần mọi thứ đặt ở trong file reset/chuẩn hóa.
-
CSS hữu dụng: ![high] Phần CSS hữu dụng(hoặc "trong màn hình đầu tiên") thu thập tất cả các CSS được sử dụng để render ra phần hiển thị của trang. nó được nhúng trước phần gọi CSS chính của bạn và nằm giữa
<style></style>
trên một dòng duy nhất (tối giản nếu có thể). Vì sao:Việc đặt CSS hữu dụng dạng inline giúp tăng tốc độ render của các trang web, giảm được lượng request tới server. Làm như nào: Việc tạo các CSS hữu dụng bằng các công cụ online hoặc sử dụng plugin như plugin của Addy Asmani đã phát triển.
-
CSS nhúng hay inline: ![high] Tránh việc sử dụng CSS nhúng hoặc inline trong thẻ
<body>
(Not valid for HTTP/2)Vì sao:
Một trong những lý do đầu tiên là vì nó là một cách hay để phân chia nội dung riêng biệt từ thiết kế. Nó cũng giúp bạn có khả năng bảo trì code dễ dành hơn và website của bạn luôn truy cập được. Nhưng liên quan tới vấn đề hiệu suất, nó khá đơn giản vì nó giúp giảm kích thước của file và thời gian tải trang HTML.
Làm như nào:
Luôn sử dụng stylesheet bên ngoài hoặc nhúng CSS vào thẻ
<head>
của bạn (và phải tuân theo các quy tắc tăng hiệu suất về CSS khác) -
Phân tích các stylesheet phức tạp: ![high] Việc phân tích stylesheet của bạn có thể giúp bạn tìm thấy lỗi, dư thừa và các selector CSS bị lặp lại.
Vì sao:
Thông thường bạn có thể bị dư thừa hoặc lỗi xác thực trong CSS của mình, phân tích các file CSS của bạn và loại bỏ những phần phức tạp này có thể giúp bạn tăng tốc các file CSS (vì trình duyệt của bạn sẽ đọc chúng nhanh hơn)
Làm như nào:
CSS của bạn cần được tổ chức lại, sử dụng một bộ tiền xử lý CSS có thể giúp bạn. Một vài công cụ online được liệt kê bên dưới cũng giúp bạn phân tích và sửa lỗi code của bạn.
- 🛠 TestMyCSS |CSS Tối ưu và kiểm tra hiệu suất
- 🛠 CSS Stats
- 🛠 macbre/analyze-css: Selector CSS phức tạp và phân tích hiệu suất
- 🛠 Project Wallace giống như thống kê CSS nhưng lưu trữ dữ liệu thống kê theo thời gian vì vậy bạn có thể theo dõi được các thay đổi của mình
[⬆ quay lại đầu trang]
![fonts]
-
Định dạng Webfont: ![medium] Bạn đang sử dụng WOFF2 trên project web hay ứng dụng của bạn.
Vì sao:
Theo Google, định dạng nén WebFont WOFF 2.0 cung cấp mức tăng trung bình khoảng 30% so với WOFF 1.0. Thật tuyệt vời khi sử dụng WOFF 2.0, WOFF 1.0 như biện pháp dự phòng và TFF.
Làm như nào:
Hãy kiểm tra trước khi mua một font mới mà nhà cung cấp đã đưa cho bạn định dạng WOFF2. Nếu bạn sử dụng font miễn phí, bạn luôn luôn có thể sử dụng Font Squirrel để chuyển sang mọi định dạng bạn cần.
-
Sử dụng
preconnect
để load font của bạn nhanh hơn: ![medium]<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
Vì sao:
Khi bạn tới một trang web, thiết bị của bạn cần tìm hiểu nơi mà trang web của bạn đang hoạt động và nó cần kết nối tới server nào. Trình duyệt của bạn phải liên lạc với DNS server và chờ nó tìm xong trước khi tìm và tải tài nguyên (font, file CSS,...) Việc tìm nạp và kết nối trước cho phép trình duyệt tìm kiếm các thông tin về DNS và bắt đầu thiết lập kết nối TCP tới server lưu trữ file font. Điều này giúp hiệu suất tăng lên bởi vì khi trình duyệt phân tích file css với thông tin về font và phát hiện nó cần yêu cầu file font từ server, nó sẽ có sẵn thông tin về DNS và có kết nối mở đến server sẵn trong pool.
Làm như nào:
⁃ Trước khi tìm nạp trước các webfont của bạn, sử dụng webpagetest để đánh giá website của bạn
⁃ Tìm kiếm, tra cứu DNS và lưu máy chủ đang được yêu cầu
⁃ Tìm nạp trước các webfont của bạn trong thẻ<head>
và thêm các tên máy chủ mà bạn đã tìm nạp cuối cùng- 📖 Đẩy nhanh việc tải về Google Font bằng kết nối trước - CDN Planet
- 📖 Giúp trang web của bạn nhanh hơn với các gợi ý về kết nối | Viget
- 📖 Các hướng dẫn cuối cùng về gợi ý cho trình duyệt: Tải trước, Nạp trước, và kết nối trước - MachMetrics Speed Blog
- 📖 Hướng dẫn toàn diện về chiến lược tải font —zachleat.com
- 🛠 typekit/webfontloader: Trình tải font cho phép bạn thêm quyền quản lý khi sử dụng font được liên kết thông qua @font-face.
-
Kích thước của Webfont: ![medium] Các kích thước của Webfont không được vượt quá 300kb (bao gồm tất cả các biến thể)
- Chặn Flash hoặc các text bị ẩn: ![medium] Tránh các loại text màu trong suốt trong quá trình Webfont được tải.
[⬆ quay lại đầu trang]
![images]
-
Tối ưu hóa hình ảnh: ![high] Các hình ảnh của bạn phải được tối ưu, được nén mà không ảnh hưởng trực tiếp tới user cuối.
Vì sao:
Việc tối ưu hóa các hình ảnh sẽ tải nhanh hơn trên trình duyệt của bạn và tiêu thụ ít dữ liệu hơn
Làm như nào:
⁃ Cố gắng sử dụng các hiệu ứng trên CSS3 khi có thể (thay cho các ảnh nhỏ)
⁃ Khi có thể, hãy sử dụng font thay cho phần text được mã hóa trong ảnh của bạn
⁃ Sử dụng SVG ⁃ Sử dụng một công cụ và chỉ định mức độ nén dưới 85.- 📖 Tối ưu hóa hình ảnh | Các nguyên tắc cơ bản về Web | Google Developers
- 📖 Tối ưu hóa các hình ảnh cần thiết - Một eBook của Addy Osmani
- 🛠 TinyJPG – Nén các hình ảnh JPEG một cách thông minh
- 🛠 Kraken.io - Tối ưu hóa hình ảnh online
- 🛠 Compressor.io - Tối ưu hóa, nén các hình ảnh JPEG và PNG
- 🛠 Cloudinary - Công cụ phân tích hình ảnh
- 🛠 SVGOMG - Tối ưu hóa các file vector SVG
-
Các định dạng hình ảnh: ![high] .Chọn định dạng hình ảnh của bạn một cách thích hợp.
Vì sao:
Để chắc chắn các hình ảnh của bạn không làm website chậm đi, hãy chọn định dạng tương ứng với ảnh của bạn. Nếu nó là là một bức ảnh, JPEG hầu như phù hợp hơn PNG hay GIF. Nhưng đừng quên xem qua các thế hệ định dạng tiếp theo mà nó có thể giảm kích thước file của bạn. Mỗi định dạng ảnh đều có ưu điểm và nhược điểm riêng, điều quan trọng là phải biết chúng để đưa ra sự lựa chọn tốt nhất.
Làm như nào:
⁃ Sử dụng Lighthouse để xác định hình ảnh cuối cùng có thể sử dụng định dạng ở thế hệ tiếp theo (như JPEG 2000m, JPEG XR hay WebP)
⁃ So sánh các định dạng khác nhau, thông thường sử dụng PNG8 thì tốt hơn PNG16, nhưng thỉnh thoảng lại không.
-
Sử dụng các hình ảnh vector thay cho raster/bitmap: ![medium] Thay thế việc sử dụng hình ảnh vector cho các hình ảnh dạng bitmap (khi có thể).
Vì sao:
Các ảnh vector (SVG) có xu hướng nhỏ hơn các ảnh thông thường và SVG đã có khả năng responsive, co dãn một cách hoàn hảo. Các hình ảnh này hoàn toàn có thể tạo và chỉnh sửa bằng CSS.
-
Kích thước của các hình ảnh: ![medium] Đặt các thuộc tính
width
vàheight
vào thẻ<img>
nếu kích thước cuối cùng của hình ảnh sau khi render đã được biết trước.Vì sao:
Nếu chiều cao và chiều rộng được đặt, đã có phần không gian yêu cầu cho hình ảnh đã được đặt riêng khi tải trang. nhiên, nếu không có các thuộc tính này, trình duyệt không s được kích thước của ảnh và không thể dự trữ không gian thích hợp cho nó. Hiệu ứng sau đó sẽ là bố cục trang bị thay đổi trong khi tải (trong khi tải ảnh).
-
Tránh việc sử dụng hình ảnh Base64: ![medium] Cuối cùng thì bạn có thể chuyển đổi các ảnh nhỏ sang dạng base64 nhưng nó thực sự không phải là phương pháp hay.
- 📖 Mã hóa và hiệu năng của Base64, Phần 1 và 2 của Harry Roberts
- 📖 Một cái nhìn rõ ràng hơn về hiệu năng của ảnh dạng Base64 – The Page Not Found Blog
- 📖 Khi nào thì nên mã hóa base64 (và khi nào thì không) | David Calhoun
- 📖 Mã hóa hình ảnh bằng base64 để các trang nhanh hơn | Các yếu tố về hiệu năng và seo
-
Lazy loading: ![medium] Các hình ảnh trên màn hình được tải một cách lười biếng. (Một noscript fallback luôn được cung cấp sẵn).
*Vì sao:
Nó sẽ cải thiện được thời gian trả về của trang hiện tại và sau đó tránh tải nhũng hình ảnh không cần thiết mà user có thể không cần tới. Làm như nào: ⁃ Sử dụng lighthouse để xác định có bao nhiêu hình ảnh trên màn hình.
⁃ sử dụng plugin Javascript như sau để thực hiện việc lazyload các hình ảnh của bạn. Hãy chắc chắn là chỉ có những hình ảnh trên màn hình ⁃Ngoài ra, hãy đảm bảo lazyload chỉ tải xuống các hình ảnh thay thế và được hiển thị khi di chuột qua hoặc các hành động khác của người dùng. -
Responsive các hình ảnh: ![medium] Hãy đảm bảo là những hình ảnh được cung cấp khá gần với kích thước hiển thị của bạn.
Vì sao:
Các thiết bị nhỏ không cần những hình ảnh lớn hơn so với khung nhìn của họ. Bạn nên có nhiều phiên bản của một hình ảnh trên nhiều kích thước khác nhau.
Làm như nào:
Tạo ra các kích thước khác nhau của hình ảnh để các thiết bị của bạn trỏ tới.
⁃ Sử dụngsrcset
vàpicture
để phân phối nhiều biến thể của mỗi hình ảnh.
[⬆ quay lại đầu trang]
![javascript]
-
Giảm thiểu JS: ![high] Tất cả các file Javascript đều phải tối giản, các comments, khoảng trắng và dòng trống đều phải được loại bỏ khỏi các file của production. (Vẫn hợp lệ nếu sử dụng HTTP/2).
Vì sao:
xóa toàn bộ các khoảng trống, comments và xuống dòng không cần thiết sẽ giảm được kích thước các file Javascript của bạn và tăng tốc tải trang và giảm nhẹ được dung lượng user tải về.
Làm như nào:
⁃ Sử dụng các công cụ được đề xuất bên dưới để tối giản các file của bạn tự động trước hoặc trong khi bạn xây dựng hay phát triển.
-
Không có Javascript dạng Inline: ![medium] (Chỉ phù hợp các trang web) Tránh việc nhúng nhiều code Javascript ở giữa thẻ body của bạn. Nhóm code Javascript của bạn lại trong một file bên ngoài hoặc nằm cuối cùng của thẻ
<head>
hay đặt nó ở cuối trang (trước thẻ<body>
).Vì sao:
Việc đặt Javascript nhúng trực tiếp vào thẻ
<body>
của bạn có thể làm chậm trang vì nó phải tải trong khi DOM đang được xây dựng. Tùy chọn tốt nhất là sử dụng một file bên ngoài vớiasync
haydefer
để không chặn DOM lại. Một cách khác là đặt các đoạn script trong thẻ<head>
của bạn. Hầu hết thời gian để phân tích code hawojc các đoạn script nhỏ cần được tải trước khi DOM thực hiện tiến trình chính. Làm như nào: Đảm bảo là mọi file của bạn đề sử dụngasync
hoặcdefer
và đưa ra một quyết định tốt nhất cho việc bạn phải đưa code của mình vào thẻ<head>
. -
Non-blocking JavaScript: ![high] Các file Javascript được load bất đồng bộ sử dụng
async
hoặc ngưng lại bằng cách sử dụng thuộc tínhdefer
.<!-- Defer Attribute --> <script defer src="foo.js"></script> <!-- Async Attribute --> <script async src="foo.js"></script>
Vì sao:
Javascript chặn việc phân tích thông thường của tài liệu HTML, vì vậy khi trình phân tích tiếp cận thẻ
<script>
(đặc biệt là bên trong thẻ<head>
), nó dừng lại để nạp và thực thi. Việc thêmasync
hoặcdefer
được đánh giá cao nếu các script của bạn được đặt trên cùng của trang nhưng ít giá trị hơn nếu nó chỉ nằm trước thẻ</body>
. Nhưng thực tế thì tốt nhất vẫn nên sử dụng các thuộc tính này để tránh ảnh hưởng xấu nên hiệu suất.Làm như nào:
⁃ Thêm
async
(nếu script này không phụ thuộc vào script khác) hoặcdefer
(nếu script này phụ thuộc vào phần trên hoặc phụ thuộc vào script bất đồng bộ khác) như một thuộc tính đối với thẻ script của bạn ⁃ Nếu bạn có những đoạn script nhỏ, có thể sử dụng script dạng inline được đặt ở trên các script bất đồng bộ. -
Tối ưu và nâng cấp thư viện Javascript: ![medium] Tất cả các thư viện Javascript được sử dụng trong project của bạn đều cần thiết (như Vanilla Javascript cho các tính năng đơn giản), việc nâng cấp chúng lên phiên bản mới nhất và không làm phần Javascript của bạn có quá nhiều phương thức không cần thiết.
Vì sao:
Hầu hết thời gian, các phiên bản mới đều được tối ưu hơn và sửa các lỗi bảo mật. Bạn nên sử dụng hầu hết phần code đã được tối ưu cho tốc độ tăng lên vào project của bạn và đảm bảo bạn sẽ không làm website hay ứng dụng bị chậm đi bởi các plugin quá hạn. Làm như nào: Nếu project của bạn sử dụng các package của NPM, npm-check là một thự viện rất tốt cho việc nâng cấp, cập nhật các thư viện khác của bạn. Greenkeeper có thể tự động tìm kiếm các thành phần phụ thuộc của bạn là đưa ra đề xuất cập nhật mỗi khi có phiên bản mới.
-
Kiểm tra kích thước giới hạn của các thành phần phụ thuộc: ![low] Hãy chắc chắn là bạn sử dụng các thư viện bên ngoài một cách khôn ngoan, hầu hết các trường hợp bạn cso thể sử dụng các thư viện nhẹ hơn với các tính năng tương tự.
Vì sao:
Bạn có thể bị thu hút bởi việc sử dụng một trong 745 000 package mà bạn có thể tìm thấy trên npm, nhưng bạn cần chọn ra một package tốt nhát mà bạn cần. Ví du như MomentJS là một thư viện tuyệt vời nhưng nó có quá nhiều method mà bạn có thể không bao giờ sử dụng, đó là ý do vì sao Day.js được tạo ra. Nó chỉ nặng 2kB so với 16.4kB của Moment.
Làm như nào:
Hãy luôn luôn so sánh, lựa chọn thư viện tốt nhất và nhẹ nhất cho thứ bạn cần. Bạn có thể sử dụng các công cụ như npm trends để so sánh lượt tải xuống của package trên NPM hoặc Bundlephobia để biết kích thước của các thành phần phụ thuộc.
-
Hồ sơ JavaScript: ![medium] Kiểm tra các vấn đề về hiệu năng trên các file Javascript của bạn (và cả CSS).
Vì sao:
Độ phức tạp của Javascript có thể làm chậm hiệu năng khi thực hiện. Việc xác định các vấn đề có thể có này là điều cần thiết khi cung cấp một trải nghiêm cho người dùng một cách mượt mà nhất.
Làm như nào:
Sử dụng công cụ Timeline trên Chrome Developer Tool để đánh giá các sự kiện script và tìm ra một trong những sự kiện mất nhiều thời gian.
- 📖 Tăng tốc độ thực thi Javascript | Các công cụ cho Web Developers | Google Developers
- 📖 JavaScript Profiling với Chrome Developer Tools — Smashing Magazine
- 📖 How to Record Heap Snapshots | Tools for Web Developers | Google Developers
- 📖 Chapter 22 - Profiling the Frontend - Blackfire
- 📖 30 mẹo để cải thiện hiệu năng Javascript
-
Sử dụng Service Workers: ![medium] Bạn đang sử dụng Service Worker trên PWA của bạn để cache dữ liệu hoặc thực thi các tác vụ nặng mà không ảnh hưởng tới trải nghiệm của người dụng lên ứng dụng của bạn.
[⬆ quay lại đầu trang]
![server-side]
-
Website của bạn đang sử dụng HTTPS: ![high]
Vì sao:
HTTPS không chỉ dành cho các website thương mại điện tử, mà còn đối với tất cả các trang web có trao đổi dữ liệu. Như việc chia sẻ dữ liệu bởi user hoặc chia sẻ dữ liệu tới các thực thể bên ngoài. Các trình duyệt hiện đại ngày nay giới hạn chức năng đối với các trang web không an toàn. Ví dụ như: vị trí địa lý, đẩy các thông báo và các service worker không hoạt động nếu sản phẩm của bạn không sử dụng HTTPS. Và ngày nay đã rất dễ dành để cài đặt một project với xác thực SSL so với trước kia (và nó còn miễn phí, cám ơn Let's Encrypt vì điều này).
- 📖 Tại sao lại sử dụng HTTPS? | Cloudflare
- 📖 Kích hoạt HTTPS mà không cần phải hi sinh một chút nào hiệu năng website của bạn - Moz
- 📖 HTTPS ảnh hưởng tới hiệu năng website như thế nào
- 📖 HTTP so với HTTPS so với HTTP2 - Câu chuyện thực tế | Tune The Web
- 📖 HTTP vs HTTPS — Kiểm tra cả hai
-
Dung lượng trang < 1500 KB (lý tưởng nhất là < 500 KB): ![high] Giảm thiểu kích thước trang và tài nguyên của bạn nhiều nhất có thể.
Vì sao:
Ý tưởng là bạn phải cố đạt mục tiêu nhỏ hơn 500KB nhưng hiện trạng của web cho thấy trung bình nó nằm trong khoảng 1500KB (cả trên mobile). Phụ thuộc vào đối tượng user mà bạn nhắm tới, kết nối mạng, các thiết bị, điều quan trọng là phải giảm tổng số kylobyte nhiều nhất có thể để có thể đạt được trải nghiệm của user tốt nhất.
Làm như nào:
⁃ Tất cả các quy tắc trong Front-End Performance Checklist sẽ giúp bạn giảm nhiều nhất có thể các tài nguyên và code của bạn.
-
Thời gian tải trang dưới 3 giây: ![high] Giảm thời gian tải trang nhiều nhất có thể để phân phối nội dung của bạn tới user nhanh hơn.
Vì sao:
Website hay ứng dụng của bạn nhanh hơn là bạn càng có ít khả năng tăng việc bị phản hồi lại, nói cách khác là bạn ít bị mất người dùng hay khách hàng trong tương lai. Có đủ các nghiên cứu về chủ đề này đã chứng mình điều đó.
Làm như nào:
Sử dụng các công cụ online như Page Speed Insight hay WebPageTest để phân tích điều gì khiến sản phẩm của bạn bị chậm đi và sử dụng Front-End Performance Checklist để cải thiện thời gian tải của mình.
-
Thời gian cho Byte đầu tiên nhỏ hơn 1.3 giây: ![high] Giảm nhiều nhất thwofi gian trình duyệt chờ nhận dữ liệu mà bạn có thể.
-
Kích thước của cookie: ![medium] Nếu bạn đang sử dụng cookie, hãy chắc chắn là mỗi cookie không vượt quá 2096 byte và domain của bạn không có quá 20 cookie.
Vì sao:
Cookie được trao đổi giữa server và trình duyệt thông qua header của HTTP. Điều quan trọng là giữ kích thước của cookie nhỏ nhất có thể để giảm thiểu các tác động tới thời gian phản hồi của user.
Làm như nào:
Loại bỏ các cookie không cần thiết.
- Giảm thiểu các request HTTP: ![high] Luôn luôn đảm bảo mọi request file đều cần thiết cho website hay ứng dụng của bạn.
- Sử dụng CDN để phân phối các asset của bạn: ![medium] Sử dụng một CDN để phân phối nội dụng của bạn nhanh hơn trên toàn thế giới.
- 📖 10 mẹo để tối ưu hiệu suất cho CDN - CDN Planet
- 📖 HTTP Caching | Web Fundamentals | Google Developers
-
Phân phối các file từ cùng một giao thức: ![high] Tránh việc trang web của bạn phân phối file đến từ nguồn sử dụng HTTP trên trang đang sử dụng HTTPS. Nếu website của bạn sử dụng HTTPS, các file bên ngoài nên được gọi từ cùng một giao thức.
-
Phân phối các file có thể truy cập: ![high] Tránh việc phân phối các file không thể truy cập (404).
- Đặt các header cache HTTP đúng cách: ![high] Đặt các header HTTP để tránh việc xoay vòng giữa trình duyệt và server của bạn.
- bật nén GZIP / Brotli: ![high] Sử dụng các phương thức nén như Gzip hay Brotli để giảm kích thước của các file Javascript. Với các file có kích thước nhỏ, user có thể tải về nhanh hơn, kết quả là cải thiện được hiệu năng.
[⬆ quay lại đầu trang]
- 📖 Tối ưu hiệu suất - React
- 📖 Xử lý hình ảnh trên React | Cloudinary
- 📖 Debug hiệu suất của React 16 và Devtool của Chrome