translation

Bài viết được dịch bởi AI.

뚠뚠멍의 생각들

Đo lường hiệu năng trang web - PerformanceObserver

  • Ngôn ngữ viết: Tiếng Hàn Quốc
  • Quốc gia tiêu chuẩn: Tất cả các quốc giacountry-flag
  • CNTT
Ảnh đại diện

Bài viết được tóm tắt bởi durumis AI

  • Việc sử dụng các công cụ đo lường hiệu năng trang web (PageSpeed Insights, Lighthouse) để cải thiện hiệu năng trang web sẽ giúp tăng khả năng hiển thị trên công cụ tìm kiếm, và các chỉ số Web Core Vitals đóng vai trò quan trọng.
  • Để cải thiện các chỉ số như CLS, LCP, FCP, FID, chúng ta có thể áp dụng các kỹ thuật như UI Skeleton, tối ưu hóa hình ảnh, loại bỏ các yếu tố chặn hiển thị, tối ưu hóa font web, xử lý JavaScript bất đồng bộ, v.v.
  • Bài viết sẽ giới thiệu các phương pháp cải thiện từng chỉ số cùng với các kỹ thuật khác nhau để nâng cao hiệu năng trang web (nén gzip, Web Worker, v.v.). Trong tương lai, chúng tôi sẽ đào sâu hơn vào các nội dung liên quan.

Thông qua trang web do Google cung cấp


bạn có thể dễ dàng đo lường hiệu suất của trang web.


https://pagespeed.web.dev/
để nhập URL và đo lường, hoặc bạn có thể cài đặt Lighthouse dưới dạng tiện ích mở rộng của Chrome để đo lường.


Cải thiện chỉ số mang lại lợi ích gì?

Có thể giúp trang web hiển thị tốt hơn trên công cụ tìm kiếm. SEO thường sử dụng rendering phía server,

nếu các chỉ số hiệu năng trên thấp thì hiệu quả sẽ giảm mạnh.


Cách cải thiện?

Trang web web.dev đã giải thích chi tiết cách cải thiện từng chỉ số.

Đặc biệt, 3 chỉ số đóng góp phần lớn vào điểm số. (Web Core Vitals)

Tôi muốn ghi lại những điều đã thử để cải thiện chỉ số.


Làm cách nào để đo lường cục bộ?


export default () => {
if (process.client && 'PerformanceObserver' in window) {
let cumulativeLayoutShiftScore = 0;
let largestContentfulPaint = 0;
let firstInputDelay = 0;
let firstContentfulPaint = 0;
// CLS
const clsObserver = new PerformanceObserver((list) => {
  const entries = list.getEntries();
  entries.forEach((entry) => {
    if (!entry.hadRecentInput) {
      cumulativeLayoutShiftScore += entry.value;
    }
  });
});

// LCP
const lcpObserver = new PerformanceObserver((list) => {
  const entries = list.getEntries();
  const lastEntry = entries[entries.length - 1];
  largestContentfulPaint = lastEntry.startTime;
});

// FID
const fidObserver = new PerformanceObserver((list) => {
  const entries = list.getEntries();
  const firstEntry = entries[0];
  firstInputDelay = firstEntry.processingStart - firstEntry.startTime;
});

// FCP
const fcpObserver = new PerformanceObserver((list) => {
  const entries = list.getEntries();
  const firstEntry = entries[0];
  firstContentfulPaint = firstEntry.startTime;
});

clsObserver.observe({ type: 'layout-shift', buffered: true });
lcpObserver.observe({ type: 'largest-contentful-paint', buffered: true });
fidObserver.observe({ type: 'first-input', buffered: true });
fcpObserver.observe({ type: 'paint', buffered: true });

window.addEventListener('onload', () => {
  console.log('Final CLS Score:', cumulativeLayoutShiftScore);
  console.log('LCP:', largestContentfulPaint);
  console.log('FID:', firstInputDelay);
  console.log('FCP:', firstContentfulPaint);
});
}
};

Chèn đoạn mã trên. Đối với Nuxt, hãy đặt nó vào plugins và kiểm tra nhật ký console.

Cumulative Layout Shift (CLS)

Đo lường mức độ thay đổi bố cục khi trang web được hiển thị.

Ví dụ, giả sử có một trang web hiển thị hình ảnh có kích thước 400x400 sau khi nhận được URL hình ảnh từ phản hồi API,

vị trí của một số bố cục sẽ bị đẩy lùi 400px khi hình ảnh được hiển thị.

