Dấu thời gian có độ phân giải cao cho sự kiện

Jeff Posnick
J Jeff Posnick

Thuộc tính timeStamp của giao diện Event cho biết thời điểm diễn ra một sự kiện nhất định.

Trong các phiên bản Chrome trước 49, giá trị timeStamp này được biểu thị dưới dạng DOMTimeStamp, là một số nguyên mili giây kể từ thời gian bắt đầu của hệ thống, giống như giá trị mà Date.now() trả về.

Kể từ Chrome 49, timeStamp là một giá trị DOMHighResTimeStamp. Giá trị này vẫn là số mili giây, nhưng với độ phân giải micrô giây, có nghĩa là giá trị sẽ bao gồm một thành phần thập phân. Ngoài ra, thay vì giá trị liên quan đến thời gian bắt đầu của hệ thống, giá trị này sẽ tương ứng với PerformanceTiming.navigationStart, tức là thời gian người dùng chuyển đến trang.

Bạn có thể xem lợi ích của việc dấu thời gian chính xác hơn trong các ví dụ sau:

Những điểm cần lưu ý khi sử dụng trên nhiều trình duyệt và phiên bản cũ

Nếu đã có mã để so sánh các giá trị Event.timeStamp của hai sự kiện, thì bạn không cần phải điều chỉnh mã khi chuyển sang DOMHighResTimeStamp. Hơn nữa, trên các trình duyệt hỗ trợ DOMHighResTimeStamp, mã hiện có của bạn sẽ hưởng lợi từ độ chính xác tăng lên đến micrô giây, cũng như DOMHighResTimeStamp được đảm bảo sẽ tăng đơn điệu, bất kể đồng hồ hệ thống có thay đổi ở giữa quá trình thực thi trang web của bạn hay không.

Nếu, thay vì so sánh 2 giá trị Event.timeStamp, mã của bạn cần xác định khoảng thời gian mà một sự kiện đã diễn ra, thì bạn có thể so sánh trực tiếp giá trị DOMHighResTimeStamp mới với performance.now(). Và nếu cần chuyển đổi Event.timeStamp thành số mili giây tuyệt đối kể từ thời gian bắt đầu của hệ thống, bạn có thể nhận được giá trị đó bằng cách thêm DOMHighResTimeStamp vào performance.timing.navigationStart.

Trong cả hai trường hợp đó, DOMTimeStampDOMHighResTimeStamp hoạt động theo cách khác nhau, nhưng bạn có thể đơn giản hoá mã trên nhiều trình duyệt bằng cách sử dụng hàm chuyển đổi này, do Majid Valipour cung cấp. Phương thức này lấy đối tượng Event làm tham số và trả về một giá trị giống như DOMHighResTimeStamp, sẵn sàng để so sánh với performance.now() hoặc được thêm vào performance.timing.navigationStart.