Đây là một chuyển động không mong muốn của người dùng, không chỉ ảnh hưởng xấu đến trải nghiệm người dùng mà còn ảnh hưởng gián tiếp đến trình duyệt khi hiển thị màn hình.

ảnh hưởng gián tiếp đến việc hiển thị màn hình của trình duyệt.


Có 2 cách đơn giản để cải thiện.


1. Áp dụng bộ khung UI

- Hầu hết các trang web đều vẽ khung xương phù hợp với kích thước hình ảnh hoặc thành phần. Hãy xem xét điều này khi phát triển màn hình. Đối với Vue, sử dụng v-if và v-else để vẽ khung xương cho từng yếu tố.

2. Đặt trước chiều cao

- Nếu bộ khung xương có quá nhiều kiểu, việc bảo trì sẽ trở nên phức tạp và có thể phản tác dụng. Chỉ cần đặt min-height cho các phần tử sắp được hiển thị cũng có thể mang lại hiệu quả.


- Trong trường hợp kích thước hình ảnh khác nhau trên các thiết bị, chẳng hạn như web phản hồi, việc đặt chiều cao cố định là khó khăn. Trong trường hợp này, bạn có thể sử dụng thiết bị nhỏ nhất làm tiêu chuẩn hoặc sử dụng vh hoặc vw.

3. Khai báo rõ ràng thuộc tính width và height cho thẻ hình ảnh

- Bạn có thể thêm thuộc tính width và height vào thẻ hình ảnh như sau:

<img src="image.jpg" width="400" height="400">

Ngay cả khi kích thước thực tế của hình ảnh không phải là 400x400, điều này sẽ cho trình duyệt biết kích thước dự kiến ​​của hình ảnh.

4. Sử dụng font-display: swap để ngăn chặn sự thay đổi bố cục do font web gây ra

- Hiển thị font thay thế để ngăn chặn sự dịch chuyển bố cục.



Largest Contentful Paint(LCP)

Thời gian hiển thị của phần tử chiếm nhiều diện tích nhất trên màn hình. Thông thường, đó sẽ là hình ảnh, và một cách trực quan là tăng tốc độ tải.


1. Giảm kích thước hình ảnh.

- Kiểm tra xem kích thước hình ảnh có lớn hơn kích thước hiển thị hay không.

- Tối ưu hóa việc hiển thị hình ảnh bằng các phần mở rộng như webp. Webp có kích thước nhỏ hơn JPEG khoảng 30% khi sử dụng nén có mất mát và nhỏ hơn PNG khoảng 20% khi sử dụng nén không mất mát.

- Bạn cũng có thể xem xét tải lười (lazy loading) dựa trên vị trí cuộn.


2. Sử dụng bộ nhớ đệm hoặc CDN.

3. Loại bỏ các yếu tố chặn hiển thị.

- Hầu hết các chỉ số đo lường đều bị ảnh hưởng, vì vậy hãy chắc chắn loại bỏ chúng. Khi hiển thị màn hình, trình duyệt tải các script trong thẻ head trước, sau đó mới hiển thị, vì vậy hãy kiểm tra xem các script trong thẻ head (thường là script bên ngoài) có cần được hiển thị trước hay không. Bạn có thể dễ dàng quản lý chúng bằng cách sử dụng các thẻ async và defer.

* Tôi sẽ viết một bài viết khác về các thuộc tính script trong thẻ head.

4. Thu nhỏ kích thước bundle.

- Ngoài tốc độ hiển thị hình ảnh, nếu tốc độ truyền từ server chậm, bạn cần cải thiện điều này.

Nếu bạn sử dụng proxy server như nginx, bạn có thể sử dụng nén gzip.

* Tôi sẽ viết một bài viết khác về cấu hình nginx.

First Contentful Paint(FCP)

Thời điểm nội dung đầu tiên trên trang web được hiển thị.

1. Tương tự, loại bỏ các yếu tố chặn hiển thị.

2. Thu nhỏ kích thước HTML.

- Việc lồng nhau quá nhiều thẻ div có thể tạo ra một cây rất phức tạp và làm tăng kích thước tệp.

3. Font web bên ngoài có thể là nguyên nhân. Hãy sử dụng tích cực font-display: swap; để hiển thị font mặc định trước.


First Input Delay(FID)

Thời gian trình duyệt xử lý đầu vào đầu tiên của người dùng trên trang web (như nhấp chuột, cuộn…). Đôi khi, bạn có thể thấy nút không phản hồi khi nhấp vào, nhưng thực ra nó không bị treo mà đang chờ phản hồi từ API.


1. Sử dụng tốt tính năng bất đồng bộ để ngăn luồng chính của JavaScript bị ràng buộc bởi các tác vụ nặng.

2. Sử dụng Web Worker để thực hiện các tác vụ khác ngoài luồng chính.

* Tôi sẽ viết một bài viết khác về Web Worker.

Do giới hạn số lượng từ nên tôi xin phép kết thúc tại đây.



뚠뚠멍
뚠뚠멍의 생각들
뚠뚠멍
Vấn đề tương thích đa trình duyệt mà tôi đã gặp phải (chủ yếu là Safari)Bài viết này ghi lại các vấn đề tương thích đa trình duyệt (chủ yếu là Safari) phát sinh trong quá trình phát triển web di động và cách giải quyết chúng. Bài viết đề cập đến vấn đề tính toán chiều cao viewport, vấn đề giao diện người dùng bị lệch do bàn p

September 27, 2024

Vấn đề đa trình duyệt mà tôi đã gặp phải (Safari)Bài viết này giới thiệu cách giải quyết các vấn đề bố cục xảy ra trên Safari khi phát triển web di động. Bài viết sẽ đề cập đến giải pháp cho vấn đề tính toán viewport và vấn đề vị trí bàn phím, cũng như cách sử dụng tiền tố -webkit-.

September 27, 2024

Các quy tắc cơ bản của CSS (Normal flow, BFC, IFC)Bài viết này giải thích về các quy tắc cơ bản của CSS là Normal flow, BFC, IFC, đồng thời cung cấp kiến thức cần thiết cho việc cấu trúc bố cục và thiết kế phản hồi.

September 7, 2024

Hướng dẫn đầy đủ về thuộc tính CSS object-fitTìm hiểu cách sử dụng thuộc tính CSS object-fit để điều chỉnh kích thước và hiển thị hình ảnh web một cách hiệu quả. Thuộc tính này cung cấp nhiều tùy chọn khác nhau như duy trì tỷ lệ hình ảnh, cắt ảnh, lấp đầy, v.v.
Meursyphus
Meursyphus
Meursyphus
Meursyphus

July 14, 2024

Onpage SEO là gì trong SEO?Tìm hiểu về Onpage SEO, phương pháp tối ưu hóa nội dung, từ khóa, meta tag,... trên trang web để nâng cao thứ hạng trên công cụ tìm kiếm. Nâng cao các yếu tố khác nhau để tăng lượng truy cập và cải thiện thứ hạng tìm kiếm cho trang web của bạn.
꿈많은청년들
꿈많은청년들
꿈많은청년들
꿈많은청년들

May 28, 2024

Tối ưu hóa SEO cho Mobile: Xây dựng trang web thân thiện với thiết bị di độngKhi số lượng người dùng di động ngày càng tăng, tối ưu hóa SEO cho thiết bị di động trở nên quan trọng hơn bao giờ hết. Hãy tạo ra một trang web thân thiện với thiết bị di động bằng cách áp dụng thiết kế web phản hồi, tốc độ tải trang nhanh và điều hướng
꿈많은청년들
꿈많은청년들
꿈많은청년들
꿈많은청년들

June 10, 2024

Định dạng hình ảnh thân thiện với SEO: Hiệu quả và cách sử dụng tệp SVGSử dụng tệp SVG cho hình ảnh trên trang web giúp giảm dung lượng, không làm giảm chất lượng hình ảnh, giúp tăng tốc độ tải trang và hỗ trợ SEO.
꿈많은청년들
꿈많은청년들
꿈많은청년들
꿈많은청년들

May 22, 2024

Sử dụng Cloud Run để phục vụ Tệp tĩnh - 1Bài đăng trên blog về cách sử dụng Google Cloud Run để cung cấp các tệp tĩnh. Bài viết tập trung vào việc chuyển hướng và cải thiện hiệu năng.
두루미스 기술 블로그
두루미스 기술 블로그
두루미스 기술 블로그
두루미스 기술 블로그

September 4, 2024

Tối ưu hóa hiệu quả SEO với AMP: Thực hiện trang di động tải nhanhKhám phá cách sử dụng Google AMP để tăng tốc độ tải trang di động và tối ưu hóa hiệu quả SEO. Giúp cải thiện trải nghiệm người dùng và tối ưu hóa cho công cụ tìm kiếm.
꿈많은청년들
꿈많은청년들
꿈많은청년들
꿈많은청년들

June 18, 2024